Redirection et renvois non validés
1. Principe
Les redirections d'adresse sont utilisées dans les applications Web pour effectuer un changement de page en fonction d'un paramètre.
L'utilisation de la redirection est particulièrement utilisée pour les attaques par hameçonnage (ou phishing). En cliquant sur un lien utilisant une page de redirection, l'utilisateur est automatiquement emmené vers une autre page. Cette redirection peut être utilisée dans le cadre d'une attaque CSRF (voir paragraphe III.F).
2. Exemples d'attaque
Le script suivant est un exemple de page de redirection en utilisant la redirection par code HTML.
Figure 27 - Script PHP de redirection automatique
Sélectionnez
<?php
$nouvelleAdresse='http://nouvelle.adresse.fr/index.php';
if (isset($_GET['adresse'])) {
$nouvelleAdresse=$_GET['adresse'];
}
echo '<!DOCTYPE html>'."\n",
'<html xmlns="http://www.w3.org/1999/xhtml">'."\n",
'<head>'."\n",
'<meta charset="UTF-8" />'."\n",
//Redirection HTML : '<meta http-equiv="refresh" content="0; url='.$nouvelleAdresse.'" />'."\n",
'<title>Redirection</title>'."\n",
'<meta name="robots" content="noindex,follow" />'."\n",
'</head>'."\n",
"\n",
'<body>'."\n",
//au cas où la redirection ne fonctionne pas :
'<p><a href="'.$nouvelleAdresse.'">Redirection</a></p>'."\n",
'</body>'."\n",
'</html>'."\n";
?>
Si un attaquant a connaissance d'une page de redirection vulnérable, il peut l'utiliser dans un lien pour faire rediriger l'utilisateur vers une page Web.
Figure 28 - Lien pour rediriger l'utilisateur vers une page malveillante
Sélectionnez
<a href="http://www.application-securisee.com/redirect.php?www.attaquant.com/attaque.php">
http://www.application-securisee.com</a>
Dans ce cas l'utilisateur est leurré. Le lien pointe bien vers l'application, mais va le rediriger vers une page malveillante.
3. Parade et bonnes pratiques
La redirection ne doit renvoyer qu'à des pages locales. Dans ce cas les caractères spéciaux doivent être prohibés.
En cas de changement d'adresse ou de déplacement d'une page, il vaut mieux utiliser la redirection paramétrée dans le serveur HTTP. Par exemple avec Apache il est possible de placer un fichier « .htaccess » pour paramétrer les redirections automatiques.
Figure 29 - Exemple de redirection automatique configurée au niveau du serveur HTTP
Sélectionnez
<IfModule mod_alias.c>
#redirection automatique d'une page vers une nouvelle adresse
Redirect permanent /dossier01/script_1.html http://nouvelle.adresse.fr/dossier03/script_1.php
#redirection automatique d'un ensemble de pages
RedirectMatch permanent /dossier01/(.*)\.html$ http://nouvelle.adresse.fr/dossier02/$1.php
#redirection automatique d'un dossier vers une nouvelle adresse
Redirect permanent /dossier01 http://nouvelle.adresse.fr/dossier02
#redirection automatique de toute l'application Web vers une nouvelle adresse
Redirect permanent / http://nouvelle.adresse.fr/
</IfModule>