BBLABS v2BBLABSv2
>Inicio>Labs
>New labs

Últimos 3 labs

Cargando…

Ver todos los labs →
>Creators>Ranking
>Aprender

Aprender bug bounty

AcademyGuías, cheatsheets y diccionarioVulnerabilidadesXSS, SQLi, IDOR, SSRF y másHunter RoadmapTu ruta de bug bounty paso a pasoBlogGuías y noticias de bug bounty
>Empresa>Precios
EN
AccederAcceder
>Inicio>Labs>New labs>Creators>Ranking>Aprender>Empresa>Precios
EN
Iniciar SesiónCrear Cuenta
  1. Inicio
  2. Labs
  3. Escritura sin autorización en el endpoint de settings de un plugin de page-builder
MediaVDP55 min

Escritura sin autorización en el endpoint de settings de un plugin de page-builder

Por @gorka

Un endpoint del plugin Blocks valida la entrada pero no comprueba autorización: úsalo para flipear un flag de diagnóstico y desredactar un secreto de la organización.

138 visitas2 completadosActualizado ago 2026
Iniciar sesión para empezar

Aprende a encontrar este bug

Un reporte 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.

650

hunters entrenando

50

labs de reportes reales

380

completaciones

$200.000

en bounties practicados

40 flags capturadas esta semana
Crear cuenta
Ya tengo cuenta

Acceso a todos los labs · sin permanencia · cancela cuando quieras

Hunters que lo han resuelto· 2

alndrwla1
@alndrwlaHace 18 horas
w4tchw0lf2
@w4tchw0lfHace 5 días

Objetivos

1
Descubrir los dos endpoints del plugin Blocks leyendo el bundle JS público de la consola.
2
Comparar el contraste 401 vs 200 entre rutas hermanas admin y el endpoint de settings.
3
Confirmar que la escritura de settings persiste sin cookie ni token alguno.
4
Identificar en el export de soporte qué flag de diagnóstico controla la redacción de secretos.
5
Flipear ese flag mediante la escritura sin autorización del plugin.
6
Extraer el service_token en claro (la flag) tras desactivar la redacción.
7
Descartar los 4 decoys por razonamiento acotado en vez de fuerza bruta.

Información

Plataforma
HackerOne
Dificultad
Media
Duración
55 min
Bounty
VDP
Completados
2
Creador
gorka@gorka
Actualizado
ago 2026

Descarga el entorno

Reprodúcelo y encuentra el bug tú mismo

Crear cuenta

Herramientas

curlNavegadorDevToolsjq

Prerequisitos

  • HTTP y APIs REST
  • Autenticación web básica
  • Lectura de JS de cliente

Tags

BACAPI AbuseInformation Disclosure

Logro que recibirás

Cuando resuelvas este lab desbloqueas este logro compartible

BBLABS.ESLab Resuelto
MediaVDP
// achievement_unlocked

Escritura sin autorización en el endpoint de settings de un plugin de page-builder

BACAPI AbuseInformation Disclosure
ago 2026
gorka
solved_by@gorkaMiembro desde mar 2026
bblabs.es// real bug bounty practice

Writeups de la comunidad

Contenido del lab

Escenario

Panelia es una SaaS low-code de construcción de páginas: sus clientes montan landings y storefronts arrastrando bloques sin escribir código, sobre un motor de widgets interno llamado Blocks (/api/blocks/v1/). Blocks expone una consola de administración en /admin donde el operador activa o desactiva widgets, configura integraciones y ajusta los settings del sitio. El storefront público de demostración está construido enteramente con Blocks.

Eres pentester contra el sitio público de Panelia. Tu misión: demostrar que el plugin Blocks tiene un hueco de autorización en alguno de sus endpoints REST, y usarlo para llegar hasta el service_token de la organización — un secreto que la propia plataforma protege detrás de un export de soporte redactado por defecto.

Qué tienes

  • Cuenta demo de la consola: attacker@panelia.local / password123 — te sirve para navegar /admin y ver cómo funciona el formulario de settings, pero es una cuenta de editor de baja privilegia. No es el punto de entrada de la vulnerabilidad.
  • El storefront público de Panelia, con más de una decena de páginas construidas con widgets de Blocks (hero, pricing, testimonios, mapa embebido, etc.).
  • El bundle JavaScript de la consola, servido públicamente como cualquier SPA — nadie te lo oculta.

Guía paso a paso

  1. Recon del surface: lee el bundle público de la consola. Navega el storefront y entra a /admin (verás la pantalla de login). El JavaScript compilado de la consola se sirve en claro bajo /assets/ — es el comportamiento normal de cualquier SPA, nada está ofuscado ni requiere sesión para descargarlo. Ábrelo o pásalo por grep: contiene, literales, las URLs de los dos endpoints que el plugin Blocks expone para settings, y el whitelist de nombres de campo que la consola sabe sincronizar (el mismo conjunto que ves renderizado como formulario en la página de settings). Auto-descubrimiento puro: no adivinas ni una ruta ni un nombre de clave, los lees.

  2. Prueba la escritura sin cookie — el contraste que delata el hueco. Con las dos URLs del paso 1, golpea primero una ruta hermana de gestión (p. ej. el listado de páginas del plugin) sin ninguna cookie ni header Authorization: te da 401, como cabría esperar de cualquier API de administración. Ahora golpea el endpoint de settings del mismo namespace, también sin credencial: primero mándale JSON malformado — te devuelve 400 con un error de parseo, prueba de que el servidor procesa la entrada de verdad, no es un endpoint muerto. Luego mándale un body válido con un campo del whitelist: te devuelve 200 con una confirmación de guardado. Ninguna cookie, ningún token, y aun así el servidor te dice que ha persistido tu cambio. La validación cuidadosa (rechaza lo malformado, acepta solo claves conocidas) es real — pero validar la entrada no es lo mismo que autorizar a quien la envía, y esa disonancia es exactamente el defecto.

  3. Localiza la clave a flipear en el propio export. El plugin expone también un endpoint de exportación de soporte que devuelve la configuración combinada del sitio. Por defecto, los campos sensibles (incluido el que buscas) salen redactados con un mensaje que nombra literalmente el mecanismo: te dice qué flag de diagnóstico booleano hay que activar para que el export deje de redactar. Comprueba que esa clave exacta está dentro del whitelist que ya identificaste en el paso 1 — es escribible sin sesión por la misma vía del paso 2.

  4. Flipea el flag y confirma. Repite la escritura sin cookie del paso 2, esta vez con esa clave de diagnóstico puesta a su valor "activado". Vuelve a pedir el export de soporte: el debug_diagnostics que antes marcaba false ahora marca true, la sección de cambios recientes recoge tu escritura, y el campo que antes decía "hidden" ahora sale en claro. Ese valor crudo es el service_token de la organización — la flag.

Canales de feedback (no vuelas a ciegas)

  • El bundle público responde 200 y es legible/grep-able: confirma que las URLs y el whitelist existen tal cual los lees, sin necesidad de adivinar.
  • El contraste 401 (rutas hermanas de gestión) vs 400/200 (endpoint de settings) es inmediato y observable en cada request: te dice sin ambigüedad cuál de las dos rutas es la que no autoriza.
  • El export de soporte nombra el mecanismo en el propio mensaje de redacción — no hay que inferir qué flag activar, el servidor te lo dice.
  • Tras la escritura, releer el export es un confirmador de estado explícito: debug_diagnostics: true, el registro de cambios recientes con tu escritura, y el secreto en claro — no es un paso ciego.

Decoys (descártalos por razonamiento acotado)

  • Desactivar widgets del catálogo. Está en el mismo whitelist y romper visiblemente el render del storefront público es tentador como "impacto". Pero es puro DoS observable: tras desactivarlo, el export de soporte sigue exactamente igual de redactado. Impacto ruidoso ≠ objetivo.
  • La clave de integración de mapas. También sobreescribible sin sesión, y suena a secuestro de API key de terceros. Pero nada en el lab la consume — sobreescribirla no cambia ni el export ni ningún otro efecto observable. Dead-end honesto.
  • El login de la consola con la cuenta demo. Iniciar sesión no abre ningún camino nuevo: el editor demo no ve el service_token en ningún sitio de la consola, y el export de soporte sigue redactado exactamente igual estés logueado o no — la ruta que importa nunca pidió sesión.
  • Un campo fuera del whitelist (tipo un flag de rol/admin). El endpoint responde 200 igualmente, pero la escritura se ignora en silencio: vuelve a leer el estado y esa clave no aparece por ningún lado. Un 200 no implica que algo haya cambiado de verdad.

La falla del laboratorio

Clase: CWE-862 (Missing Authorization), con CWE-306 (Missing Authentication for Critical Function) y CWE-285 (Improper Authorization) como paraguas relacionados, más CWE-200 / CWE-1230 (Exposure of Sensitive Information a través de un export de metadatos) en la capa de escalada. OWASP A01:2021 (Broken Access Control) + A05:2021 (Security Misconfiguration).

El endpoint de escritura de settings del plugin Blocks vive en el mismo namespace de API que su familia de rutas de gestión, y comparte con ellas el mismo estilo de validación de entrada. Pero, a diferencia de sus hermanas — que sí exigen sesión de operador antes de tocar nada —, a este endpoint concreto le falta el middleware de autorización. No es una comprobación rota ni un if con la condición invertida: es la ausencia de una línea de wiring, invisible a cualquier revisión de código que busque un if sospechoso. El código de validación que sí existe (rechazar JSON malformado, aceptar solo claves de un whitelist conocido) es correcto y estricto — y esa corrección es justo lo que genera la falsa sensación de seguridad: parece protegido porque "valida", pero validar la forma de la entrada nunca sustituye a decidir quién tiene permiso de enviarla.

La escalada hacia la flag añade una segunda capa de exposición: un export de "soporte" diseñado para adjuntarse a tickets redacta sus secretos por defecto, pero la decisión de redactar o no depende de una opción de configuración booleana — y esa misma opción es escribible por el endpoint sin autorización de la capa anterior. El resultado es que un fallo de control de acceso en un endpoint de settings, aparentemente inocuo, termina exponiendo un secreto de la organización sin que el atacante necesite ninguna credencial en ningún momento de la cadena.

Lo que habría prevenido el bug es trivial de enunciar y fácil de olvidar en la práctica: montar el sub-router de settings-sync detrás del mismo middleware de autorización que ya protege a sus rutas hermanas, y tratar cualquier opción capaz de alterar el comportamiento de redacción de un export como una operación privilegiada, no como un campo de configuración más.

Lección: un control de validación de entrada robusto no es evidencia de que el endpoint esté protegido — son dos preguntas independientes ("¿la entrada tiene la forma correcta?" vs. "¿quién tiene permiso de enviarla?"), y basta con responder bien a la primera para generar una falsa sensación de seguridad sobre la segunda. Cuando una familia de rutas comparte namespace y un middleware de autorización común, el hueco casi siempre está en la ruta que quedó fuera del wiring, no en una que lo tiene y falla.

Laboratorio basado en la reproducción anonimizada (empresa ficticia Panelia) de una técnica real de bug bounty sobre un endpoint REST de settings de un plugin sin control de autorización.

Contacto

Practica, aprende y hackea

Plataforma de práctica de bug bounty con labs basados en reportes reales. Aprende hacking ético en entornos seguros.

contactar→

Síguenos

YouTube
@0xGorka
X
@gorkaelbochi
LinkedIn
gorka-el-bochi-morillo
Instagram
@_.gorkaaa.b
Email
team@bblabs.es

Accede a todos los labs desde 7,99€/mes

Nuevos labs cada semana. Cancela cuando quieras.

Crear cuenta

BBLabs es la plataforma de laboratorios de bug bounty en español donde aprender bug bounty con vulnerabilidades reales extraídas de reportes pagados en HackerOne, Bugcrowd e Intigriti. Aquí practicas hacking web —XSS, SQLi, IDOR, SSRF, CSRF y más— en entornos descargables, capturas la flag, lees el writeup y aplicas la técnica en programas activos de bug bounty.

BBLabs es la alternativa en español a HackTheBox, TryHackMe y PentesterLab para quienes quieren practicar bug bounty con reportes reales en lugar de CTFs artificiales. Desde 7,99€/mes, sin permanencia.

→ Aprender bug bounty desde cero→ Cómo hacer bug bounty paso a paso→ Reportes de bug bounty reales→ BBLabs para empresas y academiasLabsAcademyVulnerabilidadesHerramientasRanking de huntersLabs de XSSLabs de IDORLabs de SSRFLabs de CSRFHackTheBox alternativaHack4u alternativaTryHackMe alternativaPortSwigger alternativaPentesterLab alternativaBug Bounty Labs comparativaHackerOne para practicarOffSec / OSCP alternativaINE / eWPT alternativaHTB Academy alternativaDVWA alternativaJuice Shop alternativaVulnHub alternativaPentesterAcademy alternativaRoot-Me alternativaHackTheBox vs TryHackMeMejores plataformas bug bounty 2026BlogSpoilers¿Qué es el bug bounty?¿Cuánto se gana en bug bounty?OWASP Top 10 explicadoMejores webs para practicar hacking webCómo ser hacker ético desde ceroTutorial de Burp Suite en españolOSCP en español: guía y preparaciónGoogle Dorks para bug bountyCuánto gana un hacker ético en EspañaHerramientas de bug bounty 2026Mejores certificaciones de ciberseguridad 2026Burp Suite tutorialsqlmap tutorialffuf fuzzing webnuclei tutorialHTTP Request SmugglingWAF bypassPrompt injection (LLM)Google Dorks
Hecho cony código
TérminosPrivacidadComparativaEN

© 2026 BBLABS v2 — Todos los derechos reservados