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;
jcea@hispasec.com
Más información:
Remote vulnerability in SSH daemon crc32 compensation attack detector
http://razor.bindview.com/publish/advisories/adv_ssh1crc.html
SSH1 CRC-32 compensation attack detector vulnerability
http://www.core-sdi.com/advisories/ssh1_deattack.htm
Deja una respuesta