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 boffer 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 onicamente 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
http://www.core-sdi.com/advisories/buffer%20overflow%20ing.htm
CERT Advisory CA-99-15 Buffer Overflows in SSH Daemon and RSAREF2 Library
http://www.cert.org/advisories/CA-99-15-RSAREF2.html
CIAC: Buffer Overflow Vulnerabilities in SSH Daemon and RSAREF2
http://www.ciac.org/ciac/bulletins/k-011.shtml
Exploit (cliente SSH1.2.27 modificado
ftp://ftp.core-sdi.com/pub/exploits/ssh-rsaref-bo
Parches:
ftp://ftp.core-sdi.com/pub/patches/rsaref2.patch
http://www.cert.org/advisories/CA-99-15/rsa-patch.txt
Jesos Cea Avi¢n
jcea@hispasec.com