Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Desbordamiento de búfer en diversas implementaciones SSH-1

Última Actualización: 16 de Marzo de 2.000 - Viernes

Artículo publicado en el boletín Una-Al-Día de Hispasec, el 19 de Febrero de 2.001.
Publicado también en es.internet.com, el 1 de Marzo de 2.001.

Muchas implementaciones de SSH-1 son susceptibles a un ataque de desbordamiento de búfer, que permitiría la ejecución de código arbitrario en el servidor y en el cliente.

SSH, Secure SHell, permite el establecimiento de sesiones TCP/IP protegidas mediante claves criptográficas, de forma similar a la tecnología SSL. La revisión actual del protocolo es la 2, pero existen todavía innumerables servidores que soportan la versión 1 del protocolo, incluyendo muchos servidores modernos que la incluyen por compatibilidad.

Muchas implementaciones SSH-1 incluyen una verificación de CRC, utilizada para detectar intentos de ataque sobre el protocolo. La verificación en sí es incorrecta y posibilita un ataque de desbordamiento de búfer y, por consiguiente, la ejecución de código arbitrario.

Lamentablemente este ataque puede realizarse incluso aunque el atacante no disponga de acceso al sistema, ya que puede ejecutarse durante el intercambio inicial de claves RSA, por ejemplo.

El ataque puede realizarse tanto sobre clientes como sobre servidores, si el otro extremo (al atacante) construye la conexión de la forma apropiada.

Implementaciones Vulnerables:

  • SSH 1.2.x

  • F-Secure SSH 1.3.x

  • OpenSSH anterior a 2.3.0 (a menos que se compile sin soporte SSH-1)

  • OSSH 1.5.7

Implementaciones *NO* Vulnerables:

  • SSH 2.x (si se compilan *SIN* soporte SSH-1)

  • OpenSSH 2.3.0 y superiores

  • SSH 1.2.x, si x es menor de 24 (pero serán vulnerables al ataque que intenta detectar la verificación CRC)

  • Cisco SSH

  • LSH (sin soporte SSH-1)

Para los casos de implementaciones con código fuente disponible, la solución es trivial. Por ejemplo, para OpenSSH 1.2.3 el parche sería:

>>>>>
*** deattack.c  2000/03/27 17:42:12     1.1.1.1
--- deattack.c  2001/02/19 20:38:51
***************
*** 84,90 ****
  detect_attack(unsigned char *buf, u_int32_t len, unsigned char *IV)
  {
        static u_int16_t *h = (u_int16_t *) NULL;
!       static u_int16_t n = HASH_MINSIZE / HASH_ENTRYSIZE;
        register u_int32_t i, j;
        u_int32_t l;
        register unsigned char *c;
--- 84,90 ----
  detect_attack(unsigned char *buf, u_int32_t len, unsigned char *IV)
  {
        static u_int16_t *h = (u_int16_t *) NULL;
!       static u_int32_t n = HASH_MINSIZE / HASH_ENTRYSIZE;
        register u_int32_t i, j;
        u_int32_t l;
        register unsigned char *c;
<<<<<

Más información:



Python Zope ©2001 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS