Fabian Bäumer, Marcus Brinkmann y Jörg Schwenk, informáticos de la Universidad Ruhr de Bochum (Alemania), informaron que los servidores SSH eran vulnerables a un nuevo ataque en el que los actores de amenazas pueden degradar una versión del protocolo SSH, haciéndola vulnerable a la explotación. Esta técnica, bautizada como ataque Terrapin, fue anunciada en un artículo técnico publicado a finales de 2023.
Las causas fundamentales de este ataque fueron un fallo de autenticación en el handshake SSH y el no restablecimiento de los números de secuencia. Esto contribuye a varios ataques sobre servidores SSH, como el truncamiento de prefijos, la manipulación de números de secuencia y los ataques de degradación de negociación de extensiones.
En un ataque man-in-the-middle exitoso, el adversario puede ser capaz de forzar a los clientes SSH a utilizar métodos de autenticación más débiles y desactivar algunos mecanismos de defensa. Ahora mismo es difícil precisar el verdadero impacto realista del fallo porque todo depende de las configuraciones individuales cliente-servidor, las implementaciones del protocolo y otras variables. SSH se utiliza principalmente para conectarse a sistemas remotos y utilizarlos o administrarlos a través de una interfaz de línea de comandos.
Acerca de la vulnerabilidad
En octubre, tras descubrir la vulnerabilidad, revelaron en privado los detalles a los desarrolladores de clientes y servidores SSH para que los solucionaran. Ahora todo es público, con parches e información.
Los investigadores han publicado scripts de prueba de concepto y otros materiales en GitHub para la evaluación de detalles de bajo nivel. También existe una herramienta de código abierto que puede utilizarse para determinar si el cliente o servidor SSH es vulnerable a Terrapin.
Como resultado de los hallazgos de este estudio, las actualizaciones de software SSH deberían estar llegando a los usuarios, y hay mitigaciones disponibles mientras tanto. Los organismos de seguridad han determinado que esta vulnerabilidad no es un problema alarmante, ya que el atacante tendrá que interponerse en la conexión vulnerable en lugar de atacar directamente a un servidor; se trata principalmente de un ataque de degradación más que de un problema de descifrado o de inyección de comandos; y hay formas de protegerse inmediatamente de los ataques Terrapin.
Hay tres problemas a tener en cuenta: CVE-2023-48795, que es la vulnerabilidad SSH genérica explotable a nivel de protocolo; y CVE-2023-46445 y CVE-2023-46446 específicas del cliente Python SSH AsyncSSH, que tiene unas 60.000 descargas diarias.
En el caso de AsyncSSH, se descubrió que el código fuente abierto tenía errores de implementación específicos de ese cliente que podían aprovecharse con un ataque al estilo Terrapin para, por ejemplo, hacer que una víctima iniciara sesión sin saberlo en una cuenta shell controlada por el atacante en lugar de en la suya propia. Es un ejemplo de cómo diferentes clientes y servidores pueden ser vulnerables a Terrapin de diferentes maneras. AsyncSSH ha sido parcheado para solucionar los problemas CVE-2023-46445 y CVE-2023-46446 en la versión 2.14.1, y el problema genérico CVE-2023-48795 en la 2.14.2.
Cómo opera el ataque Terrapin
Terrapin (CVE-2023-48795) es un ataque de truncamiento de prefijos, y permite a un atacante MITM rebajar la seguridad de una conexión SSHv2 durante la negociación de la extensión.
Tal como indican los investigadores en la publicación principal, un ataque Terrapin exitoso puede «conducir al uso de algoritmos de autenticación de cliente menos seguros y desactivar contramedidas específicas contra ataques de sincronización de pulsaciones de teclas en OpenSSH 9.5». En algunas circunstancias muy específicas, podría utilizarse para descifrar algunos secretos, como la contraseña de un usuario o partes de ella mientras se conecta, pero esto no es trivial y en la práctica fracasará.
Cuando un cliente SSH se conecta a un servidor SSH, antes de que hayan establecido un canal seguro y encriptado, realizarán el handshake en el que intercambiarán información sobre el otro en texto plano. Cada parte tiene dos contadores de secuencia: uno para los mensajes recibidos y otro para los enviados. Cada vez que se envía o se recibe un mensaje, se incrementa el contador de secuencia correspondiente; de este modo, los contadores llevan la cuenta del número de mensajes enviados y recibidos por cada parte.
Como ataque MITM, Terrapin consiste en inyectar un mensaje de texto plano «ignorar» en la conexión pre-segura, durante el handshake, para que el cliente piense que proviene del servidor e incremente su contador de secuencia para los mensajes recibidos. Por lo demás, el mensaje se ignora. Entonces, una vez establecido el canal seguro, el atacante MITM bloquea al servidor para que no envíe ningún mensaje al cliente sobre defensas adicionales. No importa que el mensaje esté cifrado: el atacante simplemente impide que llegue, y el cliente nunca lo ve ni actúa en consecuencia.
Como antes se insertó un mensaje de ignorar en texto plano, el cliente sigue teniendo en última instancia el número esperado de mensajes recibidos, y el servidor piensa que ha enviado el número correcto de mensajes.
Aunque un mensaje haya sido interceptado y bloqueado por el atacante MITM durante la inicialización, los contadores de secuencias de envío y recepción parecen correctos en ambos lados, lo que es vital porque estos recuentos se utilizan posteriormente para verificar la integridad del proceso de handshake. Si los recuentos son correctos, se permite que la conexión continúe. Por eso se inserta el mensaje «ignorar», para que cuando el mensaje de extensión se bloquee en el canal seguro, el cliente y el servidor no se enteren.
Esto se representa en el siguiente diagrama del documento de Terrapin – los números de secuencia están en negrita en el punto en que se verifican:
Se puede insertar un número arbitrario de mensajes «ignorar» para bloquear los mensajes del servidor al cliente durante el establecimiento de la conexión. Como se puede ver en la descripción técnica, puede ser un poco complicado con el orden de los mensajes inyectados y bloqueados para realizar ataques más complejos. A través de esto es posible jugar con la configuración de la conexión, degradar la seguridad utilizada, deshabilitar extensiones, y potencialmente explotar debilidades más profundas en implementaciones específicas de cliente o servidor.
Dicho todo esto, el algoritmo de cifrado utilizado para el canal seguro es crucial para que una conexión SSH pueda ser atacada con éxito o no.
Se dice que ChaCha20-Poly1305 es «vulnerable y perfectamente explotable» por Terrapin debido a la forma en que se utilizan los números de secuencia en la derivación de claves. No hay una debilidad criptográfica en este algoritmo, sólo en la forma en que se utiliza para SSH. CBC-Encrypt-then-MAC (CBC-EtM) también es vulnerable y «probabilísticamente» explotable, nos dicen, aunque dependiendo de la implementación, el ataque puede fallar. El algoritmo CTR-Encrypt-then-MAC es vulnerable pero no explotable en la práctica.
Más de tres cuartas partes (77%) de los servidores SSH públicos admiten «al menos un modo explotable en la práctica», según el trío universitario, y el 57% de ellos prefieren un algoritmo explotable.
Millones de servidores sin parchear
Según la Fundación Shadowserver, casi 11 millones de servidores SSH expuestos a Internet son vulnerables al ataque Terrapin. La mayoría de los casos se han identificado en Estados Unidos (3,3 millones), seguidos de China (1,3 millones), Alemania (1 millón), Rusia (700.000), Singapur (390.000) y Japón (380.000).
Todas las implementaciones no parcheadas rastreadas por Shadowserver soportaban los modos de cifrado requeridos.
Sólo 53 de las instancias vulnerables dependían de implementaciones de AsyncSSH, la única aplicación que actualmente se sabe que está seriamente afectada por Terrapin. Dos vulnerabilidades que los investigadores descubrieron en AsyncSSH permitían a Terrapin degradar las extensiones de seguridad que las organizaciones para reemplazar el mensaje de información de extensión enviado por el servidor, permitiendo al atacante controlar su contenido o controlar el extremo remoto de una sesión de cliente SSH inyectando o eliminando paquetes o emulando el shell establecido. AsyncSSH ha parcheado esas dos vulnerabilidades, rastreadas como CVE-2023-46445 y CVE-2023-46446. Parece que la inmensa mayoría de los usuarios de AsyncSSH han instalado los parches.
Piotr Kijewski, investigador de Shadowserer, escribió en un correo electrónico a Ars: «El ataque requiere bastante complejidad en el sentido de que se necesita MitM, por lo que, en nuestra opinión, limitará la aplicación práctica a ataques más selectivos». «Así que es poco probable que esto se explote en masa. Aún así, la gran masa de instancias vulnerables sugiere que esta vulnerabilidad estará con nosotros durante años y eso en sí mismo la hace atractiva en algunos casos específicos.»
Aunque es poco probable que Terrapin llegue a ser explotado en masa, sigue existiendo la posibilidad de que sea utilizado en ataques selectivos por atacantes más sofisticados, como los respaldados por naciones-estado. A pesar de que las versiones anteriores de AsyncSSH son la única aplicación conocida vulnerable a los ataques prácticos de Terrapin, los investigadores dedicaron poco tiempo a analizar otras implementaciones. Los adversarios con más tiempo, recursos y motivación podrían identificar otras implementaciones vulnerables.
Acciones a tomar
Las entidades de seguridad han indicado que no se trata de un fallo que requiera que los administradores tomen acciones de remediación inmediatas. Sin embargo, se recomienda que se tomen medidas para cerrar las vulnerabilidades asociadas.
«El ataque requiere un atacante activo que pueda interceptar y modificar el tráfico de la conexión en la capa TCP/IP», explicaron. «Además, se requiere la negociación de ChaCha20-Poly1305, o cualquier cifrado CBC en combinación con Encrypt-then-MAC como modo de cifrado de la conexión».
Es recomendable estar atento a los parches y actualizaciones, e instalarlos cuando sea posible: si se utiliza Linux, por ejemplo, deberían llegar a través del método habitual de actualización de su distribución.
El lunes se publicó OpenSSH 9.6, que entre otras cosas soluciona el problema de Terrapin con un estricto protocolo de intercambio de claves que, si tanto el servidor como el cliente lo soportan, debería frustrar estos ataques. Mientras tanto, Putty 0.8 se publicó esta semana para hacer frente a Terrapin. libssh 0.10.6 y libssh 0.9.8 también se emitieron para defenderse de la técnica. Imaginamos que habrá otras.
Además de instalar actualizaciones, los administradores pueden mitigar los ataques deshabilitando los modos de cifrado afectados en la configuración de sus servidores SSH, y utilizar en su lugar algoritmos no vulnerables como AES-GCM.
Existe el riesgo de que, si el servidor se configura incorrectamente o el cliente no admite la configuración, se pierda el acceso al servidor, advirtieron los investigadores. Las versiones más antiguas de OpenSSH (6.2 y 6.3) también son vulnerables a un desbordamiento de búfer cuando se utiliza AES-GCM, así que se debe tener cuidado con eso.
«Terrapin no es un simple fallo de software que pueda solucionarse con una actualización de una única biblioteca o componente», concluyen los investigadores. «En su lugar, es necesario actualizar los clientes y servidores para proteger la conexión contra los ataques de truncamiento de prefijos. Esto significa que tenemos que concienciar del problema a todas las implementaciones de clientes y servidores SSH, lo que supone un esfuerzo considerable.»
Referencia: