
POC of CVE-2023-35086 only DoS
25 juillet 2023, Altin (tin-z), github.com/tin-z
Les firmwares des routeurs ASUS RT-AX56U V2 et RT-AC86U, respectivement de version inférieure ou égale à 3.0.0.4.386_50460 et 3.0.0.4_386_51529, présentent une vulnérabilité de chaîne de format dans la fonction detwan.cgi du service httpd, pouvant entraîner une exécution de code lorsqu'un attaquant construit des données malveillantes. La vulnérabilité affecte également d'autres appareils ASUS utilisant le service httpd. Lisez ici pour plus de détails.
références :
La vulnérabilité permet d'obtenir une exécution de code à distance (RCE), mais le PoC ne provoque qu'un déni de service (DoS), principalement parce que le firmware a été émulé avec QEMU et que la pile est différente de celle du périphérique réel. Prérequis :
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

La vulnérabilité est déclenchée en effectuant une requête GET ou POST vers l'URI /detwan.cgi et en fournissant une chaîne de format spéciale comme argument au paramètre HTTP action_mode.
En ouvrant le binaire httpd dans Ghidra, on peut voir la chaîne "do_detwan_cgi" référencée à l'adresse 0x492c4

Le décompilateur décompose la fonction sans tout montrer, mais les points intéressants sont déjà présents :
FUN_0001b70c extrait le paramètre action_modelogmessage_normal est une fonction externe exposée par libshared
Le code source de logmessage_normal se trouve dans le firmware asuswrt-merlin, plus précisément dans le fichier asuswrt-merlin/release/src/router/shared/misc.c, et comme on peut le remarquer, il enregistre le contenu de action_mode dans la variable locale buf, qui est ensuite utilisée dans l'appel syslog

La fonction syslog de la libc prend en charge les chaînes de format, d'où la racine de la vulnérabilité
