
CVE-2023-35086의 PoC, DoS 전용
2023년 7월 25일, 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 버전 이하)는 httpd 서비스의 detwan.cgi 함수에 format string 취약점이 있어, 공격자가 악의적인 데이터를 구성하면 코드 실행을 유발할 수 있습니다. 이 취약점은 httpd 서비스를 사용하는 다른 ASUS 장치에도 영향을 줍니다. 자세한 내용은 여기에서 확인하세요.
참고 자료:
이 취약점으로 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
# 예상 출력: [+] Target supports detwan.cgi
python poc_crash.py --HOST 127.0.0.1 --PORT 12234 --dos

이 취약점은 /detwan.cgi URI에 GET 또는 POST를 수행하고 action_mode HTTP 매개변수 인자로 특수한 format string을 전달할 때 트리거됩니다.
ghidra에서 httpd 바이너리를 열면 주소 0x492c4가 참조하는 "do_detwan_cgi" 문자열을 볼 수 있습니다.

디컴파일러는 모든 것을 표시하지 않고 함수를 분해하지만, 흥미로운 지점은 이미 드러나 있습니다:
FUN_0001b70c는 action_mode 매개변수를 추출합니다.logmessage_normal은 libshared에서 노출된 외부 함수입니다.
logmessage_normal의 소스 코드는 asuswrt-merlin 펌웨어, 특히 asuswrt-merlin/release/src/router/shared/misc.c 파일에서 찾을 수 있습니다. 보시다시피 action_mode의 내용을 지역 변수 buf에 저장하며, 이 변수는 syslog 호출에 사용됩니다.

libc syslog는 format string을 지원하므로 여기가 취약점의 근원입니다.
