
PoC local para CVE-2026-54686 que demuestra la suplantación de ganchos del ciclo de vida DCS en el terminal Warp. Simula la aceptación de metadatos CWD y SSH falsificados en modelos vulnerables, con rechazo por parte del modelo corregido.
Este repositorio es un PoC local seguro de CVE-2026-54686 basado en el advisory público de Warp GHSA-9w2v-jhww-vm85.
Las versiones de Warp anteriores a la corrección no verificaban si algunos hooks de cambio de estado del ciclo de vida DCS recibidos a través del stream PTY habían sido enviados por la integración de shell de Warp para la sesión actual. Si un atacante consigue que la víctima muestre salida de terminal controlada por el atacante en Warp, puede falsificar metadatos de ciclo de vida seleccionados y afectar a los metadatos relacionados con bloques activos o sesiones SSH.
Este PoC no se conecta a Warp ni a servidores SSH y no ejecuta comandos arbitrarios. Genera y analiza localmente hooks DCS JSON con estilo Warp, mostrando que en el modelo anterior a la corrección se reflejan el CWD y los metadatos SSH falsificados, mientras que en el modelo corregido se rechazan los hooks de cambio de estado con un session_id no registrado.
Este proyecto tiene fines exclusivamente educativos y de verificación de seguridad ética. No lo utilice para pruebas o ataques en entornos sin autorización.
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_01Si el ataque tiene éxito, Warp podría tratar la ruta elegida por el atacante como el CWD de la sesión activa. Es posible que se vean afectadas las funciones que utilizan rutas basadas en el CWD, el contexto y el comportamiento de la sesión.
Además, si se falsifican los metadatos del ciclo de vida SSH, existe la posibilidad de que los metadatos de transporte de la sesión SSH mantenidos por Warp se actualicen con valores controlados por el atacante.
La integración de shell de Warp envía hooks de ciclo de vida como Precmd, CommandFinished, InputBuffer y SSH al cliente mediante secuencias DCS del terminal. En la implementación anterior a la corrección, faltaba una verificación de consistencia para algunos hooks de cambio de estado: comprobar si el hook tenía un session_id generado por el cliente de Warp y registrado para esa sesión.
La corrección inyecta un session_id no nulo generado por el cliente en el script de bootstrap y rechaza los hooks DCS que cambian el estado cuando su session_id no está registrado. El wrapper SSH también se ha modificado para autenticar el hook SSH local, registrar el ID de sesión remota generado por el cliente e inyectarlo en el bootstrap remoto.
Se requiere Python 3.
python3 --version
python3 poc.py
Resultado esperado:
[!] VULNERABLE: spoofed cwd was accepted.
[!] VULNERABLE: spoofed ssh metadata was accepted.
python3 poc.py --mode fixed
Resultado esperado:
[+] FIXED: spoofed cwd was rejected.
[+] FIXED: spoofed ssh metadata was rejected.
python3 poc.py --case cwd
python3 poc.py --case ssh
Si se añade --show-stream, el stream DCS generado con estilo Warp se muestra en formato repr() de Python. No se emiten secuencias de control en bruto al terminal.
Actualice a v0.2026.05.06.15.42.stable_01 o posterior. El advisory público indica que no existe una mitigación completa más allá de la actualización.