Créer un site internet

Référence directe non sécurisée à un objet

1. PrincipeMain en arriere fleche dessinee 318 51824

Cette vulnérabilité existe simplement parce que les paramètres de requêtes ne sont pas vérifiés avant traitement. Si le paramètre vulnérable fait référence à un fichier ou à une valeur dans une base de données, il suffit de reconstruire la requête avec une valeur de paramètre normalement interdite pour y avoir accès.

Cette faille peut avoir des impacts importants si un utilisateur mal intentionné obtient par ce biais des accès à des informations et des fonctionnalités pour lesquelles il n'a aucune autorisation.

2. Exemples d'attaque

Cette faille est une des bases de la vulnérabilité exploitée par XSS. En effet, dans les exemples d'attaques exposés précédemment (voir paragraphe 3.3.2), les paramètres récupérés ne sont pas vérifiés. Par contre, si ces valeurs avaient été contrôlées, les caractères spéciaux n'auraient pas été autorisés, empêchant ainsi l'envoi de code frauduleux au navigateur.

Si les paramètres sont passés en paramètre d'un lien, un utilisateur malintentionné peut aisément modifier l'adresse pour accéder à des informations auxquelles il n'aurait pas dû avoir accès. L'exemple suivant reprend la table « comptes » (voir paragraphe 3.2.2) qui va être interrogée par un script PHP pour afficher le numéro de carte bancaire de l'utilisateur.

Figure 21 - Script PHP pour l'affichage du numéro de carte

Sélectionnez

<?php 
//recuperation des parametres 
$nom = $_GET['proprietaire']; 
//generation de la requete 
$requeteSQL = "SELECT numerocarte FROM comptes WHERE nom = '$nom'"; //execution de la requete 
$reponse = mysql_query($requeteSQL); 
$resultat = mysql_fetch_assoc($reponse); 
//affichage du resultat 
echo "<tr><td> Votre numero de carte est :</td><td>"; 
echo $resultat['numerocarte']; 
echo "</td></tr>"; 
?>

Si l'utilisateur malveillant saisit dans son navigateur l'adresse de cette page avec pour paramètre « nom=nom_de_la_victime », il a alors accès au numéro de carte bancaire qu'il n'aurait jamais dû pouvoir voir.

3. Parade et bonnes pratiques

Pour protéger les données les plus confidentielles ou les fonctionnalités les plus avancées, le WASC recommande de demander à l'utilisateur de saisir à nouveau son identifiant et son mot avant de pouvoir y accéder. Ensuite il suffit de se baser sur ces valeurs pour construire les requêtes. Ainsi dans l'exemple de l'affichage du numéro de carte, le paramètre utilisé pour la recherche aurait été celui de la personne qui s'est authentifiée et non celui fourni en paramètre du lien.