Recibí una invitación para asistir a un evento de ciberseguridad ofrecido por un proveedor de networking, impartiéndose unos días antes del inicio de verano. Este fue su primer evento en el ámbito de la seguridad informática acogiendo a fabricantes conocidos del sector. Entre ellos destacaba una persona experta en este mundo, un hacker, mencionado numerosas veces en este maligno blog y que además es coautor de un libro que si, mi navegador no me engaña, todavía puede localizarse fácilmente en el córner izquierdo superior de esta página: Hacking Web Technologies. Él es Amador Aparicio (@amadapa).
Cuando me percaté que se pronunciaba en la agenda dando no una, sino dos charlas: Hacking Web Technologies Old School y From hacking IT to Hacking OT: Jungla 4.0 no dudé en enviar mi OK de asistencia al evento.
El día del evento
Se celebró en Barcelona en el Café de la Pedrera. Antes del comienzo fue fácil localizarle, su camiseta de Rammstein fue lo primero que me llamó la atención - ya somos dos fans : ) -. Me acerqué para saludar, y me recibió estupendamente. No tengáis miedo de acercaros a un hacker, no muerden, son buenos y muy humanos, cómo todo… si se va con buena conducta y respeto ¿Qué razón habría de obtener un desprecio? A todo esto salió un recuerdo fotográfico que os dejo por aquí para que pongáis cara a Amador - con su camiseta de Rammstein -.
Pero no quería hablar de la parte social de este evento, sino del contenido y de lo que inspiraron en mi posteriormente, que me animé a hacer un poco de Hacking con Buscadores usando Shodan.
Las charlas y Shodan
Asistir a un evento de manera presencial, es como asistir a un concierto de un grupo en directo, tanto los errores como las improvisaciones ganan un valor especial, por más que sea repetida “la función” en cada lugar, siempre es distinto.
Nos cautivó a todos con sus habilidades de Hacking Web Technologies, a mí en particular la facilidad de “orquestrar” Shodan a su estilo “old school” ¿Cómo puedo hacerlo con un portátil de gama baja-media y una conexión a Internet? Ese es uno de los objetivos, usando herramientas al alcance de todos a precios rentables.
Las demos que nos brindó eran “live”, es decir, búsqueda de dispositivos de red públicos (y reportados) que aun sabiéndose de ello, parecía no importarles a los propietarios, “muchos prefirieron dejar la puerta abierta o no arreglarla”…
Yo también quiero hacer Hacking Web Technologies
Se me grabaron en la memoria no volátil de mi cabeza esas búsquedas de escasos caracteres que hizo en Shodan, y el impulso motivador para adentrarme en este tipo de buscador fue un “flash” sobre la vulnerabilidad que descubrí en la cámara 360Fly, una vez alcanzado su web server.
En la Figura 3, vemos cómo se repite la palabra “resource” tanto en título, la URL y hasta en el Body de la página. Era suficiente munición”para activar a Shodan en búsqueda de… ¿cámaras 360Fly públicas? No pareció encontrar ninguna al descubierto pero en la red de pesca lanzada había alguna otra cosa.
Un portal nos paraba los pies pidiendo credenciales, se lee Tautulli ¿De qué se tratará? Por la información de las cabeceras HTTP, vemos que el servidor indica: CherryPy/5.1.0. Sigamos más su rastro…
El papel que ejerce Tautulli
Al parecer, según su página web oficial es una aplicación de terceros para monitorizar un servidor multimedia Plex y la palabra Tautulli, viene del idioma Inuktitut. Lo siento, pero parece que Google Translate no lo tiene en su lista de lenguas disponibles.
La sección de descarga de la web nos lleva a su GitHub. Los avances de versionado son frecuentes, pero no parecen hacer lo mismo con todos sus componentes. CherryPy es el servidor web usado, un framework web minimalista escrito en Python. Su “changelog” de versionado también es frecuente.
Y la pregunta que se me vino… ¿cuál es la versión de CherryPy usado en Tautulli? Podríamos viajar al pasado con “la máquina del tiempo” pero en este caso es más práctico usar el propio histórico de GitHub que guarda los cambios cómo trofeos en vitrina” Y la deducción extraída la plasmamos en forma de tabla, que así se verá con mayor claridad.
Para sacar estas deducciones, nos centramos en el fichero wsgiserver2.py donde refleja los cambios de versionado de CherryPy. En Figura 6, a la izquierda, se muestra quién realizó, y las veces del cambio de este fichero. A la derecha, y de manera encadenada, se obtiene el rango deducido por las fechas de wsgiserver2.py y la correlación del changelog de Tautulli. La versión de CherryPy que abarca más versiones en Tautulli es la 5.1.0 abarcando versión v1.3.16 (2016-05-01) en adelante (por el momento, la 2.1.14).
Como nota curiosa para bordar algo más el rastro, también podemos ver, que Tautulli antes se llamaba PlexPy y que su creador principal fue drzoidberg33 en lugar de ser JonnyWong16.
Tautulli al descubierto
El dato del servidor CherryPy usado es clave para buscar versiones actuales y las que datan del año 2016 (incluyendo las de PlexPy). El momento antes de poner el string CherryPy/5.1.0 en Shodan lo describiría con un sentimiento similar al que uno podía tener cuando abrías uno de esos huevos sorpresa,… ¿quñe saldrá...?
Entrando en puerto 8181 y al /home en URL sin… ¿usuario ni contraseña? Pues mirad por dónde que ya tenemos la receta para acceder a los Tautulli’s/PlexPy’s expuestos de todo el mundo, eso sí, gracias a Shodan. A priori obtenemos interesante información, cómo:
La avaricia rompe el saco que dicen, pues vamos a ver si podemos romperlo. Cómo hackers intentamos "romper” con la finalidad de que sea reparado/subsanado, notificar algo sin llegar al punto de aprovechar la brecha que un “Bad Guy” podría llegar a hacer. En este contexto, el hecho de romper es para fortalecer, es cómo si vemos a alguien que se le cae algo por el camino y le avisamos para devolvérselo, no nos lo quedamos y nos vamos - para entendernos -, ¡por supuesto!
Echando un ojo a la videoteca
Pica la curiosidad por saber la arquitectura de esa parte. Nos dirigimos a Libraries y entre las distintas categorías que tiene el usuario, decidimos escoger una película de Ace Ventura. Clic para verla en Plex, por lo que pone en la miniatura, pero algo no va a ir bien en ese punto.
Ohh!... parece que a priori necesitamos las credenciales de Plex. Parece que esa zona es robusta, pero visto todo esto tal vez encontremos otra forma. Vamos a seguir viendo el portal.
No rompas la puerta, la llave esta debajo del felpudo
Otra pieza clave es el valor del Token que encontramos dentro del menú Settings, pues se trata de un master Token generado por un Plex Media Server del usuario que ha tenido que configurarlo en esta zona de la configuración para que pueda funcionar Tautulli con el software de Plex.
Tautulli se alimenta de Plex Media Server (PMS) mediante accesos que realiza con este Token para poder construir una información clara de “tracking” de los movimientos que se realizan del contenido multimedia albergado en PMS.
Y más preguntas que surgieron… ¿qué privilegios nos da este Token? Google nos dijo que puede ser usado de la siguiente forma, según el soporte oficial de Plex, pasando el valor X-Plex-Token cómo parámetro en URL para obtener peticiones bajo XML.
En la documentación se explica que para obtener el Token hace falta un usuario y password de Plex. Nosotros no tenemos las credenciales, pero no las necesitamos porque tenemos ya el Token que nos “regala” Tautulli. No le haremos el feo y hacemos un “unboxing” del mismo. Usaremos:
Esto parece una estructura de carpetas ¿verdad? Pero en un entorno más propio de un “cmd style” que no de uno en modo GUI. Vamos a ver, como reto, si somos capaces de llegar a esa película de Ace Ventura y ver su estructura desde otra perspectiva, ahora que tenemos el Master Token de Plex.
En Figura 12 nos sitúa en el directorio “root”. En Figura 13 nos encontramos dentro de /library ya que saltamos hasta dicho directorio, después a sections (/library/sections) y así sucesivamente, navegando en subcarpetas hasta llegar a la info deseada - siempre indicando el valor de X-Plex-Token cómo autorizador de las consultas en URI -. La interpretación de su XML es bastante intuitiva y te hace saber el tipo de “pavimento que pisas” en todo momento.
Las carpetas se distinguen con el nombre Directory, estos también llevan atributos. Los directorios tienen atributos con nombre key y el valor de éstos son los aceptados en URL. Con lo que, para saltar de directorio (o carpeta) en directorio, usaremos el contenido de las key. Pero espera, esta key parece contener una extensión de fichero, un .mp4. ¿Será otro directorio?
Nota: Puede usarse el atributo title (o el de type) como referencia para tener una idea del contenido, ya que el valor de una key no siempre será igual al valor del atributo title y no contendrá información deducible sobre su contenido.
[Continúa en la segunda parte]
Autor: Gerard Fuguet (@GerardFuguet)
Figura 1: Shodan es de cine: Hacking Tautulli, un GUI para Plex Media Server (Parte 1 de 2) |
Cuando me percaté que se pronunciaba en la agenda dando no una, sino dos charlas: Hacking Web Technologies Old School y From hacking IT to Hacking OT: Jungla 4.0 no dudé en enviar mi OK de asistencia al evento.
El día del evento
Se celebró en Barcelona en el Café de la Pedrera. Antes del comienzo fue fácil localizarle, su camiseta de Rammstein fue lo primero que me llamó la atención - ya somos dos fans : ) -. Me acerqué para saludar, y me recibió estupendamente. No tengáis miedo de acercaros a un hacker, no muerden, son buenos y muy humanos, cómo todo… si se va con buena conducta y respeto ¿Qué razón habría de obtener un desprecio? A todo esto salió un recuerdo fotográfico que os dejo por aquí para que pongáis cara a Amador - con su camiseta de Rammstein -.
Figura 2: Amador y yo en el evento |
Pero no quería hablar de la parte social de este evento, sino del contenido y de lo que inspiraron en mi posteriormente, que me animé a hacer un poco de Hacking con Buscadores usando Shodan.
Las charlas y Shodan
Asistir a un evento de manera presencial, es como asistir a un concierto de un grupo en directo, tanto los errores como las improvisaciones ganan un valor especial, por más que sea repetida “la función” en cada lugar, siempre es distinto.
Nos cautivó a todos con sus habilidades de Hacking Web Technologies, a mí en particular la facilidad de “orquestrar” Shodan a su estilo “old school” ¿Cómo puedo hacerlo con un portátil de gama baja-media y una conexión a Internet? Ese es uno de los objetivos, usando herramientas al alcance de todos a precios rentables.
Las demos que nos brindó eran “live”, es decir, búsqueda de dispositivos de red públicos (y reportados) que aun sabiéndose de ello, parecía no importarles a los propietarios, “muchos prefirieron dejar la puerta abierta o no arreglarla”…
Yo también quiero hacer Hacking Web Technologies
Se me grabaron en la memoria no volátil de mi cabeza esas búsquedas de escasos caracteres que hizo en Shodan, y el impulso motivador para adentrarme en este tipo de buscador fue un “flash” sobre la vulnerabilidad que descubrí en la cámara 360Fly, una vez alcanzado su web server.
Figura 3: Web Server de la 360Fly. Cadena de caracteres a buscar en Shodan |
En la Figura 3, vemos cómo se repite la palabra “resource” tanto en título, la URL y hasta en el Body de la página. Era suficiente munición”para activar a Shodan en búsqueda de… ¿cámaras 360Fly públicas? No pareció encontrar ninguna al descubierto pero en la red de pesca lanzada había alguna otra cosa.
Figura 4: Búsqueda en Shodan y resultado del servicio |
Un portal nos paraba los pies pidiendo credenciales, se lee Tautulli ¿De qué se tratará? Por la información de las cabeceras HTTP, vemos que el servidor indica: CherryPy/5.1.0. Sigamos más su rastro…
El papel que ejerce Tautulli
Al parecer, según su página web oficial es una aplicación de terceros para monitorizar un servidor multimedia Plex y la palabra Tautulli, viene del idioma Inuktitut. Lo siento, pero parece que Google Translate no lo tiene en su lista de lenguas disponibles.
La sección de descarga de la web nos lleva a su GitHub. Los avances de versionado son frecuentes, pero no parecen hacer lo mismo con todos sus componentes. CherryPy es el servidor web usado, un framework web minimalista escrito en Python. Su “changelog” de versionado también es frecuente.
Figura 5: Parte del Historial de versiones a día de hoy de CherryPy |
Y la pregunta que se me vino… ¿cuál es la versión de CherryPy usado en Tautulli? Podríamos viajar al pasado con “la máquina del tiempo” pero en este caso es más práctico usar el propio histórico de GitHub que guarda los cambios cómo trofeos en vitrina” Y la deducción extraída la plasmamos en forma de tabla, que así se verá con mayor claridad.
Figura 6: Tabla de historial de cambios CherryPy en Tautulli |
Para sacar estas deducciones, nos centramos en el fichero wsgiserver2.py donde refleja los cambios de versionado de CherryPy. En Figura 6, a la izquierda, se muestra quién realizó, y las veces del cambio de este fichero. A la derecha, y de manera encadenada, se obtiene el rango deducido por las fechas de wsgiserver2.py y la correlación del changelog de Tautulli. La versión de CherryPy que abarca más versiones en Tautulli es la 5.1.0 abarcando versión v1.3.16 (2016-05-01) en adelante (por el momento, la 2.1.14).
Como nota curiosa para bordar algo más el rastro, también podemos ver, que Tautulli antes se llamaba PlexPy y que su creador principal fue drzoidberg33 en lugar de ser JonnyWong16.
Tautulli al descubierto
El dato del servidor CherryPy usado es clave para buscar versiones actuales y las que datan del año 2016 (incluyendo las de PlexPy). El momento antes de poner el string CherryPy/5.1.0 en Shodan lo describiría con un sentimiento similar al que uno podía tener cuando abrías uno de esos huevos sorpresa,… ¿quñe saldrá...?
Figura 7: Portal principal de un Tautulli desprotegido |
Entrando en puerto 8181 y al /home en URL sin… ¿usuario ni contraseña? Pues mirad por dónde que ya tenemos la receta para acceder a los Tautulli’s/PlexPy’s expuestos de todo el mundo, eso sí, gracias a Shodan. A priori obtenemos interesante información, cómo:
- Películas más vistas.
- Películas más populares.
- Los programas de TV más vistos.
- Los programas de televisión más populares.
- Visto recientemente.
- Usuarios más activos.
- La barra de estadísticas...
- Y... ¡Lo que se está viendo ahora!
Figura 8: Gráficas de estadísticas en Tautullli |
La avaricia rompe el saco que dicen, pues vamos a ver si podemos romperlo. Cómo hackers intentamos "romper” con la finalidad de que sea reparado/subsanado, notificar algo sin llegar al punto de aprovechar la brecha que un “Bad Guy” podría llegar a hacer. En este contexto, el hecho de romper es para fortalecer, es cómo si vemos a alguien que se le cae algo por el camino y le avisamos para devolvérselo, no nos lo quedamos y nos vamos - para entendernos -, ¡por supuesto!
Echando un ojo a la videoteca
Pica la curiosidad por saber la arquitectura de esa parte. Nos dirigimos a Libraries y entre las distintas categorías que tiene el usuario, decidimos escoger una película de Ace Ventura. Clic para verla en Plex, por lo que pone en la miniatura, pero algo no va a ir bien en ese punto.
Figura 9: Abriendo un streaming |
Ohh!... parece que a priori necesitamos las credenciales de Plex. Parece que esa zona es robusta, pero visto todo esto tal vez encontremos otra forma. Vamos a seguir viendo el portal.
No rompas la puerta, la llave esta debajo del felpudo
Otra pieza clave es el valor del Token que encontramos dentro del menú Settings, pues se trata de un master Token generado por un Plex Media Server del usuario que ha tenido que configurarlo en esta zona de la configuración para que pueda funcionar Tautulli con el software de Plex.
Figura 10: Master Token de Plex |
Tautulli se alimenta de Plex Media Server (PMS) mediante accesos que realiza con este Token para poder construir una información clara de “tracking” de los movimientos que se realizan del contenido multimedia albergado en PMS.
Y más preguntas que surgieron… ¿qué privilegios nos da este Token? Google nos dijo que puede ser usado de la siguiente forma, según el soporte oficial de Plex, pasando el valor X-Plex-Token cómo parámetro en URL para obtener peticiones bajo XML.
Figura 11: X-Plex-Token en la dirección URL |
En la documentación se explica que para obtener el Token hace falta un usuario y password de Plex. Nosotros no tenemos las credenciales, pero no las necesitamos porque tenemos ya el Token que nos “regala” Tautulli. No le haremos el feo y hacemos un “unboxing” del mismo. Usaremos:
http://IP:32400/?X-Plex-Token=YOURTOKENVALUEHEREEn puerto 32400 que es el estándar usado por Plex.
Figura 12: Estructura XML del Servidor Plex |
Esto parece una estructura de carpetas ¿verdad? Pero en un entorno más propio de un “cmd style” que no de uno en modo GUI. Vamos a ver, como reto, si somos capaces de llegar a esa película de Ace Ventura y ver su estructura desde otra perspectiva, ahora que tenemos el Master Token de Plex.
Figura 13: Navegación en estructura de carpetas bajo XML |
En Figura 12 nos sitúa en el directorio “root”. En Figura 13 nos encontramos dentro de /library ya que saltamos hasta dicho directorio, después a sections (/library/sections) y así sucesivamente, navegando en subcarpetas hasta llegar a la info deseada - siempre indicando el valor de X-Plex-Token cómo autorizador de las consultas en URI -. La interpretación de su XML es bastante intuitiva y te hace saber el tipo de “pavimento que pisas” en todo momento.
Las carpetas se distinguen con el nombre Directory, estos también llevan atributos. Los directorios tienen atributos con nombre key y el valor de éstos son los aceptados en URL. Con lo que, para saltar de directorio (o carpeta) en directorio, usaremos el contenido de las key. Pero espera, esta key parece contener una extensión de fichero, un .mp4. ¿Será otro directorio?
Figura 14: La key de la película |
Nota: Puede usarse el atributo title (o el de type) como referencia para tener una idea del contenido, ya que el valor de una key no siempre será igual al valor del atributo title y no contendrá información deducible sobre su contenido.
[Continúa en la segunda parte]
Autor: Gerard Fuguet (@GerardFuguet)
Hola Gerard,
ResponderEliminaryo uso Tautulli/PlexPy hace tiempo y no me sucede lo que comentas. Si he entendido bien, ¿simplemente accediendo por http://tuip:8181/home entrarías al panel de administración de todos "los Tautulli’s/PlexPy’s expuestos de todo el mundo"? Si yo entro a mi servidor por xxx:8181/home, se me redirige a la página de login.
Creo que por defecto Tautulli no activa el login con usuario/contraseña, pero en los ajustes cuesta un segundo activar basic auth o un web login (que no sé que usa por debajo exactamente).
¡Un saludo!
Muy buenas Emerge;
ResponderEliminarAgradecerte en primera instancia tu tiempo dedicado por leer la primera parte del artículo :)
El acceso a /home funciona solo para aquellos que no tienen puesta la autenticación (modo “free4all”, comodísimo… pero muy inseguro). Así pues, la combinación del string del server web que usa (CherryPy/5.1.0) y /home en Shodan, te ubicará los tautulli’s/PlexPy’s desprotegidos (todos los /home que veas en Shodan, no requieren de autenticación).
Exacto, cuesta “0” pero cuesta… (No todos son como tú). En fin, no te digo más, que no quiero hacerte un spoiler de la segunda parte jeje :P
Un saludo y recuerda… ser bueno, ser hacker!
Vale, entendido :). Al leerlo de primeras me asusté pensando que podía tener problemas con mi instalación. Aunque que usen un CherryPy de hace unos años tampoco tranquiliza :D.
ResponderEliminarLa verdad es que sí, costaba bien poco que fuera obligatorio el login.
Me espero a la segunda parte. ¡Gracias!
Interesante publicación,
ResponderEliminarMe recuerda a cuando hice un pequeño bot de Shodan:
https://github.com/rubenleon/Bot-Telegram-Shodan
Un saludo.
Quiero aprender. Que me recomiendan. 🤔
ResponderEliminarEntonces cómo habría que hacer para protegerse?
ResponderEliminarMuy buenas Noob;
ResponderEliminarSi has leído la segunda parte del artículo, en la figura 18 (donde notifico al usuario), le sugiero que utilice autenticación -un usuario y una contraseña-, renovar el token (porque alguien lo puede estar usando ya) y/o bien que cierre la comunicación al exterior (realmente, ¿Lo necesita?). Básicamente unos mínimos, unos “Best Practices”.
¿Sabes lo que me ayuda mucho ante situaciones como las que te planteas? Hago uso de situaciones/experiencias que ya sé/conozco o me han pasado en la vida cotidiana.
¿Cómo uno se protege de la lluvia? Utilizando un paraguas. ¿Pero cómo sabes que va a llover? Bien, puedes mirar hacia el cielo antes de salir de casa, si notas que hay cúmulo de nubes en un tono color agrisado… es probable que llueva (pero no es seguro), tomas la precaución de cogerlo. Puedes también, llevártelo porque a pesar de que no hay indicios de nubarrones, la predicción meteorológica afirma con cierta contundencia de que así será (¡pero puede que no!). Muchas veces, no lo vas a coger -si el clima tiende siempre a ser soleado-, pero te aseguro que si eres de esos, algún día la lluvia te pillará… ;) Yo siempre llevo uno en la mochila.
Y recuerda… ser bueno, ser hacker!