Primero, obviamente, si hay un error en el cliente SSH, podría permitir que el servidor ejecute el código allí. Un error realmente malo podría incluso permitir a un hombre en el medio explotar al cliente. El resto de la superficie de ataque consiste en donde SSH envía los datos que recibe del servidor.
En su caso, el texto recibido a través de la conexión SSH se envía a un terminal. Los terminales analizan las secuencias de escape: así es como muestran los colores, mueven el cursor, etc. Puede haber errores en el analizador de secuencia de escape. Además, algunas secuencias de escape pueden solicitar cosas que van más allá de afectar a la pantalla, como cambiar el título del terminal, cambiar el tamaño de la ventana o inyectar datos de entrada (por ejemplo, un comando para consultar la posición del cursor o el título de la ventana). Los terminales modernos deshabilitan los comandos verdaderamente peligrosos (los que causan una entrada inyectada que puede ser un texto arbitrario configurado a través de otra secuencia de escape). Para obtener más información sobre este tema, consulte Can "cat ¿"un archivo es un riesgo potencial de seguridad? , ¿Cómo puedo protegerme de este tipo de abuso del portapapeles? , y ¿Cómo evitar ataques de secuencia de escape en terminales? . La solución es verificar que su terminal no permita secuencias peligrosas. Para mayor seguridad, en lugar de abrir un terminal donde ejecute un shell donde ejecute ssh
, ejecute ssh
directamente en el terminal, y deshabilite cualquier manejo del teclado que pueda tener ( EscapeChar none
en la configuración del cliente OpenSSH); De esta forma, incluso si un servidor malintencionado logra inyectar una entrada, no hay riesgo de que se ejecute como un comando de shell en su máquina.
SSH también puede reenviar conexiones de red, lo que permite que el servidor llegue al cliente además del terminal. Esto puede pasar por alto una restricción de firewall. Dos conexiones de red reenviadas comunes conllevan riesgos propios. El reenvío X11 le da al servidor acceso a su servidor X local; esto es más o menos equivalente a darle acceso de shell al servidor, ya que permite cosas como inyectar entradas en otras aplicaciones (una característica útil para cosas como grabadoras de macros y reasignación de entradas basadas en el administrador de ventanas, pero carece de firewall adecuado). El reenvío de agente SSH le permite al servidor usar sus claves privadas para iniciar sesión en otro lugar. Por lo tanto, cuando se conecte a un servidor que no sea de confianza, asegúrese de no activar ningún reenvío. Active el reenvío selectivo para servidores conocidos.
Además, existe una exposición a la privacidad si envía un nombre de usuario predeterminado o una oferta de clave pública.