
このリポジトリは、Warp の公開アドバイザリ GHSA-9w2v-jhww-vm85 に基づく CVE-2026-54686 の安全なローカル PoC です。
Warp の修正前バージョンは、PTY ストリームから届く一部の状態変更 DCS ライフサイクルフックについて、そのフックが現在のセッション用に Warp の シェル統合から送られたものかを検証していませんでした。攻撃者が被害者に 攻撃者制御の端末出力を Warp 上で表示させられる場合、選択されたライフ サイクルメタデータを偽装でき、アクティブブロックや SSH セッションに 関連するメタデータへ影響を与える可能性があります。
この PoC は Warp や SSH サーバーへ接続せず、任意コマンドも実行しません。
Warp 風の DCS JSON フックをローカルで生成・解析し、修正前モデルでは偽装
された CWD や SSH メタデータが反映され、修正後モデルでは未登録
session_id を持つ状態変更フックが拒否されることを示します。
このプロジェクトは、教育目的および倫理的なセキュリティ検証のみを目的と しています。許可のない環境での検証や攻撃に使用しないでください。
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L)>= v0.2021.04.25.23.05.stable_00v0.2026.05.06.15.42.stable_01攻撃が成立すると、Warp がアクティブセッションの CWD として攻撃者が選んだ パスを扱う可能性があります。CWD を元にしたパス、コンテキスト、セッション 動作を利用する機能へ影響する場合があります。
また、SSH ライフサイクルメタデータが偽装されると、Warp が保持する SSH セッションの transport metadata が攻撃者制御の値に更新される可能性が あります。
Warp のシェル統合は、端末の DCS シーケンスを使って Precmd,
CommandFinished, InputBuffer, SSH などのライフサイクルフックを
クライアントへ送信します。修正前の実装では、一部の状態変更フックに対して
「そのフックが Warp クライアントが生成し、当該セッションへ登録した
session_id を持つか」という整合性検証が不足していました。
修正では、クライアント生成の非ゼロ session_id を bootstrap スクリプトへ
注入し、状態を変更する DCS フックの session_id が登録済みでない場合は
拒否するようになっています。SSH wrapper についても、ローカル SSH フックを
認証し、クライアント生成の remote session ID を登録したうえでリモート
bootstrap に注入する形へ変更されています。
Python 3 が必要です。
python3 --version
python3 poc.py
期待される結果:
[!] VULNERABLE: spoofed cwd was accepted.
[!] VULNERABLE: spoofed ssh metadata was accepted.
python3 poc.py --mode fixed
期待される結果:
[+] FIXED: spoofed cwd was rejected.
[+] FIXED: spoofed ssh metadata was rejected.
python3 poc.py --case cwd
python3 poc.py --case ssh
--show-stream を付けると、生成された Warp 風 DCS ストリームを Python の
repr() 形式で表示します。端末へ生の制御シーケンスは出力しません。
v0.2026.05.06.15.42.stable_01 以降へ更新してください。公開アドバイザリ
では、更新以外の完全な回避策はないとされています。