
POC для CVE-2023-35086, только DoS
25 июля 2023, Altin (tin-z), github.com/tin-z
Прошивки роутеров ASUS RT-AX56U V2 и RT-AC86U версий ниже или равных 3.0.0.4.386_50460 и 3.0.0.4_386_51529 соответственно содержат уязвимость форматной строки в функции detwan.cgi службы httpd, которая может привести к выполнению кода при создании злоумышленником вредоносных данных. Уязвимость также затрагивает другие устройства ASUS, использующие службу httpd. Подробнее читайте здесь: подробности.
Ссылки:
Уязвимость позволяет добиться RCE, однако PoC достигает только DoS, главным образом потому, что прошивка эмулировалась с помощью QEMU, и поэтому стек отличается от реального устройства. Предварительные требования:
virtualenv --python=python3 .venv
source .venv/bin/activate
pip install hexdump
python poc_crash.py --HOST 127.0.0.1 --PORT 12234 --test
# output expected: [+] Target supports detwan.cgi
python poc_crash.py --HOST 127.0.0.1 --PORT 12234 --dos

Уязвимость срабатывает при выполнении GET или POST-запроса к URI /detwan.cgi и передаче специальной форматной строки в качестве аргумента HTTP-параметра action_mode.
Открыв бинарный файл httpd в Ghidra, можно увидеть строку "do_detwan_cgi", на которую ссылается адрес 0x492c4

Декомпилятор разбирает функцию, не показывая всего, но интересные моменты уже видны:
FUN_0001b70c извлекает параметр action_modelogmessage_normal — внешняя функция, предоставляемая libshared
Исходный код logmessage_normal можно найти в прошивке asuswrt-merlin, а именно в файле asuswrt-merlin/release/src/router/shared/misc.c, и, как можно заметить, она сохраняет содержимое action_mode в локальную переменную buf, которая, в свою очередь, используется в вызове syslog

Функция syslog из libc поддерживает форматные строки, так что здесь и кроется корень уязвимости
