
Exploit d'exécution de code à distance sans authentification pour le routeur TP-Link Omada ER605 via le démon client DDNS (cmxddnsd)
Chaîne d'exploitation de Preuve de concept (PoC) ciblant le démon client DDNS cmxddnsd du TP-Link Omada ER605 lorsque l'appareil est configuré pour utiliser le service DDNS Comexe.
⚠️ Légal / Éthique : Ce dépôt est destiné à la recherche en sécurité autorisée et la reproduction en laboratoire contrôlé uniquement. Ne pas utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.
Ce PoC démontre une approche de chaînage qui combine :
La chaîne correspond aux problèmes publiés suivants :
| CVE | Avis ZDI | Type (tel que décrit par ZDI/NVD) | Rôle de haut niveau dans une chaîne |
|---|
| CVE-2024-5244 | ZDI-24-503 | Confiance en la sécurité par l'obscurité (les messages DDNS peuvent être accédés/usurpés) | Permet de créer/usurper des messages DDNS valides en apparence |
| CVE-2024-5243 | ZDI-24-502 | Dépassement de tampon dans la gestion des noms DNS | Utilisé pour influencer/empoisonner l'état lié au nom DNS et permettre une voie de fuite pour contourner l'ASLR |
| CVE-2024-5242 | ZDI-24-501 | Dépassement de tampon basé sur la pile dans la gestion des codes d'erreur DDNS | Utilisé comme primitive de détournement de flux de contrôle pour une RCE basée sur ROP |
Note : Ce README aligne la correspondance CVE ↔ description du problème sur le libellé ZDI/NVD. La chorégraphie exacte de l'exploit peut varier selon la version du firmware et les détails de reproduction locale ; voir
exploit.pyet les notes d'analyse dans ce dépôt.
< ER605(UN)_V2_2.2.42.2.2ER605(UN)_V2_2.2.4 Build 20240119 (et ultérieur)ZDI décrit l'impact comme adjacent au réseau lorsque le DDNS Comexe est activé/configuré. En pratique, une reproduction nécessite généralement la capacité d'observer et d'influencer suffisamment le chemin du trafic DDNS/DNS du routeur pour :
Ce dépôt évite intentionnellement de fournir des conseils opérationnels étape par étape pour atteindre ce positionnement en dehors d'un laboratoire contrôlé.
┌─────────────────┐ ┌─────────────────────────┐
│ TP-Link ER605 │ │ Attacker │
│ (cmxddnsd) │ │ (authorized lab setup) │
└───────┬─────────┘ └───────────┬─────────────┘
│ │
│ (1) DDNS message spoofing/impersonation │ CVE-2024-5244
│<-----------------------------------------│
│ │
│ (2) Parsing-time overflow affects DNS- │ CVE-2024-5243
│ name-related state; later leak occurs│
│ in DNS query sending path (e.g., │
│ sndDnsQuery) to bypass ASLR │
│<-----------------------------------------│
│ │
│ (3) Error-code overflow for control-flow │ CVE-2024-5242
│ hijack → ROP → system(command) │
│<-----------------------------------------│
Séparation clé :
_chkPkt pour les codes d'erreur / la gestion des noms DNS).exploit.py — Implémentation du PoC utilisée pour la reproduction en laboratoire (nécessite de renseigner les constantes/offsets spécifiques à la version).README.md — Ce document.Ce PoC nécessite des valeurs spécifiques à la version (par exemple, offsets, emplacements de gadgets, interprétation de fuite) qui dépendent du firmware cible et de la libc. Ces valeurs sont intentionnellement laissées comme placeholders et doivent être dérivées via l'analyse de la version testée.
Exemples de placeholders (voir exploit.py) :
system()Un anti-modèle récurrent dans la logique d'analyse est la copie de données de champ contrôlées par l'attaquant en utilisant une longueur dérivée du délimiteur sans la limiter correctement à la taille du tampon de destination (conceptuellement) :
char *end = strchr(ptr, '\x01'); // delimiter
int len = end - ptr; // attacker-influenced length
memcpy_or_strncpy(dest, ptr, len); // missing bounds check -> overflow
Le PoC utilise une forme de gadget compatible avec le slot de délai MIPS :
move $t9, $s0
jalr $t9
move $a0, $s1 ; delay slot
En contrôlant $s0 et $s1 via une réécriture des registres sauvegardés, cela permet une séquence d'appel system(command) compacte.
La construction pratique de la charge utile est contrainte par :
\x01), etVoir exploit.py pour les contraintes exactes utilisées dans cette reproduction.
Ce code et cette documentation sont fournis à des fins éducatives et de recherche en sécurité autorisée uniquement. Toute utilisation sans autorisation explicite est interdite et peut être illégale.