
Analyse complète de rétro-ingénierie et exploitation de CVE-2019-17147, un débordement de tampon de pile dans les routeurs TP-Link TL-WR841N. Comprend l'analyse du firmware, le débogage matériel et un exploit d'injection de shellcode par étapes pour RCE non authentifié.

Ce dépôt documente le reverse engineering complet et l'exploitation de CVE-2019-17147, une vulnérabilité critique d'exécution de code à distance (RCE) sur le routeur TP-Link TL-WR841N (architecture MIPSEL). La vulnérabilité réside dans le démon serveur web httpd, où une validation d'entrée inadéquate permet un dépassement de tampon basé sur la pile via une fonction personnalisée cstr_strncpy, conduisant à une exécution de code arbitraire sans authentification.
| Vulnérabilité | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (Élevée) |
| Vecteur | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Type | Dépassement de tampon basé sur la pile |
| Composant | /usr/bin/httpd |
L'environnement d'analyse a été mis en place en utilisant les composants suivants :
flashrom (dump mémoire), binwalk (extraction du firmware), IDA Pro (analyse statique), GDB-Multiarch (débogage à distance), QEMU (émulation MIPSEL).TL-WR841N(US)_V14_180319.La vulnérabilité a été identifiée dans le binaire /usr/bin/httpd. L'analyse statique via IDA Pro a révélé une fonction de copie de chaîne personnalisée, cstr_strncpy, utilisée lors de l'analyse des en-têtes HTTP (en particulier l'en-tête Host).

La fonction cstr_strncpy accepte un paramètre copy_len dérivé de la longueur de la chaîne source plutôt que de la taille du tampon destination. Cela permet un dépassement de tampon classique lorsqu'un en-tête trop long est fourni. De plus, la fonction http_parser_argStrToList, qui manipule une structure de liste chaînée, est affectée par ce dépassement, permettant de contrôler les pointeurs next et prev.
Le débogage à l'exécution avec gdbserver a confirmé le plantage et le contrôle du flux d'exécution. L'analyse de la carte mémoire (vmmap) a révélé un manque critique de durcissement :

Cette configuration permet l'exécution directe du shellcode placé sur le tas, contournant le besoin de chaînes ROP complexes.
La chaîne d'exploitation utilise une primitive Écrire-à-Où dérivée des pointeurs de liste chaînée corrompus pour parvenir à une exécution de code à distance.
strcpy, la charge utile est envoyée en plusieurs requêtes :
atol dans la Table des offets globaux (GOT) est écrasée avec l'adresse du shellcode.atol (via un en-tête Content-Length), redirigeant l'exécution vers le shellcode injecté.
Le script Python final automatise avec succès l'attaque, ouvrant un shell root sur le port 31337.

La vulnérabilité provient de pratiques de codage non sécurisées dans la gestion des tampons.
cstr_strncpy par des alternatives sécurisées qui imposent strictement les limites du tampon de destination (par exemple, strncpy avec une vérification explicite des limites basée sur sizeof(dest)).Pour un guide pas à pas détaillé de l'ensemble du processus, y compris l'analyse du code et la configuration de l'environnement, veuillez consulter les guides complets inclus dans ce dépôt :
Ce projet est uniquement destiné à des fins éducatives et de recherche. Les informations fournies visent à améliorer la sécurité des appareils IoT. Les auteurs ne sont pas responsables de toute mauvaise utilisation des informations ou du code contenus dans ce document.
Basé sur des recherches et analyses originales.