Desbloquear un B2368 a través de una vulnerabilidad en el menú "Actualización en línea"

capgadsx

Miembro Activo
Se incorporó
16 Julio 2020
Mensajes
10
ACTUALIZACIÓN

En base a los comentarios y a algunas ideas, decidí levantar una API en AWS que realiza los pasos necesarios para engañar al router e instalar una actualización.

El código fuente de la API se encuentra en https://github.com/capgadsx/B2368Update y esta bajo la licencia GPL-3.0, lo que implica que no me hago responsable por ningún tipo de daño que esta herramienta pueda generar.

Para utilizarla solo deben reemplazar la URL de la sección Actualización en línea por la siguiente https://yq69gem3og.execute-api.us-east-1.amazonaws.com/api/cpe_and_common/v2/Check.action como se ve en la captura.


editar.png


Después solo deben presionar Verificar ahora y el router debería comenzar el proceso de actualización.

Una vez finalizado, recuerden que deben actualizar el firmware del MODEM siguiente los pasos en el post de @alambredeescoba

POST ORIGINAL

Introducción.

Primero que nada, un poco de historia, soy estudiante y contrate el servicio del Entel con el B2368 gracias a este foro y a la idea de poder desbloquearlo al obtenerlo. Sin embargo, y a como muchos les paso, este ya venia bloqueado cuando lo recibí. Cuento corto, después de dos semanas logre desbloquear el router e instalar el nuevo firmware que permite cambiar las bandas LTE, esto fue como hace tres meses y cómo funcionaba deje de revisar este foro.

Hoy al volver a leer las casi 30 páginas de comentarios del hilo anterior me di cuenta de que probablemente alguien más ya descubrió el método y esta cobrando por hacerlo, lo que me molestó, especialmente por que se atreven a cagarse a la gente con hasta 40k. Así que vengo a cagarles el negocio.

Para este método necesitaremos un par de cosas algo complejas de entender si no se tiene algún grado de conocimiento básico sobre servidores web, DNS y programación Python. Pero bue, peor es nada y quizás alguien tome esto y se le ocurra algo más simple.

Necesitamos:
  • El interprete de Python3 junto con la librería Flask
  • El archivo B2368_V100R001C00SPC085T.bin
  • Un dominio que apunte a una dirección local de la red.
  • Saber utilizar la herramienta “Inspeccionar elemento” de Chrome.
Método

Revisando el archivo del firmware con algunas herramientas de ingeniería inversa especificas para firmwares solo logre descubrir que el backend del router esta bastante bien protegido a este tipo de ataques, pero el frontend es otra historia.

Resulta que el mandril que diseño el frontend del router no realiza validaciones a la hora de enviar el formulario de la sección “Actualización en línea” por lo que podemos iniciar el proceso de actualización desde esta sección utilizando un servidor web propio. Para esto, podemos hacer click derecho en el ‘text box’ de la URL del servidor, activar la herramienta ‘Inspeccionar elemento’ (Efectivamente, Inspeccionar elemento, así de mal hecha es está wea) y quitar el atributo ‘disabled’ o simplemente cambiando el texto del atributo ‘value’ por un dominio que nosotros controlemos.

Lo que coloquemos en el campo DEBE SER UN DOMINIO, ya que, si bien el frontend no realiza ninguna validación, si lo hace el backend (a través de expresiones regulares) por lo que no podemos utilizar directamente una dirección IP local.

En mi caso utilicé el servicio gratuito y de pana https://www.duckdns.org/ el cual nos permite configurar un subdominio a cualquier dirección, como, por ejemplo:

dns.PNG


En mi red, 192.168.1.50 corresponde a una raspberry.

Con esto, yo ingrese ‘http://fwup.duckdns.org/cpe_and_common/v2/Check.action?latest=true’ en el atributo ‘value’ del ‘text-box’, por lo que ahora, debemos engañar tanto al frontend como al backend que somos un servidor de actualizaciones genuino.

Sin animo de entrar en detalle sobre el proceso de actualización, podemos resumirlo a través de tres peticiones HTTP al servidor de actualizaciones.
  • POST /cpe_and_common/v2/Check.action
El router consulta si existe alguna actualización disponible y espera un resultado JSON con el campo {‘status’: 0} (status=1 significa que no hay actualización)
  • GET /FW/full/filelist.xml
El router solicita la lista de archivos disponibles para la actualización y espera una respuesta XML con información sobre los archivos necesarios para realizar la actualización.
  • GET /FW/full/B2368_V100R001C00SPC085T.bin
El router descarga el archivo de actualización indicado en ‘filelist.xml’, para luego intentar instalarlo.

Para lograr engañar al router, utilizaremos un servidor web simple escrito en Python con la librería Flask, el cual esta adjunto como ‘fwupapi.py’ y escuchara en la dirección a la que apunta el registro DNS en el puerto 80.

Debemos dejar el archivo B2368_V100R001C00SPC085T.bin en la misma carpeta del script y ejecutar el script para iniciar el servidor.

Luego presionamos el botón ‘Verificar ahora’ en el frontend y si todo está correcto debería preguntar si desea o no instalar la actualización.

Una vez terminado el proceso deberían poder acceder al menú ‘Actualizacion local’ e instalar el otro archivo ‘B2368-Modem_V100R001C00SPC085T.bin’ del thread anterior.

Con esto el router ya debería estar desbloqueado. No tengo fotos del proceso, ya que actualmente el único router que tengo se encuentra desbloqueado.

Si bien el método es complejo, demuestra que es posible realizar la actualización incluso si ya se encontraba bloqueada la opción ‘Actualización local’.

Saludos.
 

Archivo adjunto

  • fwupapi.py.txt
    2,9 KB · Visitas: 1.380
Última modificación:

miguel124

Miembro Activo
Se incorporó
13 Junio 2020
Mensajes
2
Muchas gracias.
no sé prácticamente nada de lo que mencionas jajaja, estoy probando si es que me sale, pero al verificar me aparece "falla de red", he intentado varias veces,
solo me queda esperar.
Pero de todas maneras MUCHAS GRACIAS TE PASASTE!!!
 
Upvote 0

Da3s

Da3sGamingLaptops (Ex Zhotta)
Se incorporó
27 Septiembre 2015
Mensajes
173
Gracias por el procedimiento. Esto no sirve si por ejemplo se levanta una página y que cualquiera pueda acceder? Lo digo ya que leí y algo entendí jaja pero creo esta fuera de mis posibilidades. Aun así intentaré

Si alguno cacha sería genial que haga su video con el procedimiento. Así los que no tenemos ni idea podamos intentarlo con una guía visual. Y tener Internet en el campito jajjajaj

Enviado desde mi BLA-L29 mediante Tapatalk
 
Upvote 0

camillus

Miembro Activo
Se incorporó
4 Julio 2020
Mensajes
13
Mis conocimientos control+C y Control+V serán insuficientes, pero estamos muy agradecidos! :idolo
 
Upvote 0

Richard.rm

Miembro Activo
Se incorporó
31 Marzo 2020
Mensajes
23
Para hacer esto se necesita el chip original del plan para que se pueda conectar a la red?
Gracias por la guía, es un gran aporte !!
 
Upvote 0

Kinetic

Miembro Activo
Se incorporó
10 Julio 2020
Mensajes
7
Hola,
Muchas gracias por esta gran información.
Consulta, es posible que nos podamos comunicar para hacer el desbloqueo?
 
Upvote 0

MELERIX

Fanático
Se incorporó
30 Diciembre 2013
Mensajes
1.486
Para hacer esto se necesita el chip original del plan para que se pueda conectar a la red?
Gracias por la guía, es un gran aporte !!

si se hace localmente supongo que no, por ejemplo con localhost, aunque no se si el backend aceptara localhost como dominio.
 
Upvote 0

capgadsx

Miembro Activo
Se incorporó
16 Julio 2020
Mensajes
10
si se hace localmente supongo que no, por ejemplo con localhost, aunque no se si el backend aceptara localhost como dominio.

No recuerdo muy bien la regex que utiliza para verificar el dominio, pero de todas formas, si utilizas localhost apuntara al router mismo y no a la dirección que esta haciéndose pasar por el servidor de actualizaciones.
 
Upvote 0

Kayxerz10

Miembro Activo
Se incorporó
17 Julio 2020
Mensajes
16
Se podría por así decirlo que alguien monte el host y todo y el resto de personas sin conocimientos solo deba modificar el "inspeccionar elemento" y colocar el dominio en cuestión para solo darle a "comprobar"?
 
Upvote 0

capgadsx

Miembro Activo
Se incorporó
16 Julio 2020
Mensajes
10
Se podría por así decirlo que alguien monte el host y todo y el resto de personas sin conocimientos solo deba modificar el "inspeccionar elemento" y colocar el dominio en cuestión para solo darle a "comprobar"?

Jkajsd, ahora que lo mencionas, no se me había ocurrido levantan un server publico. Tendría que revisar durante el fin de semana si puedo levantar algo utilizando una lambda en aws o algo por el estilo para que alguien lo pruebe.

Ahora si alguien más quiere intentar levantar algo antes, bienvenido sea.
 
Upvote 0

Da3s

Da3sGamingLaptops (Ex Zhotta)
Se incorporó
27 Septiembre 2015
Mensajes
173
Jkajsd, ahora que lo mencionas, no se me había ocurrido levantan un server publico. Tendría que revisar durante el fin de semana si puedo levantar algo utilizando una lambda en aws o algo por el estilo para que alguien lo pruebe.

Ahora si alguien más quiere intentar levantar algo antes, bienvenido sea.
Jajaj a esto me refería en mi comentario. Para quien cacha del tema y pueda hacerlo. Sería espectacular

Enviado desde mi BLA-L29 mediante Tapatalk
 
Upvote 0

TomaHawk45

Miembro Activo
Se incorporó
17 Julio 2020
Mensajes
4
Hola, no hay alguna forma de indicar un dominio sin conexión a internet? Ya que el firmware te bloquea bandas y no tengo banda 42 en donde vivo. Intenté hacer bridge con otro router y no logré hacer que se conectara.

También teóricamente no funcionaria hacer un sitio web en algo como pythonanywhere.com y montar el server así para los que quieren un dominio público? Saludos.
 
Upvote 0

Kayxerz10

Miembro Activo
Se incorporó
17 Julio 2020
Mensajes
16
Jkajsd, ahora que lo mencionas, no se me había ocurrido levantan un server publico. Tendría que revisar durante el fin de semana si puedo levantar algo utilizando una lambda en aws o algo por el estilo.

Loco si lo logras serás mi idolo (aunque tengo 3 antenas desbloqueadas a mano, me vendrá bien para un futuro)
 
Upvote 0

Kinetic

Miembro Activo
Se incorporó
10 Julio 2020
Mensajes
7
Jkajsd, ahora que lo mencionas, no se me había ocurrido levantan un server publico. Tendría que revisar durante el fin de semana si puedo levantar algo utilizando una lambda en aws o algo por el estilo para que alguien lo pruebe.

Ahora si alguien más quiere intentar levantar algo antes, bienvenido sea.

Sería genial viejo, yo tengo 2 b2368 bloqueados para poder hacer la prueba
 
Upvote 0

edward_z11

Miembro Activo
Se incorporó
11 Enero 2020
Mensajes
5
si alguien logra hacerlo que haga un video tutorial para los que no conocen del tema como yo por favor
 
Upvote 0

wifiman

Miembro Activo
Se incorporó
2 Julio 2020
Mensajes
10
Hola amigos, es necesario tener el ODU con el plan hogar banda 42 o puedo actualizar con el wifi de la casa??
 
Upvote 0

Hdj

Miembro Activo
Se incorporó
16 Julio 2020
Mensajes
19
Hola quién tiene el router con el chip hogar? Osea tal cual viene
 
Upvote 0
Subir