
Эксплойт удалённого выполнения кода без аутентификации для маршрутизатора TP-Link Omada ER605 через клиентский демон DDNS (cmxddnsd)
Цепочка эксплойтов Proof-of-Concept (PoC), нацеленная на демон DDNS-клиента TP-Link Omada ER605 (cmxddnsd), когда устройство настроено на использование DDNS-сервиса Comexe.
⚠️ Юридические / этические аспекты: Этот репозиторий предназначен только для авторизованных исследований безопасности и контролируемого воспроизведения в лабораторных условиях. Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
Этот PoC демонстрирует подход к объединению в цепочку, который сочетает:
Цепочка соответствует следующим опубликованным проблемам:
| CVE | Консультация ZDI | Тип (по описанию ZDI/NVD) | Роль в цепочке (на высоком уровне) |
|---|
| CVE-2024-5244 | ZDI-24-503 | Полагается на безопасность через неясность (сообщения DDNS могут быть доступны/подделаны) | Позволяет создавать/подделывать правдоподобно выглядящие сообщения DDNS |
| CVE-2024-5243 | ZDI-24-502 | Переполнение буфера при обработке DNS-имён | Используется для влияния/отравления состояния, связанного с DNS-именами, и обеспечения пути утечки для обхода ASLR |
| CVE-2024-5242 | ZDI-24-501 | Переполнение буфера на основе стека при обработке кодов ошибок DDNS | Используется как примитив перехвата потока управления для RCE на основе ROP |
Примечание. Этот README согласует описание CVE ↔ проблемы с формулировками ZDI/NVD. Точная хореография эксплойта может различаться в зависимости от версии прошивки и деталей локального воспроизведения; см.
exploit.pyи заметки по анализу в этом репозитории.
< ER605(UN)_V2_2.2.42.2.2ER605(UN)_V2_2.2.4 Build 20240119 (и более поздних)ZDI описывает воздействие как атаку из смежной сети (network-adjacent), когда Comexe DDNS включён/настроен. На практике для воспроизведения обычно требуется возможность наблюдать и влиять на путь DDNS/DNS-трафика маршрутизатора в достаточной степени, чтобы:
Этот репозиторий намеренно избегает пошаговых операционных инструкций по достижению такого позиционирования вне контролируемой лаборатории.
┌─────────────────┐ ┌─────────────────────────┐
│ 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) │
│<-----------------------------------------│
Ключевое разделение:
_chkPkt, для кодов ошибок / обработки DNS-имён).exploit.py — реализация PoC, используемая для лабораторного воспроизведения (требует подстановки констант/смещений, специфичных для сборки).README.md — этот документ.Этот PoC требует значений, зависящих от конкретной сборки (например, смещений, расположения гаджетов, интерпретации утечки), которые зависят от целевой прошивки и libc. Эти значения намеренно оставлены в качестве заполнителей и должны быть получены путём анализа протестированной сборки.
Примеры заполнителей (см. exploit.py):
system()Повторяющийся анти-паттерн в логике разбора заключается в копировании управляемых атакующим данных поля с использованием длины, полученной из разделителя, без надлежащего ограничения размером буфера назначения (концептуально):
char *end = strchr(ptr, '\x01'); // delimiter
int len = end - ptr; // attacker-influenced length
memcpy_or_strncpy(dest, ptr, len); // missing bounds check -> overflow
PoC использует форму гаджета, дружественную к слоту задержки MIPS:
move $t9, $s0
jalr $t9
move $a0, $s1 ; delay slot
Управляя $s0 и $s1 через перезапись сохранённых регистров, это позволяет создать компактную последовательность вызова system(command).
Практическое создание полезной нагрузки ограничено:
\x01), иТочные ограничения, использованные в этом воспроизведении, см. в exploit.py.
Этот код и документация предоставлены исключительно в образовательных целях и для авторизованных исследований безопасности. Любое использование без явного разрешения запрещено и может быть незаконным.