Robar videos cerrados de YouTube, un fotograma a la vez



En diciembre de 2019, unos meses después de que comencé a piratear el programa Google VRP, dirigí mi atención a YouTube. Quería encontrar una forma de acceder a Private



videos privados ( ) que no soy de mi propiedad.



Al subir un video a YouTube, puede elegir una de las tres opciones de acceso. Abrir ( Public



) permite que cualquier persona encuentre y vea el video, Link Access ( Unlisted



) permite que solo los usuarios que conocen la ID del video (URL Private



) vean el video , el acceso restringido ( ) permite que solo usted u otras cuentas a las que se les haya otorgado permiso para ver el video video. para este permiso.



Lo primero que hice fue subir el video a mi segundo canal de prueba de YouTube y alternar las opciones de acceso del video a Private



para poder usarlo para probar. (Recuerde que las pruebas siempre deben realizarse en los recursos / cuentas que posee). Si puedo encontrar una manera de acceder al video desde la primera cuenta de prueba, identificaremos la presencia de un error.



Abrí YouTube con mi primera cuenta, verifiqué todas las funciones e hice clic en todos los botones que pude encontrar. Cada vez que veía una solicitud HTTP con una identificación de video, la reemplazaba con un video de prueba con acceso Private



, con la esperanza de que se filtrara alguna información sobre él, pero no tuvo éxito. Parece que el sitio web principal de YouTube (al menos todos sus puntos finales que he probado) siempre verifica si el video está en un estado Private



, y cuando intenta consultar el video cerrado de destino, siempre devuelve errores como This video is private!



.



Necesito encontrar otra forma.



En tal situación, una excelente solución puede ser verificar otros productos / servicios que no son nuestro objetivo principal, pero que de alguna manera interactúan internamente con sus recursos. Si tienen acceso a los recursos del sitio, existe la posibilidad de que no hayan implementado todos los niveles de protección que tiene el producto principal.



Un target interesante que cumple con estos requisitos es Google Ads. Este es un producto que los anunciantes utilizan para crear anuncios en todos los servicios de Google , incluido YouTube . Es decir, los anuncios que ve delante del video de YouTube están siendo personalizados por los anunciantes aquí en la plataforma de Google Ads.



Entonces, registré una cuenta de Google Ads y creé un nuevo anuncio que debería reproducir el video para todos los usuarios de YouTube como un anuncio que se puede omitir. Durante el proceso de creación de anuncios, también intenté usar la identificación de video cerrada de destino en todas partes, pero sin el menor éxito.



Después de crear un anuncio, comencé a explorar las diferentes funciones de Google Ads. Es un producto a muy gran escala y tiene muchas opciones y herramientas diferentes. Estaba tratando de encontrar algo relacionado con YouTube.



En la plataforma, encontré una página titulada Videos



, donde vi una lista de videos utilizados para mi publicidad. Al hacer clic en el video se abre la sección de análisis ( Analytics



) de este video. En él encontré un reproductor incorporado, estadísticas y una función interesante llamada Moments



. Permitía a los anunciantes "etiquetar" momentos específicos en un video para que pudieran ver cuándo sucedieron diferentes cosas (por ejemplo, la marca de tiempo del momento en que apareció el logotipo de la empresa). Para ser honesto, no entendí muy bien por qué los anunciantes usan esta función, pero me pareció interesante:





Al mirar los registros del proxy, noté que cada vez que "etiquetaba un momento", se POST



enviaba una solicitud al punto final /GetThumbnails



. El cuerpo de esta solicitud contenía la identificación del video:



POST /aw_video/_/rpc/VideoMomentService/GetThumbnails HTTP/1.1

Host: ads.google.com

User-Agent: Internet-Explorer-6

Cookie: []



__ar={"1":"kCTeqs1F4ME","2":"12240","3":"387719230"}






Donde en el parámetro el __ar



valor 1



era la identificación del video y el valor 2



era el momento en milisegundos. Como respuesta, se devolvió una imagen codificada en base64, que era una miniatura utilizada por la plataforma de anuncios.



Repetí lo que ya había hecho muchas veces: reemplacé el ID en la solicitud con el identificador del video cerrado de la segunda cuenta y, para mi sorpresa, ¡ recibí una imagen en base64 en respuesta !



Busqué en Google "base64 a imagen" y pegué los datos de base64 en el primer decodificador que encontré. ¡La imagen contiene una miniatura del video privado objetivo ! ¡Funcionó! Encontré un error de IDOR que funciona (Referencia de objeto directo inseguro) , gracias a la cual pude obtener un fotograma de cualquier video de YouTube con acceso limitado.



Pero pensé: "Hmm, esto es solo una oportunidad". Podemos hacerlo mejor.



Quería escribir un script de Python con una prueba de concepto que genere un "video" en movimiento real. Buscando información, me di cuenta de que si el video se grabó a 24 FPS, entonces un cuadro está en la pantalla durante 33



milisegundos. Es decir, me basta con descargar cada imagen, comenzando 0



y realizando un incremento en 33



, y luego recopilar una especie de video de todos los fotogramas recibidos.



Rápidamente escribí un POC que descarga fotogramas durante los primeros tres segundos de un video, los decodifica y luego genera un GIF. Para probar el código, lo ejecuté con mi video anterior, al que previamente había restringido el acceso porque estaba avergonzado de él:





Entonces, usando este error, un atacante puede descargar cualquier video cerrado en YouTube, lo cual, en mi opinión, es una amenaza bastante seria. Pero, por supuesto, tiene algunas limitaciones que no pude superar:



  • En la vida real, necesita conocer la identificación del video de destino. Una fuga masiva de ellos se consideraría un error en sí mismo.
  • Dado que solo recibimos imágenes, no podemos acceder al sonido.
  • La resolución es muy baja (pero es suficiente para entender lo que sucede en el video).


Se puede concluir que siempre vale la pena prestar atención a situaciones en las que dos productos diferentes tienen interacción interna entre sí, ya que los equipos de desarrollo de ambos productos conocen mejor su sistema y pueden perderse detalles importantes al trabajar con los recursos de otro producto.



Encontrar IDOR puede ser un trabajo muy monótono y meticuloso, y ahora trato de evitar simples sustituciones de ID a ciegas con la esperanza de obtener lo mejor. Si prueba el producto durante algún tiempo y comprende su estructura interna, será más efectivo (y más interesante) tratar de pensar en varias acciones inesperadas en las que los desarrolladores podrían no haber pensado, o centrarse en características implementadas recientemente, o simplemente haga algo que requiera acciones reflexivas. Puede que le resulte más agradable a largo plazo. En mi opinión, cuanto más comprenda el sistema, más ideas sobre cómo hackearlo le vienen a la mente de forma natural.



Pero incluso en los sistemas más confiables y probados a fondo, existe la posibilidad de que simplemente reemplazar el ID en la solicitud resulte en un error crítico.



Cómo se desarrolló la situación



[11 de diciembre de 2019] - Informe de



error enviado [12 de diciembre de 2019] - Triaje inicial



[20 de diciembre de 2019] - Error aceptado (P4 -> P1)



[08 de enero de 2020] - Pasos seguidos para corregir el error con un deshabilitar la función Moments







[17 de enero de 2020] - Se emite una recompensa de $ 5,000



[??? ?? 2020]: la función Moments



se activa nuevamente, ahora verifica el acceso al video.






Publicidad



VDSina ofrece VDS con pago diario, la posibilidad de crear su propia configuración de servidor en un par de clics, instalar cualquier sistema operativo. ¡Cada servidor está conectado a un canal de Internet de 500 Megabits y está protegido contra ataques DDoS de forma gratuita!



Suscríbete a nuestro chat en Telegram .






All Articles