jueves, 23 de diciembre de 1999

Desbordamiento de Búffer en el demonio SSH y la librería RSAREF2

CORE SDI ha descubierto dos errores de desbordamiento de búffer en el
demonio SSH y en la librería RSAREF2 que, conjuntamente, permiten la
ejecución de código arbitrario en la máquina del usuario, típicamente
con privilegios de administrador o "root".
La librería RSAREF2 es una librería gratuíta distribuída por la compañía
RSA a mediados de los años 90, como implementación criptográfica de
referencia de sus algoritmos patentados. Dicha librería es de uso
OBLIGATORIO para cualquier programa no comercial que se use en EE.UU.,
por cuestiones de patentes. Esta librería tiene un problema de
desbordamiento de búffer si se le introducen datos maliciosos en la
entrada. Dicho desbordamiento permite la ejecución de código arbitrario
con los privilegios en curso, típicamente "root" o administrador.

Por otra parte SSH1 es una implementación del conocido protocolo SSH
(Secure SHell), que permite el establecimiento de conexiones seguras
entre máquinas para, por ejemplo, poder acceder y administrar de forma
segura servidores remotos. Las implementaciones SSH hasta la versión
1.2.27 inclusive son vulnerables a un ataque de desbordamiento de búffer
que, si bien no puede ser utilizado para ejecutar código arbitrario,
permite injectar entradas maliciosas a la librería RSAREF2 que, a su
vez, posibilitan la ejecución de código merced al error que acabamos de
indicar.

Para solucionar el problema (que sólo existe si se compila SSH 1.2.27 y
previos con la opción "--with-rsaref", que es obligarotio únicamente en
EE.UU.) se puede o bien parchear la librería RSAREF2 o bien actualizar
el cliente SSH a la versión 1.2.28.

En este mensaje se incluye el parche para RSAREF2. Aunque la licencia
RSAREF2 prohibe cualquier modificación en el código salvo para realizar
adaptaciones a otras arquitecturas o para mejorar su velocidad, RSA ha
autorizado por escrito la aplicación de parches de seguridad, a partir
de la publicación de este problema.

Parche:



--------------------------------------- rsaref2.patch
*** rsa.original.c Fri Mar 26 14:01:48 1994
--- rsa.c Fri Dec 10 12:56:34 1999
***************
*** 33,38 ****
--- 33,41 ----
unsigned char byte, pkcsBlock[MAX_RSA_MODULUS_LEN];
unsigned int i, modulusLen;

+ if (publicKey->bits > MAX_RSA_MODULUS_BITS)
+ return (RE_LEN);
+
modulusLen = (publicKey->bits + 7) / 8;
if (inputLen + 11 > modulusLen)
return (RE_LEN);
***************
*** 78,83 ****
--- 81,89 ----
unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
unsigned int i, modulusLen, pkcsBlockLen;

+ if (publicKey->bits > MAX_RSA_MODULUS_BITS)
+ return (RE_LEN);
+
modulusLen = (publicKey->bits + 7) / 8;
if (inputLen > modulusLen)
return (RE_LEN);
***************
*** 128,133 ****
--- 134,142 ----
int status;
unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
unsigned int i, modulusLen;
+
+ if (privateKey->bits > MAX_RSA_MODULUS_BITS)
+ return (RE_LEN);

modulusLen = (privateKey->bits + 7) / 8;
if (inputLen + 11 > modulusLen)
***************
*** 168,173 ****
--- 177,185 ----
unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
unsigned int i, modulusLen, pkcsBlockLen;

+ if (privateKey->bits > MAX_RSA_MODULUS_BITS)
+ return (RE_LEN);
+
modulusLen = (privateKey->bits + 7) / 8;
if (inputLen > modulusLen)
return (RE_LEN);


Más información:
CORE SDI: Buffer Overflow in RSAREF2
CERT Advisory CA-99-15 Buffer Overflows in SSH Daemon and RSAREF2 Library
CIAC: Buffer Overflow Vulnerabilities in SSH Daemon and RSAREF2
Exploit (cliente SSH1.2.27 modificado)
Parches:
ftp://ftp.core-sdi.com/pub/patches/rsaref2.patch
http://www.cert.org/advisories/CA-99-15/rsa-patch.txt



Jesús Cea Avión
jcea@hispasec.com