
CVE-2026-54686에 대한 로컬 PoC로, Warp 터미널에서의 DCS 라이프사이클 후크 스푸핑을 시연합니다. 취약한 모델에서 스푸핑된 CWD 및 SSH 메타데이터 수용을 시뮬레이션하며, 수정된 모델은 이를 거부합니다.
이 저장소는 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를 가지고 있는지"라는 무결성 검증이 부족했습니다.
수정에서는 클라이언트 생성의 0이 아닌 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 이상으로 업데이트하십시오. 공개 권고
에서는 업데이트 외의 완전한 회피책은 없다고 합니다.