#hacking #RCE #ROP_chain #0day #IPcamera #instar #shodan
3. Обход ASLR без утечки
libc с PIE + ASLR = адрес system() неизвестен. Классические методы утечки не работают, поскольку любой ROP chain крашит бинарник, и утечка становится бесполезной после релокации. Тут помогла эксплуатация GOT/PLT. В уязвимой функции вызывается isalnum() из libc, ее адрес уже разрешен и лежит в GOT. Расстояние между isalnum и system — константа 0x13230 байт.
4. ROP-chain магия
— Читаем isalnum@got через gadget ldr r6, [r3, #0x10]
— Добавляем offset 0x13230 через gadget add r6, fp, r6 и получаем адрес system
— Пишем вычисленный адрес обратно в GOT через str r0, [r4, #4] (GOT writable благодаря partial RELRO)
— Готовим аргументы в r0
— Вызываем isalnum@plt, который теперь прыгает на system вместо isalnum
ВУАЛЯ! UnauthRCE одним запросом на 12k камер. One-shot эксплойт без утечек и множественных запросов.
Подробности: https://modzero.com/en/blog/no-leak-no-problem/
Взлом INSTAR IP-камер (unauth RCE) через ARM ROP-chain без утечки адресов
#hacking #RCE #ROP_chain #0day #IPcamera #instar #shodan
Michael Imfeld из modzero нашел и проэксплуатировал 0day в немецких IP-камерах INSTAR IN-8401 2K+ и 4K. По данным Shodan, на текущий момент около 12к устройств INSTAR светятся в интернете. Исследователь построил целую ARM ROP-chain для обхода ASLR без единой утечки адресов с достижением unauthRCE.
1. Доступ к firmware
Root через UART-интерфейс с прерыванием автозагрузки U-Boot и модификацией bootargs — добавление init=/bin/sh — создание root-пользователя — полный дамп файловой системы.
2. Находим баг
В компоненте fcgi_server обнаружена кастомная реализация Base64-декодирования в обработчике basic auth. Декодированные данные копируются через memcpy в фиксированный стековый буфер 516 байт без проверки длины. Прям по классике, stack-based buffer overflow с перезаписью return address.