
2026/10/13 21:30
ISO のダウンロードを試していたら、カーネルエクスプロイトを書いてしまった
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
TP-Link は、開封前に EAP770 v1 ワイヤレスアクセスポイント(Qualcomm IPQ9574)のサポートを公式に終了しました。主な原因は、Wi-Fi 7 デバイスでありながら前標準規格対応での Wi-Fi Alliance 認証の欠如と、Qualcomm ハードウェアに含まれる修正不可能な重大なバグです。核心的な問題は、
qca-nss-dp ドライバ内の DMA キャッシュ整合性バグであり、パケットバッファが適切な CPU キャッシュ同期なしに再利用されることで深刻な Wi-Fi データ破損を引き起こしています(例:大規模ダウンロードが MAC エラーや不良の記録 MAC を伴って失敗する)。l2_feature および ppe_rfs_feature などの特定機能を無効化することで、破損したペイロードに対するチェックサムのオフロード再計算を防ぎこの問題を解消できますが、TP-Link はこれらの設定へのアクセスを SSH シェル(uid 1)から制限し、root 権限は拒否しています。CVE-2022-0185 インタージアンダーフローおよび pipe バッファ操作を利用したカーネルエクスプロイトが開発され、これにより任意のメモリライトを通じてスラブデフラグメンテーションによるアドレス漏洩と pipe_buf_can_merge() の悪用を実現し、/sys/sfe/... に直接修正を記述することでこれらの制限を回避します。新しいファームウェアへの書き込みは有効な選択肢ではありません。v1 イメージが利用不可であり、v2 は異なるハードウェアを使用しており暗号化されたファームウェアを搭載していること、および新バージョンではこのレガシーユニットのサポートが存在しないためです。その結果、影響を受けたユーザーは永久にパフォーマンス制限を受け入れる(オフロードが無効化された場合、LAN から Wi-Fi へのダウンロード速度が約 8% 低下)か、複雑なカスタムワークアラウンドを実装する(外部 NixOS スクリプトを使用し、アクセスポイントをポーリングして設定がリセットされる再ブート後にカーネルエクスプロイトを再トリガーするなど)必要があります。この状況は、他の Qualcomm カード搭載デバイスで見られる類似の欠陥と酷似しており、所有者には信頼性の高い公式解決策がありません。特に注記すべきは、本デバイスの問題とは無関係な別のバグで、ath12k キューの蓄積およびファームウェアフレーム除去(CMD_REMOVE_AGED_FRAMES)により、Qualcomm WCN785x カードを搭載した Framework 16 ノートパソコンで Wi-Fi ダロップが発生するという問題です。OpenWrt では DMA キャッシュ整合性バグは発生しませんが、TP-Link はサポート終了済みの EAP770 v1 向けに新しいファームウェアを配布することは予定されていません。本文
TP-Link EAP770 v1 の Wi-Fi 転送破損不具合と解決策
TL;DR
- 不具合: TP-Link EAP770 v1 が、Wi-Fi 経由でのファイル転送(
,rsync
,git clone
など)でデータを破損させる重大なバグを持つ。wget - 現状: 購入時のファームウェアのみ対応でサポート終了(End-of-Life)。TP-Link は修正パッチを提供しない。
- 根本原因: Qualcomm IPQ9574 チップの DMA キャッシュ一貫性欠如と、高速転送パス(SFE/PPE)におけるチェックサムの再計算ロジックの欠陥。
- 解決策: 設定ファイル
を書き込み、オフロード機能を無効化することで回避可能(ただし、TP-Link シェルでは実行不可)。/sysfs - 最終手段: TP-Link のセキュリティ制限を突破し、専用**KERNEL_EXPLOIT_(カーネル攻撃コード)**を開発して設定を強制適用する。
1. 問題の発覚と初期調査
経緯
- 2023 年 8 月、Wi-Fi 7 アクションポイントとして TP-Link EAP770 v1 を購入。
- 有線接続時の動作は安定していたが、Wi-Fi 経由での大規模ファイル転送に失敗する。
現象の拡大
- rsync/SSH の失敗:
- 数 GB 以上のファイルを転送すると失敗。
- SSH エラー:
(メッセージ認証コードエラー)。MAC error - デバッグ結果:
や SSH の設定変更は無効。TCP は正常に転送されているはずだが、データ整合性が保たれない。rsync
- 暫定的な回避策:
- ネットワーク層を Tailscale(WireGuard)経由に変更すると失敗しなくなった。
- 原因:UDP ストリームではなく TCP の再送機構が、破損したパケットをフィルタリングする役割を果たしていたため。
ファームウェアの現状
- 機種情報: Qualcomm IPQ9574 チップ搭載、Linux コア 5.4.164。
- バージョン: 出荷時ファームウェア
。これ以降のアップデートなし(サポート終了)。v1.0.0 Build 20230605 - 状況: Wi-Fi 7 の規格化や認証が完了する前に購入しており、現在の仕様で運用を続けるしかない。
2. 破損の追跡と原因特定
調査プロセス
- HTTP/2 vs HTTP/1.1: NixOS のバイナリキャッシュ取得において、HTTP/2 で失敗するが HTTP/1.1 では成功。
- SSL エラー:
を使用した ISO ダウンロードで TLS レコード層エラーが発生(wget
)。decryption failed or bad record mac - Wi-Fi 断線の原因: アクセスポイント側ではなく、ラップトップの Wi-Fi ドライバー側のバグではないことが確認された。
根本原因の特定:DMA キャッシュとチェックサム再計算
生 TCP パケットキャプチャから以下の事実が判明した。
- 現象: 有効な TCP チェックサムを持つパケットが、内容が破損している状態で届く。
- メカニズム:
- アクセスポイント(AP)内部で、送信バッファを再利用する際、DMA キャッシュの同期(一貫性)が行われていない。
- 前のパケットの残留データが、新しいパケットの一部を上書きする。
- AP のオフロード機能(SFE/PPE)が破損したデータをベースにチェックサムを再計算し、クライアントには「正しい」チェックサムを持つ偽のパケットを送る。
- 特定箇所: 64 バイトのキャッシュライン単位でデータが置き換わる現象が確認された。
検証結果
- MediaTek カードへの交換: 改善が見られず、AP 自体の問題であることが確定。
- 推論: Qualcomm の SFE/PPE オフロード機能のみが、高速転送パス上でチェックサム再計算を担当しており、ここが脆弱点となっている。
3. 解決策と開発の必要性
公式の回避策(実行不可能)
Qualcomm ドライバーソースコードには、オフロード機能を無効化する設定が存在したが、以下の理由で実行できない。
# この設定を書き込む必要があるが、TP-Link シェルでは権限不足 echo 0 > /sys/sfe/l2_feature echo 0 > /sys/sfe/ppe_rfs_feature
- 権限問題: TP-Link SSHシェルは UID 1 で動作し、これらのファイルへの書き込み権限がない。
- ファームウェア制限:
- v1 ファームウェア用の修正版パッチイメージが存在しない。
- v2 ファームウェアは別ハードウェア用で互換性なし。
- 暗号化された新しいファームウェアへの書き込みにはフラッシュライターが必要だが、ハードウェア破損リスクが高すぎる。
KERNEL_EXPLOIT_(カーネル攻撃)の開発
TP-Link が提供できない機能を実装するために、任意コード実行型の Kernel Exploit を開発した。
- CVE-2022-0185 を活用: 低権限ユーザーネームスペースからカーネル空間へのアクセスを可能にする整数アンダーフロー攻撃を使用。
- 目的: オフロード機能を無効化する設定を、管理者権限なしで AP 内部に書き込む。
エクスプロイトの概要
- 環境構築: EAP783 の GPL ソースコードと QEMU を用いて動作検証。
- アドレス空間調整:
が無効なため、動的にカーネルイメージの物理アドレスを検出・修正。kallsyms - 攻撃チェーン:
- ユーザーネームスペースでのファイル操作 (
) と整数アンダーフローによるメモリ解放(Defrag)。fsopen - システムコールテーブルやパイプ構造体への任意書き込み。
の偽造(Forge)により、カーネルイメージのページを解放せずに読み取る。pipe_buf_operations
を上書きし、実行コマンドを「オフロード機能無効化設定」とするバイナリファイルに置換。modprobe_path
- ユーザーネームスペースでのファイル操作 (
- 結果: この攻撃を実行すると、AP は再起動せずとも即座に転送破損が消失。
4. Before and After: 効果と性能影響
テストデータ比較
オフロード機能を無効化(Off)した場合の改善状況。
| 設定 | 方向 | データ速度 | 破損ブロック数 (8192 MiB) | 大規模転送結果 |
|---|---|---|---|---|
| On (Default) | LAN → Wi-Fi | 103.4 MiB/s | 3 個 | 失敗(数 GiB 以上) |
| Off (Fixed) | LAN → Wi-Fi | 95.4 MiB/s | 0 個 | 成功( Overnightランでも安定) |
- 速度影響: オフロード無効化により約 8% の速度低下はあるが、データの整合性確保が最優先となる。
- 仕組み変更: AP が高速パス(ブリッジ)を使わずに通常の転送パスを使用するため、内部カウンターが増加する。
運用上の工夫
設定は再起動でリセットされるため、以下の自動化を実装している。
- NAS で AP のステータスを監視し、オフロード機能が有効化されたら即座に Exploit を再実行。
- 失敗した場合のみ TP-Link API を通じて AP を再起動し、次の起動で再試行する。
5. 補足:Wi-Fi 断線に関する調査(更新)
アクセスポイント側の問題以外の、ラップトップ側での Wi-Fi 7 特有の断線現象も確認された。
現象
- Qualcomm ドライバー搭載の Framework 16 ラップトップで、数時間ごとの通信停止が発生。
- AP 側では送信が正常だが、ラップトップからの応答(ACK)が遅延・消失。
分析結果
- ドライバ動作:
ドライバーはフレームが空気に乗るタイミングを正確に把握できず、キューの成長後に処理を延期(ath12k
)。CMD_REMOVE_AGED_FRAMES - 根本原因: Qualcomm のクローズドソースファームウェア (
) 内部的な動作制限によるもの。amss.bin - 対策案:
- アクセスポイント側:Wi-Fi 7 を Wi-Fi 6 (802.11ax) に変更すると改善する可能性がある(ただし、根本的なバグではない)。
- ドライバ更新:アップストリームファームウェアへのアップデートは効果なし。
結論
AP 側の破損問題とラップトップ側の断線問題は別の要因によるが、どちらも Qualcomm チップのクローズドソースコンポーネントに依存しているため、現時点での完全な解決策は見出されていない。