Disclaimer:
- Mucho ojo con lo que se hace, que te podrías quedar sin conexión, o incluso, sin router. Ten en cuenta que si tu operadora no te ha cobrado por él, te lo podrían pedir de vuelta, por ejemplo, al rescindir el contrato con ellos.
- En lo que quería hacer, no he tenido éxito. Aunque alguna cosilla interesante sí que he podido avanzar.
- He hecho tantos intentos y pruebas que espero que este post no sea muy caótico. Evidentemente es muy difícil poder poner todo en el orden en el que he hecho esta investigación, que como indicaba, no ha dado todos los frutos que cabria esperar. No obstante, si alguien quiere darle una vuelta, bienvenido sea.
---
[upgrade 23/04/2021]
Hace ya casi cuatro meses que empecé esta investigación, al menos a documentarla. Hace aproximadamente dos semanas y pico el avance que he hecho ha sido, a mi modo de ver, brutal. Las entradas sobre el Sercomm FG824CD IV y V muestran el avance necesario para al menos recuperar algunos datos interesantes, como por ejemplo la contraseña que se le da al usuario "admin".
Eso no significa que las anteriores entregas no sirvan. Simplemente se muestran las distintas vías por donde se ha intentado resolver el problema y los resultados obtenidos. Eso sí: todas las entradas pueden tirar de algo de conocimiento mostrado en las anteriores independientemente del éxito que se hubiera obtenido.
Recuerda: dado que se entiende que el router es propiedad de la operadora (a no ser que el contrato diga lo contrario) no se le puede hacer cualquier cosa. Instalar un firmware de por ahí, borrar directorios o ficheros... Hagas lo que hagas siempre es bajo tu responsabilidad.
[/upgrade 23/04/2021]
Hace un tiempo que cambié de proveedor de internet y me pasé a fibra óptica. Después de que me tiraran el cable de una manera impecable (entre que yo estaba pendiente, le eché un cable, y el que lo hizo me dio la sensación de que sabía) me puso el router y me lo dejó bien instalado. A partir de ahí, ya me tocaba a mí hacer las configuraciones a mi gusto.
Lo primero de todo me tocó mirar qué router era. En mi caso, un Sercomm FG824CD.
En la pegatina que hay debajo indican que el usuario para hacer los cambios es 1234 con contraseña 1234. La única manera de gestionarlo, en principio, es con un navegador. Este es un usuario normal, sin muchos poderes.
Mi consejo es que para evitar que investigando se cierre la sesión quitar la restricción:
|
Sercomm FG824CD: quitando tiempo de cierre de sesión |
La aplicación web desde donde se administra el aparato muestra los contenidos en base a una variable de javascript: usermode. Se sabe que puede tener dos valores: enduser y admin. Cambiar el valor de esta variable es una de las opciones que se encuentran en bastantes foros. Pero hay más datos y variables que son interesantes cambiar. Por lo tanto, iniciando sesión con este usuario (1234), inspeccionamos cualquier componente de la aplicación web (botón derecho del ratón sobre uno, seleccionar inspeccionar). Desde la pestaña sources abriremos el fichero mainFunctions.js y buscaremos la línea
usermode = getUserData('usermode', data);
Al encontrar esta línea, la marcaremos con un punto de ruptura. He de decir que yo tengo un montón más. Pero de momento, este nos sirve. Al volver a cargar la página nos deberíamos de encontrar con algo como esto:
|
Sercomm FG824CD - Cambiando valores en sus variables |
Los valores de data se pueden cambiar tanto desde el propio código fuente (poniendo el puntero encima y esperando a que los muestre) o desde el panel de la derecha, permitiendo modificar todos los deseados (incluso bajando el scroll). Indicaré los que suelo cambiar, aunque la verdad, algunos puede que no tengan mucho sentido porque se vayan a sobreescribir:
- data.username: admin
- data.usermode: admin
- data.dropDownBasExp: aunque le ponía "1", realmente en algún punto busca si tiene basic o expert. Tampoco he llegado a ver qué cambios se realizan al modificar este valor. Pero puede ser importante.
- data.devRunMode: route o bridge. Este no lo modifico, pero puede ser interesante que permita ponerlo en modo bridge. Si alguien quiere probar...
- data.debug_fw_flag: "1"
- csrf_token: No lo modifico, pero es un dato importante para posibles ataques. Al menos la variable lo es.
- isSecureContext: true o false. La verdad, apenas he cacharreado con este valor, pero buscando ahora qué otras variables he toqueteado, me suena que sí lo hice en alguna ocasión sin muchos resultados. También puede ser importante.
- sys_*: Las mismas variables que se ven en la captura que les asignará los valores de data están aquí. No voy a negar que en algún punto las suelo mirar por si acaso y fuerzo el valor.
- usermode: Sí, es cierto, en algún sitio si veo que no tiene lo que quiero le asigno el valor desde aquí.
Un pequeño problema que tiene asignarlo es que cada vez que se confirma el nuevo valor se recarga todo ese panel de nuevo.
Todos estos cambios permiten que la interfaz gráfica te muestre unas pocas cosas más. Pero la validación del usuario a todas luces se puede afirmar que la hace el servidor. No obstante, también se puede llegar a pensar que cambiando el usuario en la cookie de sesión también nos ayudará. No lo tengo muy claro, pero al menos, tener este cambio no hace daño:
|
Sercomm FG824CD: Cambiando cookie |
También es importante: de vez en cuando, y de una forma que no he llegado a averiguar cómo y por qué, al rato el usuario vuelve a ser 1234.
Con estos cambios podremos ver algún que otro menú más. Por ejemplo, si queremos ver los datos relacionados con el teléfono:
|
Sercomm FG824CD: Menú del teléfono |
Con los cambios realizados, veremos que menú de la izquierda aparecen 4 selecciones en vez de la primera de todas que aparecería sin manipular los valores para """elevar"""(sic) privilegios. A su vez, el administrador tendrá censurados los teléfonos de la lista (tal y como se puede ver en la llamada inferior.
Si seleccionamos "configuración de llamadas" podremos ver los distintos servicios de telefonía que se pueden habilitar y deshabilitar: retención de llamadas, llamada en espera, llamadas a tres...
El menú "configuración básica del teléfono" es el que nos podría interesar para ver los datos de acceso VoIP. Pero por desgracia los datos están en blanco. He intentado por activa y por pasiva buscar los datos en unas cuantas variables pero no he sido capaz de descubrir si es que el servidor no los devuelve directamente, si es cuestión del tipo de usuario que a nivel de servidor lo devuelve o no...
|
Sercomm FG824CD: Configuración básica del teléfono |
Los "ajustes VoIP", que configuran entre otras cosas los codecs, tiempos de sesión, etc también aparecen vacíos.
Revisando un poco lo que hice en su momento (y que parece que descarté toquetear más, pero me lo voy a replantear) en la librería jquery-1.7.1.min.js tengo algunos puntos de ruptura. Entre otros, una función que se marca como empty (en la línea 3242) A su vez, esta llama a cleanData. Estos métodos parece que navegan por una estructura html. Por lo que veré si soy capaz de pegarme más con resultados, pero creo que lo haré en otro momento.
En la sección configuración también se muestran más o menos elementos en el menú de la izquierda según tengamos el usuario como administrador o como enduser. Aquí tenemos unas cosas para investigar.
La constraseña
|
Sercomm FG824CD: Gestión de contraseñas |
Aquí se permite actualizar la contraseña del usuario que está iniciando la sesión (tal y como se podía ver en la primera captura) pero si tenemos cambiada la variable para que el navegador se crea que es un administrador, se muestra un combo con los posibles usuarios. Y de eso me he dado cuenta ahora, porque creía que sólo me mostraba uno por ser un usuario normal. O a lo mejor es así: el navegador muestra el combo con un sólo usuario pero hay más. En este caso, solo aparece uno.
Compartir contenido
|
Sercomm FG824CD: Compartir contenido (por USB) |
Con un pincho USB conectado, se puede compartir contenido por varias vías: Samba, DLNA (para contenido multimedia) y FTP. Este era otro punto de entrada para recuperar información. Lo normal es que al navegar por los recursos compartidos la raíz empiece justo antes del recurso. Solo lo he hecho con un pincho tanto por samba (con linux, en Windows se queja de que la versión del protocolo no es segura) y por FTP. Aparecería algo así como
/A/datosEnRaizDeDispositivo. He encontrado un
manual en github para otro modelo de router de la misma marca que a partir de varias manipulaciones se consigue navegar por todo el árbol de directorios. Lo intenté una cuantas veces pero nada. Es otra línea de ataque. Lo que parece que no acaba de funcionar es el poner un enlace simbólico hacia
/etc/samba/smb.conf. Aunque en el manual sí ponen algo que está relacionado con esto.
Configuración (bis)
Tenemos otro submenú que también se llama configuración. Este es muy interensate y permite ver que siempre se cargan componentes que a través de los estilos los ocultan. Aquí tenemos un buen ejemplo. Esta sección es la que permite guardar un backup de la configuración o cargarlos en caso de necesidad. Además de resetear el router con los valores de fábrica.
|
Sercomm FG824CD: Backup y restauracion de configuración, nivel básico |
Tal y como se puede ver en la captura, hay varios componentes que tienen este valor. Pero no se le puede quitar a todos, como el que he marcado en rojo, porque ese es un popup que sale con alguno de los eventos de los botones y molestaría en la pantalla. Quitando los estilos necesarios conseguiríamos lo siguiente:
|
Sercomm FG824CD: Backup y restauracion de configuración, nivel "administrador" |
Como se puede ver, nos ofrecen, tanto para el administrador como para un usuario normal, la posibilidad de exportar la configuración guardando el fichero de configuración en diversos medios: en una ruta del PC utilizando una contraseña, en un USB conectado en el router o en la propia memoria del router. El problema está en que guardarlo en el PC no he encontrado la manera de descifrar el contenido del fichero. Alguna de las fuentes indica que encontró que la clave podía ser algo así como md5(claveSecreta + nuestraPassword). Pero mientras se analizan las trazas que se generan al recargar las páginas encontramos con que trabaja con sha256 y scjl. El fichero tiene unas cabeceras en texto claro y después el contenido completamente cifrado:
|
Sercomm FG824CD: Fichero de configuración |
Buscando alguna pista me encontré en sha.js un salt con para la contraseña de acceso que ponía $1$SERCOMM$. ¡Ah! Está relacionado con hmac. Que me pareció leer que también tiene que ver con temas de cifrado. De paso, vemos más scripts por los que pasa al hacer login:
|
Sercomm FG824CD: sha256 y el salt |
Para resumir esta parte: si le he invertí mucho tiempo para ver si encontraba cómo descifrarlo sin éxito. Es más: al subir el fichero cifrado, parece que a la hora de descifrarlo lo hace a nivel de servidor. ¿Seguirá el mismo patrón y no lo he visto o hará una cosa totalmente distinta? No me quiero olvidar que hay variables que pueden ayudar: dk o sys_encryption_key. Si bien es cierto que parece que no son estáticas.
Con lo que respecta a guardarlo en el USB o en el router, el fichero no se guarda realmente en el USB.
TR-069
A la izquierda se puede ver que también está la opción de configurar el TR-69. Tal y como estamos ahora, todo aparece como que no está configurado. No obstante, ya se verá qué se puede hacer en este caso.
Control de acceso
Esta sección también es muy interesante. Es la que permite configurar de qué forma se puede acceder al router: http, https, ¿ssh?, ¿telnet?.
|
Sercomm FG824CD; Control de acceso: http, https, ssh, telnet |
Lo normal es que aparezcan sólo http y https. Aunque algunas veces que tenía puesto (en teoria) el
usermode a
admin no me salía ssh, no sé cómo ahora sí que me lo ha puesto. De todas formas, tal y como he marcado en la captura, su
style solía estar a
display: none. Lo mismo da: tanto el de ssh como el de telnet (que este sí que está oculto) no se actualizan a nivel de servidor cuando se modifican sus valores.
GPON
Aquí tenemos la configuración del GPON para la conexión de fibra. Entre otras cosas, la contraseña.
|
Sercomm FG824CD: Configuración GPON |
Para ver el valor real de la contraseña, entre otras cosas, se puede cambiar el type del input de password a text. Y ya la tendríamos, permtiéndonos probar otro router con GPON para sustituir el que nos entregaron en la operadora.
LAN Switch
Los valores interesantes que nos ofrece son el de cambiar el modo del dipositivo, de router a bridge y viceversa. Creo que esto nos podría ayudar a poner este aparato como sólo GPON y otro adicional como router (antes Telefónica hacía esto: dos trastos para el acceso a internet y el teléfono).
* * *
En el menú principal tenemos la sección estado y soporte. Del menú que ofrece a la izquierda uno que da información muy interesante es el de "acerca de" porque nos muestra absolutamente todos los módulos que están obligados a publicitar. Entre otros CUPS, Samba, minihttpd, DNSMasq, OpenSSL y MiniUPnP. Sabiendo las versiones que tiene instaladas se pueden buscar posibles ataques remotos a los distintos servicios.
Una cosa curiosa que no he contado antes y que lo iba a hacer en una siguiente entrega, pero mejor aquí. Se sabe que si se desconecta el cable de fibra y se resetea el router al estado de "fábrica" se tiene acceso al usuario administrador: admin/admin. En mi caso, lo de hacerlo con el clip y el botón trasero de reset no funcionaba. Eso es otra historia porque también lo hice de un montón de formas (incluyendo el 30/30/30) y ni por esas. A ver que me voy por las ramas:
El menú de la izquierda de esta sección muestra más opciones estando reseteado. O eso me pareció en ese momento. Pero no tengo la captura. :( Pero no tengo muy claro que esas secciones me fuesen a ayudar.
* * *
Sé que me estoy dejando cosas en el tintero. El lío con el puerto serie que tiene dentro, algunas pruebas para subir los ficheros de configuración... Esas cosillas.
Si tenéis ideas para abordar todo lo que estoy explicando aquí, por favor, no dudéis en ponerlas en los comentarios.
* * *
Líneas de ataque para seguir probando:
- Manual Github para datos compartidos por samba; Entre otras herramientas que podrían ayudar: curl, burp.
- JQuery: Entre otras herramientas que podrían ayudar: burp, para forzar a usar un jQuery local, modificar el que carga en memoria (por el método response)...
- Descifrar los ficheros de exportación.
- TR-069: Buscar otro trasto que permita que se configure por TR-069 para sacarle los datos: otro router (entonces, ¿para qué mantener el que nos dieron?), una máquina virtual, un teléfono VoIP...
- Soldar los pines en los terminales del puerto serie interno para facilitar el análisis de cómo funciona y cuándo se puede utilizar si es que realmente se puede. Sobre todo la idea es conseguir un acceso que incluso permita navegar por el árbol de directorios. Aunque sólo sea en modo lectura, ya ayudaría a poder destripar más la aplicación web y ver qué más se puede hacer.
- Botón gordo: tirar de alguna herramienta como ZAP para lanzarle ataques a la interfaz web y ver si encuentra algo.
- - - - -
Aunque algunas cosas las descubrí por mi cuenta, sí que hay fuentes que las indican y dan más pistas de qué se puede hacer:
https://medium.com/@ioxoi/configurando-en-modo-monopuesto-bridge-la-otn-router-sercomm-fg824cd-de-pepephone-c04024f08ce3
https://bandaancha.eu/foros/router-ont-integrada-ftth-neba-1732436
https://hacks4geeks.com/hack/acceso-completo-al-router-sercomm-vox-2-5-de-vodafone/
https://naseros.com/2020/07/14/como-extraer-clave-gpon-y-sip-del-sagemcom-fast-5655v2-de-masmovil-pepephone-y-yoigo/
https://www.reiniciapc.com/cambiar-el-router-de-fibra-por-uno-neutro/
https://www.adslzone.net/foro/vodafone.108/consigo-clave-usuario-admin-router-sercomm-fg824cd.494244/
Ejemplo de cifrado/descifrado de TP-Link. Podría ayudar:
Un eploit de un backdoor en routers Sercomm: