
Une implémentation Rust de l'exploit CVE-2018-7600 ciblant les installations Drupal 7 vulnérables (<= 7.57)
Une implémentation en Rust de l'exploit CVE-2018-7600 ciblant les installations Drupal 7 vulnérables (<= 7.57). Ce CLI reproduit le flux PoC suivant : il empoisonne un formulaire rendable mis en cache via le chemin user/password, extrait un form_build_id, puis déclenche la charge utile mise en cache via le point de terminaison file/ajax pour exécuter du code à distance via une invocation de fonction PHP.
CVE-2018-7600 est une vulnérabilité d'exécution de code à distance affectant Drupal 7 (et Drupal 8 dans un contexte différent). Dans Drupal 7, le problème provient d'un assainissement insuffisant lorsque certains tableaux rendables sont mis en cache puis rendus ultérieurement. En injectant des métadonnées de rendu spécialement conçues dans un point de terminaison qui est mis en cache, un attaquant peut provoquer l'exécution de fonctions PHP arbitraires lorsque les données mises en cache sont rendues ou demandées ultérieurement.
#post_render est une fonction PHP arbitraire (par exemple passthru).?q=user/password avec les paramètres de tableau rendable conçus afin que Drupal mette en cache le formulaire empoisonné.form_build_id, le PoC déclenche la charge utile en appelant /file/ajax/name/#value/<form_build_id> avec le form_build_id dans le corps de la requête POST. Lorsque Drupal rend l'élément mis en cache, le callback #post_render s'exécute avec un balisage contrôlé par l'attaquant, permettant l'exécution de commandes.Ce CLI Rust construit et exécute la séquence en deux étapes (empoisonnement puis déclenchement) contre un site Drupal 7 cible avec des paramètres de requête, analyse la réponse HTML pour trouver le form_build_id, puis déclenche le point de terminaison file/ajax pour exécuter la fonction spécifiée par l'attaquant.
Comme le client désactive la vérification du certificat (pour refléter le PoC original qui utilisait verify=False), l'outil fonctionnera contre des cibles utilisant des certificats TLS auto-signés ou autrement invalides. Ce comportement peut être modifié dans le code source si vous préférez exiger des certificats valides.
Utilisation de base (commande par défaut whoami, fonction par défaut passthru) :
cargo run -- -u http://target.com/
Exécuter une commande et une fonction personnalisées :
cargo run -- -u http://target.com/ -c "whoami" -f "passthru"
Utiliser un proxy HTTP/S (format : http://127.0.0.1:8080/) :
cargo run -- -u http://target.com/ -p http://127.0.0.1:8080/
Résumé des options du CLI :
-u, target : URL du site Drupal cible (par ex. http://target.com/).-c, --command : Commande à exécuter sur la cible (par défaut : whoami).-f, --function : Fonction PHP à utiliser comme vecteur d'attaque (par défaut : passthru).-p, --proxy : URL du proxy optionnel pour acheminer les requêtes.Exemple de flux complet :
user/password, en insérant le callback #post_render et #markup contenant la commande.form_build_id dans form#user-pass.?q=file/ajax/name/#value/<form_build_id> avec le form_build_id pour déclencher le rendu et exécuter la commande.Cet outil est destiné uniquement à des fins éducatives et de tests d'intrusion autorisés. Utilisez-le de manière responsable et uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite.