BBLABSBBLABS
LaboratoriosAprender desde 0FuncionesPreciosTestimoniosDetrás de BBLABS
  1. Home
  2. Labs
  3. Escalada de cuenta gratis a Premium en una plataforma de streaming por cuatro fallos combinados
Medium45 min

Escalada de cuenta gratis a Premium en una plataforma de streaming por cuatro fallos combinados

By @gorka

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.

This hack was reported with no reward

284 views4 completedUpdated Nov 2026
Log in to start

Learn to find this bug

A real HackerOne hack, reproduced for you to practice.

Create your account and practice real bugs that got paid. Download the environment, find it and learn the exact technique — your path to your first bounty.

650

hunters training

50

labs from real hacks

380

completions

$12,000

paid out for these bugs

40 flags captured this week
Create account
I already have an account

Access to all labs · no commitment · cancel anytime

Hackers who solved it· 4

emperador1
@emperador19 days ago
benjaminnocervigni2
@benjaminnocervigni19 days ago
3nk13
@3nk122 days ago
kaneki
@kaneki23 days ago

Objectives

1
Comprobar que la cuenta demo arranca en plan gratis y el contenido Premium está bloqueado.
2
Mass assignment: subir tu plan a premium enviando un campo extra al guardar el perfil.
3
Ver que el muro de pago vive solo en el cliente: la respuesta ya trae canWatch y el stream.
4
Leer la marca de agua del Original directamente de la respuesta de la ficha del título.
5
Comprobar que el endpoint de reproducción sirve el máster sin validar el plan.
6
Explotar la race del cupón para dejar el total en 0 € y activar Premium sin pagar.
7
Capturar la flag: la marca de agua exclusiva del Original Premium.
8
Descartar los decoys (saldo del monedero, cupón de un solo uso 'legítimo').

Information

Platform
HackerOne
Difficulty
Medium
Duration
45 min
Bounty
Sin recompensa
Completed
4
Creator
gorka@gorka
Updated
Nov 2026

Download the environment

Reproduce it and find the bug yourself

Create account

Tools

curlBurp SuiteNavegador webPython

Prerequisites

  • Planes de pago en SaaS
  • HTTP y APIs REST
  • Race conditions

Tags

PrivescBusiness LogicRace ConditionInformation Disclosure

Achievement you'll earn

Solve this lab to unlock this shareable achievement

Solve this lab to unlock this shareable achievement

Community writeups

Free · no account

The checklist I run on every new target

47 checks ordered by cost: first what can get you in trouble, then the cheap stuff, and finally the expensive stuff — which is where the big bounties are. I'll send it to your inbox right now.

Unsubscribe in one click, from any email.

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)

  1. 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.

  2. 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.

  3. Vía 2 — Gating solo en el cliente. La ficha (GET /api/titles/:id) trae el veredicto canWatch y, en los Originals, el objeto stream con la marca de agua, aunque canWatch sea false. 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.

  4. 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 su watermark) sin comprobar tu plan. Una cuenta gratis lo llama directamente y obtiene el stream.

  5. 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.

  6. 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 canWatch y, en los Originals, el bloque stream — puedes ver el dato aunque el muro lo oculte.
  • Tras el mass assignment o la race, GET /api/auth/me confirma 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.

The community

This isn't a platform with users.It's people breaking the same things you are.

Inside people ask, share what they found and solve together what would block anyone on their own. It's free to join: no account, no plan, no email required.

Join the BBLABS community on Discord
Join the Discord

Free and open. You don't need a BBLABS account to join.

BBLABS LogoBBLABS

Laboratorios de hacking basados en hackeos reales. Aprende practicando sobre entornos vulnerables, con la resolución explicada paso a paso.

Producto

  • Funcionalidades
  • Precios
  • Labs
  • Aprender desde 0
  • Blog
  • Detrás de BBLABS

Legal

  • Términos
  • Privacidad
  • Cookies
  • Entrar
  • Crear cuenta

Para cualquier duda, bug, soporte o sugerencia puedes escribir a team@bblabs.es

© 2026 BBLABS. Todos los derechos reservados.