
Эксплойт proof-of-concept для инъекции команд ОС (CVE-2023-33381) в маршрутизаторах MitraStar GPT-2741GNAC. Демонстрирует обход ограниченной оболочки через функцию диагностики ping/traceroute, с анализом уязвимых CGI-бинарных файлов методом реверс-инжиниринга.
После входа через SSH я сразу заметил ограниченный набор доступных команд и опций. Стало очевидно, что я действительно нахожусь в ограниченной оболочке.

Изучив несколько известных уязвимостей, я решил углубиться в поиск новых. Для начала я вошел в административный портал и начал тестировать различные функции, которые потенциально могли привести к внедрению команд ОС. В меню «Диагностика» я наткнулся на функцию, позволяющую проверить связь с помощью команд ping и traceroute.


Итак, я решил попробовать что-нибудь хитрое, добавив символ «;» к своей команде. Я выполнил «cat /etc/passwd» и угадайте что? Команда успешно выполнилась.

Я пошел дальше и выполнил команду «sed», чтобы заменить запись ограниченной оболочки в файле «/etc/passwd» на полноценную интерактивную оболочку.

Как хорошо показано на изображении ниже, внесенные мной изменения позволили мне войти и свободно выполнять команды, такие как «uname» и «cat».

Поскольку у меня были полные права администратора, я не удержался и углубился, чтобы выявить уязвимый компонент. Изучая запросы браузера, я заметил кое-что интересное. Запросы были направлены на два CGI-файла: «ping.cgi» и «DiagGeneral.cgi».

После получения файлов я развлекся реверс-инжинирингом с помощью Ghidra. Вот что интересно: в файле «ping.cgi» я заметил, что параметр PingIPAddr напрямую берется из пользовательского ввода без какой-либо правильной санитизации. Параметр PingIPAddr, извлеченный из пользовательского ввода, сохранялся для дальнейшего использования с помощью функции tcapi_set.

Наконец, в файле DiagGeneral.cgi параметр PingIPAddr извлекался с помощью функции tcapi_get и затем напрямую использовался в функции system без какой-либо санитизации. Этот недостаток создает уязвимость внедрения команд, позволяющую несанкционированно выполнять произвольные команды в системе.
