Termux Docker Image Leaking SSH Credentials (CVE-2025-59951)
2025/10/02 gbhackers — Termux の公式 Docker イメージに保持される SSH 認証情報が漏洩するという、深刻な脆弱性 CVE-2025-59951 が発見された。この脆弱性を悪用するネットワーク上の任意のユーザーは、ログインを必要とせずに、ホストアドレス/ユーザー名/パスワードといった機密情報を取得する可能性がある。

脆弱性の仕組み
Termux が提供するのは、Nginx リバース・プロキシの背後で Node.js バックエンドを実行する Docker イメージである。
セキュリティ研究者たちによると、このバックエンド・コードは、リクエストがローカル・マシンから送信されたことを判断するために req.ip に依存しているという。
しかし、Nginx と Termux が同一環境で動作するため、req.ip は常にプロキシの IP アドレス (127.0.0.1) を返す。その結果として、アプリケーションによる誤認が生じ、すべてのリクエストが localhost からのものと判断されてしまう。
| CVE ID | CVE-2025-59951 |
| Package | Termux (Node.js) |
| Affected Versions | release-0.1.1-tag – release-1.6.0-tag |
| Patched Versions | None |
| Severity | Critical |
つまり、誰であっても、認証を必要とせずに “/ssh/db/host/internal” エンドポイントを呼び出し、そこに保存された SSH ホストの詳細情報 (上流サーバへの接続に必要なホストアドレス/ユーザー名/パスワードなど) を取得できる。

一般的な導入環境では、Termux サービスは仮想マシン内で稼働するため、攻撃者はネットワーク・スキャンにより、公開されたインスタンスを発見できる。したがって、脆弱なエンドポイントに単純な HTTP GET リクエストを送信するだけで、サービスに保存された SSH ホスト・リストが返されることになる。
この脆弱性が影響を及ぼす範囲は、Termux Docker の release-0.1.1-tag~release-1.6.0-tag 以下であり、この記事の執筆時点では修正版は存在しない。
公式イメージを使用するシステムと、公式 Dockerfile から構築されたカスタム・イメージを使用するシステムは、デフォルト・コンフィグの Nginx リバース・プロキシを使用している場合において脆弱である。以下の PoC が示すように、対象となる URL にアクセスすることで、この欠陥は再現される。
http://<IP>:<PORT>/ssh/db/host/internal
標準的な HTTP リクエストに対し、このバックエンドは完全な SSH コンフィグ・データを返す。ネットワーク・スキャナーや資産マッピング・プラットフォームを悪用する攻撃者は、脆弱なホストを容易に特定できる。アクセスに成功した攻撃者は、ネットワーク内での横方向への移動や、さらなる攻撃で悪用する認証情報の収集などを可能にする。
緩和策と推奨事項
現時点では、修正版は提供されていない。したがって、Termux Docker イメージを使用するユーザーに推奨されるのは、以下の緩和策の速やかな実施である。
- コード修正:バックエンドの検証ロジックを変更し、req.ip 依存やデフォルトのプロキシ転送 IP ではなく、X-Real-IP ヘッダーを用いてクライアントの実際の IP を検出する。
- ネットワーク制御:ファイアウォール・ルールにより、管理エンドポイントへのアクセスを制限する。
- 配置環境:Termux サービスを、認証済みゲートウェイまたは VPN の背後に配置する。
- 監視:“/ssh/db/host/internal” エンドポイントへの不審なリクエストをログで監視する。
- 認証情報の更新:漏洩した可能性のある SSH 認証情報を速やかにローテーションする。
パッチ適用済みの Termux Docker イメージがリリースされるまでの間は、これらの対策により、脆弱性の露出と潜在的な被害を最小限に抑えられる。
Termux Docker イメージを利用するユーザーは、SSH 認証情報の安全性を確保するために、推奨される緩和策を直ちに適用し、公式パッチの提供を待つ必要がある。
Termux の公式 Docker イメージの脆弱性は、原因が明瞭です。Node.js バックエンドにおけるクライアント判定が req.ip に依存しており、Nginxリバース・プロキシ下では常にプロキシの IP が返されます。それによりローカル判定に誤認が生じ、認証を必要としない内部 API の露出が引き起こされます。したがって、認証情報を返すエンドポイントが外部から呼び出され、SSH ホスト情報が漏洩するというリスクが生じています。No Patch/Yes PoC という状況ですので、ご利用のチームは、ご注意ください。よろしければ、Docker で検索も、ご参照ください。

You must be logged in to post a comment.