13 febrero 2017

Vimeo y sus enlaces


Debido al uso estos días de una plataforma de formación on-line, quise dar un paseo por el código utilizado para incrustar vídeos en la misma y que eran de mi interés. Para reproducir estos vídeos se hacía uso de una conocida red social lanzada en 2004.

Esta red social es Vimeo, uno de los competidores de Youtube, aunque con un enfoque algo diferente ya que en sus principios de uso trata de fomentar la publicación de contenido más creativo y trabajado, por lo que no es tan frecuente encontrar vídeos de máquinas triturando cosas o similares.

Imagen 1 - Detalle Plan de pago
Como ya  hemos dicho, esta plataforma estaba en uso en un curso on-line que estaba realizando, por lo que podemos ver que la publicación en Vimeo está orientada en muchos casos a un uso más profesional que de ocio, por ello la Privacidad es algo importante y uno de los puntos fuertes que vende Vimeo en sus cuentas de pago.

Vamos a ver cómo es posible descargar los vídeos alojados en esta plataforma a través de los scripts generados en las páginas donde insertamos nuestros vídeos, y la manera en la que se muestran estos scripts.

He querido hacer hincapié en este punto, ya que este problema se presenta en los vídeos que son insertados y en el código que se genera para ello. No se presenta este problema en los vídeos que están directamente alojados en la plataforma o si están protegidos con contraseña, ya que hasta que no se tiene acceso a la reproducción del vídeo, éste no se puede descargar.

Algunos pueden pensar que es un problema menor, y que si ya tengo acceso al vídeo, ¿Para que quiero descargarlo?. Pues bien, vamos a poner un caso práctico en el que tenemos acceso a una plataforma de formación por tiempo limitado, de esta manera podremos bajarnos los vídeos y verlos cuando queramos o peor aún, difundirlos, con el perjuicio económico que esto puede suponer al dueño del material. Aprovechando este punto, no está de más recordar que difundir cualquier material con derechos de autor sin permiso del autor es incurrir en un delito contra la propiedad intelectual.

Con estos apuntes iniciales, vamos a ponernos en situación y detallar el proceso.

NOTA: Todas las pruebas de este artículo están realizadas con un vídeo de prueba para evitar desvelar datos de casos reales, aunque se ha comprobado que el fallo afecta a todos los vídeos comprobados, y se ha reportado a Vimeo para que se tenga en cuenta y tomen las medidas que consideren oportunas.

Imagen 2 - Configuración de vídeo para evitar descarga
He subido un vídeo de prueba donde podemos ver que se ha deshabilitado la opción “Descargar vídeo”, además de darle una contraseña para comprobar que solo cuando el vídeo está activo es posible descargarlo. Ahora el vídeo será insertado en una página HTML para probar su funcionamiento.

En este momento nos encontramos dentro de nuestra “plataforma de formación”, en la cual vemos un vídeo insertado y nos pide la contraseña configurada. Mientras no la introduzcamos no podremos ver el vídeo, lo que nos hace pensar que el sistema es seguro. Este paso no suele ser necesario, ya que por defecto la reproducción comienza solo dando a “Play”,pero aún así hemos querido probar todos los casos posibles.

Una vez insertada la contraseña, vemos que el vídeo puede interesarnos y que no tiene un botón de descargar, por lo que intentamos mirar más a fondo el código de la página, y localizamos el código del vídeo incrustado.

Por supuesto, la opción de usar páginas de descarga de vídeos se ha probado y no funciona con vídeos protegidos y además, son un nido de pop-ups y de basura, así que lo descartamos en estas pruebas.
Imagen 3 - Mensaje de protección de privacidad

Vemos que hay una URL que apunta directamente al vídeo, de manera que hacemos la primera prueba pasando esa URL a otra pestaña del navegador.

Como era de esperar no podía ser tan sencillo, lo que me hace seguir revisando el código hasta localizar una etiqueta que contiene un script, la despliego con pocas esperanzas ya que seguro que el código se encuentra ofuscado y no podremos ver nada…


Imagen 4 - Script generado por Vimeo
Nos llevamos una sorpresa al ver que no se han preocupado de ofuscar el código de ese script y que contiene muchas URL, así que vamos a probarlas, pero antes vamos a ayudarnos de http://jsbeautifier.org/ para hacer más legible el código y que nos sea más sencillo de leer.

Una vez que tenemos el script tabulado de una manera más visual, podremos recorrerlo en busca de enlaces e información que pueda ser de interés.

En primer lugar, nos llama la atención una serie de URL's que corresponden a la red de distribución de contenidos o CDN de Vimeo. Tal y como era de esperar, disponen de otra red paralela donde tienen replicados los contenidos en diferentes puntos de la red. De esta manera aceleran su entrega a los clientes, y es en estos enlaces donde encontramos el problema, puesto que no se trata la privacidad de la misma manera.

El primero de ellos nos descarga una lista de reproducción de contenidos, de ahí la extensión *.m3u8. Al tratar de reproducirla nos da una pista de los ID's de cada vídeo, pero es imposible su reproducción al no coincidir las rutas donde se ubican los archivos.

Imagen 5 - Error mostrado en la reproducción de la lista

Seguimos revisando el script, y vemos que tenemos una nueva URL, aunque esta vez contiene una extensión *.MP4 por lo que nos puede dar alguna esperanza más, siempre y cuando no hayan tenido en cuenta los controles de privacidad.


Al copiar esta URL en el navegador, nos sorprende que podemos ver el vídeo que antes nos mostraba el error de privacidad, y lo que es mejor, podemos descargarlo solamente con la opción de "Guardar vídeo como..."

Imagen 7 - Vídeo y opción de descarga del mismo

Y por último, vemos que podemos reproducir el vídeo sin ningún problema.

Imagen 9 - Reproducción del vídeo
Los parámetros de las diferentes URL's nos permiten elegir la calidad en la que descargar el vídeo.
Cada URL también contiene un token con un tiempo de vida limitado, por lo que la descarga se debe realizar en el momento que vemos el vídeo. Se encuentran un par de variables en la URL que marcan el tiempo en el que expira, y que está relacionado con el token de autenticación. Estas variables podrían ser objeto de estudio para investigar de que manera se generan los token y las URL's.

Además, revisando el script vemos que nos muestra más información que puede sernos de utilidad, como por ejemplo el tipo de cuenta y la moneda en la que se paga en esa cuenta. De manera que podamos inferir información de la empresa o persona que ha colgado el vídeo, y pensar algún tipo de ataque de ingeniería social o phishing.


Imagen 10 - Otros datos de interés en el script

No he realizado una revisión más profunda del script, ya que no era el objetivo de este artículo y lo he dejado en manos de Vimeo, habiendo notificado este error a través de su plataforma de reporte de errores por si lo consideran tan importante como para solucionarlo.

Conclusiones:

Después de realizar estas pruebas, podemos observar la importancia de intentar ocultar todo lo posible el código en una aplicación en producción para evitar esta clase de errores, ya que se trata de una práctica sencilla y puede ahorrarnos ciertos problemas, y más aún cuando proporcionamos un servicio de pago a nuestros clientes.

Tal y como se encuentra ahora la programación de la web, el siguiente paso sería la creación de un script que pueda buscar y utilizar estas URL's para descargar vídeos de Vimeo desde una web similar a las que ya existen, pudiendo incluso descargar vídeos que en principio tienen contenido protegido.

Además, a la hora de subir contenidos creo que es recomendable también por nuestra parte , preocuparnos de introducir otros factores que puedan ayudarnos a evitar la difusión no controlada de nuestro material, como pueden ser marcas de agua, metadatos, uso de esteganografía para incluir un fichero de verificación en el vídeo, etc...

Artículo por cortesía de: Héctor Alonso del Bosque  -   @hector6598