El carácter "\n" permite control total incluso con protección básica: ahora es una vulnerabilidad de ejecución remota de código (RCE) en OpenSSH

El carácter "\n" permite control total incluso con protección básica: ahora es una vulnerabilidad de ejecución remota de código (RCE) en OpenSSH

Una peculiaridad en la generación de ProxyCommand convierte a una herramienta popular en blanco de ataques a Gi

image

En OpenSSH se ha detectado una nueva vulnerabilidad — CVE-2025-61984 — que permite la ejecución remota de código (RCE) mediante la manipulación del parámetro ProxyCommand y las particularidades del procesamiento de caracteres en el intérprete de comandos. La explotación es posible incluso con protecciones frente a los metacaracteres estándar de la shell, ya que se aprovechan caracteres de control y errores sintácticos que no detienen la ejecución de comandos en algunos intérpretes.

OpenSSH proporciona el mecanismo ProxyCommand para conectar a través de un proxy intermedio. Suele usarse así: ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p. Sin embargo, en la configuración ~/.ssh/config, si se indica %r, el nombre de usuario puede contener caracteres de control. Aunque la mayoría de los caracteres peligrosos se filtran, como ;, |, (, ), &, anteriormente no se filtraban \n (salto de línea), $, [ y otros, que en algunas shells pueden cambiar el comportamiento del comando. Ese comportamiento permite a un atacante construir un valor de nombre de usuario falso que contenga un comando malicioso en la línea siguiente tras un error en la primera línea.

Si un repositorio git contiene un submódulo malicioso con una URL del tipo: url = "$[+]\nsource poc.sh\n@foo.example.com:foo", y el usuario tiene en ~/.ssh/config la siguiente línea: ProxyCommand some-command %r@%h:%p, entonces al clonar con git clone --recursive se ejecutará la segunda línea (source poc.sh) si se usa una shell como Bash, Fish o csh. Esto es posible porque el error sintáctico $[+] provoca que se pase a la siguiente línea. Zsh, a diferencia de otras shells, interrumpe correctamente la ejecución en estos casos.

El usuario debe tener habilitado ProxyCommand con %r. El atacante debe controlar la URL del submódulo en .gitmodules. La shell vulnerable debe estar establecida como SHELL (por ejemplo, bash). El usuario debe ejecutar git clone --recursive. De este modo, la vulnerabilidad puede aprovecharse en cadenas de suministro, servidores de CI/CD y entornos de usuario.

Teleport es una de las herramientas afectadas, ya que en la configuración tsh config genera ProxyCommand con %r. Esto permite a un atacante, que conozca el nombre del clúster, iniciar el ataque a través de submódulos git.

El parche para OpenSSH incluye un filtrado estricto de caracteres de control en la función valid_ruser(): if (iscntrl((u_char)s[i])) return 0;. También se recomiendan las siguientes medidas: actualizar a OpenSSH 10.1; cambiar ProxyCommand para usar comillas simples: '%r', para evitar la interpretación; prohibir SSH en submódulos: git config --global protocol.ssh.allow user; deshabilitar los manejadores de URL para ssh:// si dejan pasar caracteres de control; y pasarse a shells con un comportamiento más estricto (por ejemplo, Zsh).

Aunque el ataque requiere una configuración específica, es un recordatorio más de la complejidad e imprevisibilidad de la interacción entre git, SSH y los intérpretes de comandos. Incluso sin explotación directa, este tipo de vulnerabilidades muestran la importancia de un tratamiento estricto de la entrada de usuario en las herramientas de línea de comandos y en la automatización.

No esperes a que los hackers te ataquen: ¡suscríbete a nuestro canal y conviértete en una fortaleza impenetrable!

Suscribirse