
CVE-2019-17147(TP-Link TL-WR841N ルーターのスタックバッファオーバーフロー)の包括的なリバースエンジニアリングおよび悪用。ファームウェア解析、ハードウェアデバッグ、および認証なしリモートコード実行(RCE)のためのステージ化されたシェルコードインジェクションエクスプロイトを含みます。

このリポジトリは、TP-Link TL-WR841N ルーター(MIPSEL アーキテクチャ)における深刻なリモートコード実行(RCE)脆弱性 CVE-2019-17147 の包括的なリバースエンジニアリングとエクスプロイトを文書化したものです。この脆弱性は httpd Webサーバデーモンに存在し、不適切な入力検証により、カスタムの cstr_strncpy 関数を介して スタックバッファオーバーフロー が発生し、認証なしで任意のコード実行が可能になります。
| 脆弱性 | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (高) |
| ベクトル | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| タイプ | スタックベースのバッファオーバーフロー |
| コンポーネント | /usr/bin/httpd |
分析環境は以下のコンポーネントを使用して構築されました。
flashrom(メモリダンプ)、binwalk(ファームウェア抽出)、IDA Pro(静的解析)、GDB-Multiarch(リモートデバッグ)、QEMU(MIPSEL エミュレーション)。TL-WR841N(US)_V14_180319。この脆弱性は /usr/bin/httpd バイナリで特定されました。IDA Pro による静的解析により、HTTP ヘッダー(特に Host ヘッダー)の解析中に使用されるカスタム文字列コピー関数 cstr_strncpy が明らかになりました。

関数 cstr_strncpy は、コピー先 バッファサイズではなく、コピー元 文字列の長さから導出された copy_len パラメータを受け入れます。これにより、過度に長いヘッダーが指定された場合、古典的なスタックバッファオーバーフローが発生します。さらに、リンクリスト構造を操作する http_parser_argStrToList 関数がこのオーバーフローの影響を受け、next および prev ポインタを制御できるようになります。
gdbserver を使用したランタイムデバッグにより、クラッシュと実行フローの制御が確認されました。メモリマップ (vmmap) 解析により、重大なハードニングの欠如が明らかになりました:

この構成により、ヒープ上に配置されたシェルコードの直接実行が可能になり、複雑な ROP チェーンが不要になります。
エクスプロイトチェーンは、破損したリンクリストポインタから派生した Write-What-Where プリミティブを利用して RCE を達成します。
strcpy のヌルバイト制限を回避するため、ペイロードは複数のリクエストで送信されます:
atol 関数エントリがシェルコードのアドレスで上書きされます。atol への呼び出しを強制し(Content-Length ヘッダーを介して)、実行を注入されたシェルコードにリダイレクトします。
最終的な Python スクリプトは攻撃を自動化し、ポート 31337 でルートシェルを起動します。

脆弱性は、バッファ管理における安全でないコーディング慣行に起因します。
cstr_strncpy の使用を、コピー先バッファの制限を厳格に強制する安全な代替手段(例:sizeof(dest) に基づく明示的な境界チェック付きの strncpy)に置き換えます。プロセス全体の詳細なステップバイステップのウォークスルーについては(コード分析や環境セットアップを含む)、このリポジトリに含まれる完全なガイドを参照してください:
このプロジェクトは教育および研究目的のみを対象としています。提供される情報は、IoT デバイスのセキュリティを向上させることを目的としています。著者は、ここに含まれる情報やコードの誤用について一切責任を負いません。
Based on original research and analysis.