Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
wpgarlic — Un fuzzer de plugin WordPress de preuve de concept | Kitploit
Outils/GitHubGitHub/kazet/wpgarlic
Analyse des VulnérabilitésSécurité WebFuzzing
GitHubkazet/wpgarlic

wpgarlic

Un fuzzer de plugin WordPress de preuve de concept

Voir le dépôt
20023il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

wpgarlic

Un fuzzer de plugins WordPress preuve de concept qui a conduit à la découverte de plus de 300 vulnérabilités dans des plugins WordPress installés sur près de 30 millions de sites.

La technique utilisée est décrite dans https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html

Si vous souhaitez poursuivre la recherche, commencez par les plugins moins populaires – si un plugin a atteint au moins 10 000 installations actives entre octobre 2021 et janvier 2024, j'ai très probablement examiné les rapports du fuzzer (et la plupart des efforts ont été concentrés sur les plugins ayant au moins 20 000 installations actives). Comme le fuzzer fonctionne avec beaucoup d'aléatoire, certaines vulnérabilités dans ces plugins restent non découvertes – mais moins nombreuses.

Les rapports du fuzzer contiennent beaucoup de faux positifs – la plupart n'indiquent pas une vulnérabilité. Après avoir vu un rapport, analysez d'abord si le comportement que vous observez est effectivement une vulnérabilité ou un faux positif. Ne spammez pas WPScan/les fournisseurs avec des rapports bruts du fuzzer – fournissez plutôt une preuve de concept (PoC) à la place.

Exemples

Pour des raisons évidentes, les exemples ne contiendront que des vulnérabilités déjà corrigées.

Lecture de fichier arbitraire

Supposons que vous fuzziez responsive-vector-maps dans la version 6.4.0 :

root@kitploit:~
./bin/fuzz_object plugin responsive-vector-maps --version 6.4.0

(pour fuzzer la dernière version, omettez simplement –version).

Une fois le fuzzing terminé (ce qui prendrait 10 à 30 minutes pour ce plugin), vous pouvez appeler :

root@kitploit:~
./bin/print_findings data/object_fuzz_results/

Vous verrez, entre autres :

responsive-vector-maps fuzzer output example.

Cela signifie que le fuzzer a détecté l'exécution de fopen() sur une charge utile connue. La plupart des charges utiles contiennent le mot GARLIC pour faciliter la détection automatique dans la sortie. Vous pouvez les voir ou les configurer dans docker_image/magic_payloads.php.

Ensuite, vous pouvez parcourir le code source et constater que le point de terminaison wp_ajax_rvm_import_markers utilise le contenu du fichier pour générer la sortie, vous permettant ainsi de lire des fichiers arbitraires sur le serveur : CVE-2021-24947.

Ce que vous voyez en blanc est un crash considéré comme intéressant (vous pouvez les modifier ou en ajouter de nouveaux dans crash_detectors.py). Le vert est le contexte. En bleu, vous voyez le nom du fichier de rapport (avec le nom du plugin), la popularité du plugin et le nom du point de terminaison (ici : le nom de l'action ajax). Les données en jaune indiquent quelles charges utiles ont été injectées dans quelles variables.

XSS réfléchi

Supposons que vous fuzziez page-builder-add dans la version 1.4.9.4 :

root@kitploit:~
./bin/fuzz_object plugin page-builder-add --version 1.4.9.4

Après avoir affiché les résultats, vous verrez une charge utile connue renvoyée :

page-builder-add fuzzer output example.

Vous pouvez alors tester manuellement si cet endroit (rappelez-vous : en bleu vous avez le nom du point de terminaison, ici : le nom de la page de menu) est vulnérable aux XSS. Dans ce cas, il l'est : CVE-2021-25067.

Mise à jour d'option menant à un XSS stocké

root@kitploit:~
./bin/fuzz_object plugin duplicate-page-or-post --version 1.4.6

Après avoir affiché les résultats, vous verrez update_option être appelé :

duplicate-page-or-post fuzzer output example.

L'analyse du code du point de terminaison vous indiquera que cela conduit effectivement à une vulnérabilité XSS stockée : CVE-2021-25075.

Faux positifs

Malheureusement, pour la plupart des plugins, le fuzzer ne trouve aucun crash intéressant, et pour le reste, la plupart des rapports sont des faux positifs. Par exemple, si vous voyez :

root@kitploit:~
Call: wp_mail arguments={'to': '[email protected]', 'subject': '[Plugin contact]  - http://GARLICGARLICGARLIC.example.com'}

Cela peut signifier que wp_mail est effectivement appelé, mais vous ne contrôlez pas le destinataire ni la majeure partie du sujet. Si vous voulez en être sûr, regardez le code source du plugin.

Conseils supplémentaires pour la lecture des rapports du fuzzer

  • Si vous voyez le message : Peut être égal : ... et ... – cela signifie que le mécanisme pour faire semblant qu'une charge utile connue est égale à n'importe quelle autre chaîne (décrit dans https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html#patched-equality) a été déclenché.
  • Si vous voyez __GARLIC_ACCESSED__ _FILES[files] __ENDGARLIC__ – cela signifie qu'un accès à un fichier téléchargé a été détecté. Aucune vérification supplémentaire n'est effectuée pour l'instant – pour vérifier s'il s'agit d'une vulnérabilité, regardez le code.
  • Parfois, ce que le fuzzer injecte dans les paramètres GET, POST, etc. n'est pas reproductible dans le monde réel : par exemple, vous ne pouvez rien injecter dans $_GET['page'] si vous voulez qu'une page de menu particulière soit affichée.

Aide-mémoire d'utilisation

La première exécution du fuzzing ou des tests peut prendre environ une heure, car nous devons construire l'image Docker avec PHP et WordPress instrumentés.

Fuzzer un plugin par son nom

root@kitploit:~
./bin/fuzz_object plugin PLUGIN_SLUG

Fuzzer un thème par son nom

root@kitploit:~
./bin/fuzz_object theme THEME_SLUG

Fuzzer un plugin à partir d'un fichier

Vous pouvez également installer un plugin à partir d'un fichier zip local :

root@kitploit:~
./bin/fuzz_object plugin PLUGIN_FILE_NAME.zip

Affichage des résultats

Pour afficher ce que le fuzzer a trouvé, utilisez :

root@kitploit:~
./bin/print_findings data/object_fuzz_results/

Exécution des tests

Pour exécuter les tests, utilisez :

root@kitploit:~
./bin/test

Attention : les tests sont longs (plus d'une heure) et comme ils vérifient si le fuzzer trouverait des vulnérabilités, ils échouent avec une certaine probabilité.

Reformater le code et exécuter les linters

wpgarlic utilise pre-commit pour exécuter les linters et formater le code. pre-commit est exécuté en CI pour vérifier que le code est correctement formaté.

Pour l'exécuter localement, utilisez :

root@kitploit:~
pre-commit run --all-files

Pour configurer pre-commit afin qu'il s'exécute avant chaque commit, utilisez :

root@kitploit:~
pre-commit install

Environnement de test manuel

Vous pouvez démarrer un environnement de test avec un seul plugin installé en utilisant :

root@kitploit:~
./bin/manual_testing PLUGIN_SLUG|PLUGIN_PATH.zip [version]

Vous pouvez installer un plugin via son slug ou à partir d'un fichier zip local.

Il écoutera sur http://127.0.0.1:8001/

Il y aura deux utilisateurs de test dans la base de données :

  • nom d'utilisateur : admin, mot de passe : admin, privilèges : administrateur
  • nom d'utilisateur : subscriber, mot de passe : subscriber, privilèges : abonné

Étendre et configurer le fuzzer

Cet outil est une preuve de concept – cette section contient des endroits où il peut être amélioré pour trouver plus de vulnérabilités.

Vous pouvez modifier filtering.py – il contient les règles qui jugent un crash particulier comme important ou non. Si vous les modifiez, vous pouvez avoir plus de faux positifs, mais aussi trouver plus de vulnérabilités. Par exemple, le seul en-tête que je considère comme intéressant lorsqu'il est émis est l'en-tête Location, pour détecter les vulnérabilités de redirection ouverte. Ce n'est qu'une idée et vous pouvez en avoir d'autres.

Un autre fichier qui peut être intéressant à étendre est docker_image/patch_wordpress.sh. Il décrit les appels aux fonctions qui seront journalisées comme intéressantes.

Si vous souhaitez injecter d'autres charges utiles (ou modifier les probabilités avec lesquelles elles sont injectées), modifiez docker_image/magic_payloads.php et docker_image/fuzz/config.py.

crash_detector.py contient des expressions régulières qui trouvent des crashes intéressants ou des informations intéressantes (par exemple, les e-mails) exposées.

Le fuzzing des routes REST en tant qu'administrateur connecté a été désactivé car il provoquait des faux positifs. Décommentez rest_routes_admin dans config.DEFAULT_ENABLED_FEATURES pour modifier cela.

Fonctionnement interne du fuzzer

Listes de blocage

Certains plugins nécessitent d'autres (par exemple woocommerce) comme dépendance. Lors du fuzzing d'un plugin qui a une dépendance, nous voulons fuzzer uniquement le plugin choisi et ignorer les actions AJAX, routes REST et pages de menu de la dépendance. Nous voulons fuzzer les actions/routes/pages de woocommerce uniquement lorsque nous avons choisi woocommerce à fuzzer.

La liste des actions/routes/pages de dépendance est appelée listes de blocage et est répertoriée dans docker_image/blocklists/. Les fichiers nommés common contiennent les actions/routes/pages du noyau WordPress – nous ne voulons pas non plus fuzzer ceux-ci.

Pour mettre à jour ces listes de blocage, utilisez ./bin/update_blocklists.

FAQ

Le fuzzer a trouvé quelque chose, est-ce une vulnérabilité ?

Peut-être. Installez le plugin dans un environnement de test local (par exemple, vous pouvez utiliser celui décrit dans la section Environnement de test manuel) et analysez le bogue.

Le fuzzer n'a rien trouvé, le plugin est-il sécurisé ?

Ne présumez pas cela. Le fuzzer trouve certaines classes de vulnérabilités, mais a ses limites.

Le fuzzer ne trouve rien pour la plupart des plugins – le but de l'outil est plutôt de scanner massivement un grand nombre de plugins WordPress, pas d'effectuer des tests complets d'un seul plugin.

Le fuzzer a trouvé quelque chose lors d'une exécution, mais pas lors de la suivante. Que s'est-il passé ?

C'est possible. Le fuzzer choisit les charges utiles aléatoirement et introduit de l'aléatoire à d'autres endroits (par exemple, comment l'opérateur == doit se comporter dans les cas décrits dans https://kazet.cc/2022/02/03/fuzzing-wordpress-plugins.html#patched-equality).

Ça ne marche pas ? Vous avez une question ?

Ouvrez un ticket Github ou envoyez-moi un e-mail : [email protected].

Télécharger l’outil