Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
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-Lab — Lab Docker local pour reproduire CVE-2026-3844, un téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance (RCE) dans le plugin WordPress Breeze Cache. Compare la version vulnérable 2.4.4 avec la version corrigée 2.4.5 à l'aide de services isolés et d'un PoC à impact minimal. | Kitploit
Outils/GitHubGitHub/rootdirective-sec/cve-2026-3844-lab
Analyse des VulnérabilitésExploitationExploitation d'Applications WebCTFApprentissage et ÉducationLabs et Pratique
GitHubrootdirective-sec/cve-2026-3844-lab

CVE-2026-3844-Lab

Voir le dépôt
117il 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 →

À propos

Lab Docker local pour reproduire CVE-2026-3844, un téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance (RCE) dans le plugin WordPress Breeze Cache. Compare la version vulnérable 2.4.4 avec la version corrigée 2.4.5 à l'aide de services isolés et d'un PoC à impact minimal.

Partager

CVE-2026-3844 — Laboratoire de téléversement arbitraire de fichier non authentifié vers RCE pour Breeze Cache

Laboratoire Docker local uniquement pour reproduire et comparer le comportement de CVE-2026-3844 dans le plugin WordPress Breeze Cache.

Ce dépôt démontre le comportement vulnérable de Breeze Cache 2.4.4 et le compare au comportement corrigé de Breeze Cache 2.4.5. Le laboratoire utilise deux services WordPress isolés, l’un vulnérable et l’autre corrigé, ainsi qu’un serveur de charge utile local dans le réseau Docker.

La preuve de concept est volontairement à moindre impact : elle n’utilise pas de webshell, n’expose pas de paramètre de commande, ne lance pas de shell inverse et ne nécessite pas la lecture de fichiers à l’intérieur du conteneur. La preuve repose sur un comportement HTTP observable depuis l’hôte.


Résumé exécutif

CVE-2026-3844 affecte le plugin Breeze Cache pour WordPress jusqu’à la version 2.4.4 incluse. Le chemin de code vulnérable est lié à la fonctionnalité de mise en cache locale des Gravatar du plugin, plus précisément au flux fetch_gravatar_from_remote().

Lorsque l’option Breeze Host Files Locally - Gravatars est activée, les versions vulnérables peuvent récupérer un fichier distant contrôlé par l’attaquant et le stocker dans un répertoire de cache public accessible via le Web. Si le fichier récupéré est du PHP, le serveur web peut l’exécuter lorsqu’il est demandé via HTTP.

Ce laboratoire reproduit ce comportement localement :

  • vuln service : WordPress + Breeze Cache 2.4.4
  • patched service : WordPress + Breeze Cache 2.4.5
  • payload service : serveur de charge utile local réservé au réseau Docker
  • PoC : déclencheur non authentifié basé sur un commentaire utilisant une chaîne srcset contrôlée

Le résultat attendu est :

  • http://127.0.0.1:8081 / Breeze 2.4.4 → la preuve PHP est mise en cache et exécutée
  • http://127.0.0.1:8082 / Breeze 2.4.5 → la preuve PHP n’est pas mise en cache / lisible / exécutable

Structure du dépôt

.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── scripts/
│   └── seed-wordpress.sh
├── payload/
│   └── manual-proof.php
│   └── proof-cve3844.php
├── poc/
│   └── poc.py
│   └── requirements.txt
├── .gitignore
├── README.md

Architecture du laboratoire

Host machine
│
├── http://127.0.0.1:8081  -> vuln WordPress + Breeze 2.4.4
├── http://127.0.0.1:8082  -> patched WordPress + Breeze 2.4.5
└── http://127.0.0.1:9100  -> local payload server

Docker network
│
├── vuln       -> WordPress vulnerable target
├── patched    -> WordPress patched target
├── vuln_db    -> MariaDB for vulnerable WordPress
├── patched_db -> MariaDB for patched WordPress
└── payload    -> Python static HTTP server

Les conteneurs WordPress récupèrent la charge utile via l’URL du réseau Docker :

http://payload:9100/<payload-file>.php

L’hôte vérifie le résultat via des requêtes HTTP normales vers les services WordPress.


Composant affecté

  • Produit : plugin Breeze Cache pour WordPress
  • Version vulnérable dans ce laboratoire : 2.4.4
  • Version corrigée dans ce laboratoire : 2.4.5
  • Fonction vulnérable : fetch_gravatar_from_remote()
  • Fichier concerné : inc/class-breeze-cache-cronjobs.php
  • Précondition requise : breeze-store-gravatars-locally doit être activée

Le comportement vulnérable n’est accessible que lorsque la mise en cache locale des Gravatar est activée. Cette option est désactivée par défaut dans les installations typiques, mais ce laboratoire l’active intentionnellement pour reproduire le chemin de code vulnérable.


Résumé de la cause racine

Dans Breeze Cache 2.4.4, le flux de localisation des Gravatar peut extraire une URL distante du HTML lié aux avatars et transmettre cette URL à fetch_gravatar_from_remote().

La version vulnérable manque de validation suffisante autour du fichier distant :

  • aucune validation stricte de l’hôte de confiance pour les sources Gravatar
  • aucune liste blanche fiable d’extensions de fichiers avant l’enregistrement
  • aucune validation MIME/contenu avant le placement du fichier dans un répertoire de cache public
  • le fichier récupéré peut conserver une extension dangereuse telle que .php

Le fichier résultant est stocké sous :

/wp-content/cache/breeze-extra/gravatars/

Lorsqu’un fichier PHP y est enregistré puis demandé via Apache/PHP, le serveur l’exécute.

Dans Breeze Cache 2.4.5, le flux corrigé ajoute une validation qui empêche la charge utile de ce laboratoire d’être mise en cache en tant que PHP exécutable. Dans la reproduction locale, le même déclencheur fonctionne contre 2.4.4 mais n’expose pas le marqueur de preuve contre 2.4.5.


Pourquoi ce laboratoire utilise un plugin d’assistance MU

Ce laboratoire conserve volontairement le serveur de charge utile en local plutôt que d’utiliser un hôte de charge utile public.

download_url() de WordPress et l’API HTTP de WordPress rejettent par défaut certains noms d’hôte Docker privés et ports non standard. Les scripts d’exploitation publics utilisent souvent des URLs de charge utile HTTPS publiques, ce qui évite cette restriction. Ce laboratoire ne fait pas cela.

Pour garder la reproduction entièrement locale, le script d’initialisation installe un petit plugin d’assistance MU local uniquement qui :

  • n’autorise que les noms d’hôte de charge utile Docker locaux payload et payload.local
  • n’autorise que les ports du laboratoire 80 et 9100
  • approuve automatiquement les commentaires du laboratoire
  • désactive les contrôles anti-inondation de commentaires pour des tests locaux déterministes

Ce plugin d’assistance ne modifie pas le code source de Breeze. Les services vulnérable et corrigé utilisent tous deux de vraies versions du plugin Breeze installées via WP-CLI.

Le plugin d’assistance n’existe que pour rendre le laboratoire Docker déterministe et strictement local.


Modèle de sécurité

Ce dépôt est destiné uniquement à la recherche en sécurité locale autorisée et à la démonstration dans un portfolio.

Garde-fous :

  • fonctionne uniquement sur localhost et les services du réseau Docker
  • aucun serveur de callback externe
  • aucune cible d’exploitation publique
  • aucun shell inverse
  • aucun shell interactif
  • aucun comportement de webshell de type cmd=
  • aucun secret ni identifiant réel
  • aucune lecture de fichiers du conteneur pour la preuve
  • la preuve est observée via le comportement des réponses HTTP

La charge utile du PoC affiche des informations bénignes d’exécution PHP :

CVE-2026-3844_LEAST_HARM_PHP_EXEC_PROOF_<nonce>
php_sapi=apache2handler
user=www-data
uid=33
pid=<process id>
host=<container hostname>

Cela prouve le contexte d’exécution de code sans lancer de commandes shell.


Prérequis

  • Docker Desktop ou Docker Engine
  • Docker Compose v2
  • Python 3.9+
  • Paquet Python : requests

Installer la dépendance Python :

python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt

requirements.txt doit contenir :

requests

Démarrage rapide

Construire et démarrer le laboratoire :

docker compose down -v --remove-orphans
docker compose up -d --build

Vérifier l’état des services :

docker compose ps

Services attendus :

vuln        healthy    http://127.0.0.1:8081
patched     healthy    http://127.0.0.1:8082
payload     running    http://127.0.0.1:9100
vuln_db     healthy
patched_db  healthy

Vérifier les journaux d’initialisation :

docker compose logs --tail=120 vuln
docker compose logs --tail=120 patched

Lignes de journal attendues :

[seed] WordPress ready at http://localhost:8081 with Breeze 2.4.4
[seed] WordPress ready at http://localhost:8082 with Breeze 2.4.5

Vérifier la préparation du laboratoire

Vérifier l’installation de WordPress :

Télécharger l’outil