Escalada de cuenta gratis a Premium en una plataforma de streaming por cuatro fallos combinados
Una cuenta gratis alcanza el contenido Premium por cuatro vías: mass assignment del plan, muro de pago solo en cliente, endpoint de stream sin validar plan y race condition en el cupón.
Este hackeo se reportó sin recompensa
Aprende a encontrar este bug
Un hackeo real de HackerOne, reproducido para que lo practiques.
Crea tu cuenta y practica bugs reales que se pagaron. Descarga el entorno, encuéntralo y aprende la técnica exacta — tu camino a tu primer bounty.
hunters entrenando
labs de hackeos reales
completaciones
pagados por estos bugs
Acceso a todos los labs · sin permanencia · cancela cuando quieras
Hackers que lo han resuelto· 4
Objetivos
Logro que recibirás
Cuando resuelvas este lab desbloqueas este logro compartible

Writeups de la comunidad
La checklist que repaso en cada objetivo nuevo
47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.
Te das de baja en un clic, desde cualquier correo.
Contenido del lab
Escenario
Streamia es un clon de una plataforma de vídeo por streaming. El catálogo tiene títulos gratuitos y Originals exclusivos del plan Premium (4K + HDR). Cada Original lleva incrustada una marca de agua forense en su máster: esa marca es el secreto del estudio y la flag del laboratorio.
Entras con la cuenta de demostración demo@streamia.test / password123, que está en plan gratis. Tu objetivo es reproducir un Original Premium (o filtrar su marca de agua) sin pagar.
Qué tienes
- La cuenta demo en plan gratis (es tu punto de partida, no es la vulnerabilidad).
- El catálogo con fichas de título, un reproductor, tu perfil y una pasarela de pago con cupones.
Guía paso a paso (cualquiera de las 4 vías da la flag)
Recon. Abre un Original: la app te muestra un muro de pago ("necesitas Premium"). Fíjate en las peticiones que lanza la ficha del título en el proxy.
Vía 1 — Mass Assignment. Guarda tu perfil (
POST /api/account). El endpoint vuelca sobre tu usuario cualquier columna que envíes salvo unas pocas protegidas. Añade"plan":"premium"al cuerpo → tu cuenta pasa a Premium y ya puedes reproducir los Originals.Vía 2 — Gating solo en el cliente. La ficha (
GET /api/titles/:id) trae el veredictocanWatchy, en los Originals, el objetostreamcon la marca de agua, aunquecanWatchseafalse. El muro lo pinta el navegador; el dato ya viajó. Intercepta la respuesta y cambia"canWatch":false→true, o lee la marca de agua directamente del JSON.Vía 3 — API que no valida el plan. El endpoint de reproducción (
GET /api/titles/:id/hls) sirve el máster del Original (con suwatermark) sin comprobar tu plan. Una cuenta gratis lo llama directamente y obtiene el stream.Vía 4 — Race del cupón. Crea un pedido Premium y aplica el cupón de descuento muchas veces en paralelo: entre la comprobación de "cupón ya aplicado" y el registro hay una espera antifraude, así que el descuento se acumula hasta dejar el total en 0 €. Paga → Premium gratis.
Captura la flag. Por cualquiera de las 4 vías obtienes la marca de agua del Original:
FLAG{…}.
Canales de feedback (no vuelas a ciegas)
- El muro de pago te dice explícitamente que el título es Premium.
- La respuesta de la ficha muestra
canWatchy, en los Originals, el bloquestream— puedes ver el dato aunque el muro lo oculte. - Tras el mass assignment o la race,
GET /api/auth/meconfirma tu nuevo plan.
Decoys (descártalos por razonamiento)
- El monedero de la cuenta demo está a 0 €: pagar "a las buenas" no funciona; la única vía de pago gratis es la race.
- El cupón parece de un solo uso por pedido (
coupon_applied), pero la ventana TOCTOU rompe esa garantía. - La cuenta demo en gratis no es el fallo: es el estado de partida.
La falla del laboratorio
Clases: Mass Assignment (CWE-915), confianza en control de cliente (CWE-602), falta de autorización en un endpoint de contenido (CWE-284) y TOCTOU / race condition (CWE-362), todo al servicio de una escalada de privilegios de plan (CWE-269). OWASP A01:2021 (Broken Access Control) + A04:2021 (Insecure Design).
El patrón común es confiar la autorización a la capa equivocada: el plan se puede reescribir desde el perfil, el muro de pago se decide en el navegador, el máster se sirve sin re-comprobar el plan, y la unicidad del cupón no es atómica. La defensa correcta es una lista blanca explícita de campos editables, decidir el acceso en el servidor y no enviar contenido que el usuario no puede consumir, revalidar el plan en cada endpoint de contenido, y hacer la aplicación del cupón atómica e idempotente con recálculo del total con tope >= 0.
Laboratorio basado en la reproducción anonimizada (empresa ficticia Streamia) de técnicas reales de bug bounty de escalada de plan.
