Una idea de esas que nunca son buenas
Seguí mirando. Ya tenía un nuevo XSS
y no debía olvidarme del CSRF de la vez anterior. De hecho, es más
que posible que existan más problemas similares, pues es de esperar
que todas las partes de la aplicación tengan un diseño parecido.
¡Apañados vamos!
Había una página que permitía
cambiar la contraseña de acceso al router. Lo habitual: pedía una
vez la contraseña anterior y dos veces la nueva
Es bueno eso de pedir la contraseña
antigua cuando quieres poner una nueva, porque así proteges al
usuario, no sea que se despiste y alguien le pille la sesión abierta
y se le ocurra alguna travesura. Y también pones más difícil la
explotación de algunos Cross Site Request Forgery.
Bueno, claro, eso siempre y cuando no
pongas la contraseña antigua en la propia página. Y este router la
ponía en el código fuente:
¡No estarías esperando que pusiera la contraseña de mi amigo, verdad! Esta foto la tuve que retocar un poco para no fastidiarle más de la cuenta.
Cuando menos, llamativo sí que es. La
versión router del usuario que pega un postit en la pantalla con su
contraseña. Y, me pregunté... ¿para qué querrá alguien poner
eso ahí? Unas líneas que había un poco más adelante
proporcionaban la respuesta:
¡Para hacer esa comprobación! Una vez
más, la seguridad puesta en entredicho para realizar comprobaciones
del lado del cliente.
Sea como sea, eso de poner una
contraseña de acceso dentro del código JavaScript de una página,
en texto claro como el agua, no es algo que yo suela recomendar a
nadie.
La idea general
Con eso ya tenía bastante para dar el
golpe de efecto que me hacía falta para ganarme un ágape por cuenta
ajena. El guión, visto desde el punto de vista del atacante sería:
- Creo una página en un servidor
gratuito que, aprovechando la vulnerabilidad CSRF, haga que el router
registre una marca y modelo de impresora que me permita insertar
código JavaScript en la página.
- Ahora, tengo que asegurarme de la
víctima ha iniciado sesión en su router.
- Engaño a mi amigo para que visite a continuación mi página maliciosa (la anterior, la del CSRF y todo eso).
- Con eso, consigo que el código
JavaScript que escribí se ejecute.
- Dicho código Javascript carga la
página de cambio de contraseña. Analiza entonces su contenido y
extrae de él la contraseña actual y me la envía a mi servidor.
Y... ¡voila! Ya tengo la contraseña
del router de mi víctima.
Otros objetivos
Elegí la contraseña por lo llamativo
de obtener algo que debería ser secreto pero... podría haber
elegido cualquier otra cosa. La “graciosa” combinación de Cross
Site Scripting y Cross Site Request Forgery me permitía obtener
cualquier cosa de cualquiera de las páginas que ofrecía el router.
Y, mirando a ver qué tenían, me
encontré con cosas llamativas. Cosas como:
- Dirección IP interna y externa (cara
a Internet) del router
- Configuración de la WIFI
- Equipos conectados al router, con su
IP y su MAC
- Marca, modelo, revisiones del
firmware y otros detalles del hardware
Podría haber escogido cualquiera de
ellas… o todas juntas. Y, la verdad, si alguien pudiera obtener
todos estos datos de un montón de routers tendria acceso a una de
las mayores redes Wifi que conozco. A partir de la dirección IP
externa podría determinar aproximadamente la posición geográfica
de los routers. Si éstos tienen una lista blanca de MAC que pueden
conectarse, tendría algunas válidas y podría configurarlas en sus
tarjetas de red. El SSID, la passfrase y todo lo demás también lo
sabría...
Ideal para quien quiere conectarse a
Internet sin estar demasiado controlado.
Pero había mucho más:
¡En una de ellas aparecía el número de teléfono de mi amigo!
Porque resulta que el router “controla” también su teléfono.
Supongo que la pondrán ahí por si se le olvida al dueño. Igual que la contraseña.
Y podía conseguir eso sin modificar
nada en el router. Porque modificando su configuración se podría
apoderar uno de la red a la que da servicio.
No hay comentarios:
Publicar un comentario