此仓库是基于 Warp 公开安全公告 GHSA-9w2v-jhww-vm85 中 CVE-2026-54686 的安全本地 PoC。
在修复前的 Warp 版本中,对于从 PTY 流中到达的部分状态变更 DCS 生命周期钩子,并未验证该钩子是否来自当前会话的 Warp shell 集成。如果攻击者能够使受害者在 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 会话传输元数据可能被更新为攻击者控制的值。
Warp 的 shell 集成通过终端的 DCS 序列向客户端发送生命周期钩子,例如 Precmd、CommandFinished、InputBuffer 和 SSH。在修复前的实现中,对于某些状态变更钩子,缺乏对“该钩子是否由 Warp 客户端生成并具有已为此会话注册的 session_id”的一致性验证。
修复方法是将客户端生成的非零 session_id 注入 bootstrap 脚本,并拒绝任何 session_id 未注册的状态变更 DCS 钩子。对于 SSH wrapper,也进行了修改,以验证本地 SSH 钩子,注册客户端生成的远程会话 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 参数后,将以 Python 的 repr() 格式显示生成的 Warp 风格 DCS 流。不会向终端输出原始控制序列。
请更新至 v0.2026.05.06.15.42.stable_01 或更高版本。公开公告指出,除更新外没有其他完整的缓解措施。