Respuesta rápida
SPAs modernas (React, Vue, Svelte) reciben flags como isAdmin: false desde el servidor y los usan para condicionar qué UI mostrar. El bug: si los flags también determinan si se permite ejecutar las acciones admin server-side (en lugar de chequear el rol real del JWT), basta con flipear el boolean en la response para desbloquear el panel admin entero. Quora pagó $3,500 (H1 #3567641) por exactamente esto — 30+ flags, UserAdminLogPaginationQuery ejecutable con sesión normal, GraphQL admin map completo. El patrón aparece en 80%+ de admin panels de SaaS Series A/B.
1. La clase de bug: client-side enforcement
CWE-602 "Client-Side Enforcement of Server-Side Security". La arquitectura vulnerable:
[Server] ──"isAdmin: false"──→ [Client React]
│
▼
if (isAdmin) <AdminPanel/>
│
▼ user clicks button
POST /admin/delete-user
│
▼
[Server] ✅ procesa sin chequear rol
El frontend gating es solo UX. Si el server no re-valida el rol antes de ejecutar acciones, el atacante:
- Manipula la response para que el frontend renderice los controles admin.
- Usa esos controles para invocar las acciones.
- El server las ejecuta porque "creía" que solo el frontend admin las podía llamar.
2. Detección — el script de 6 líneas
Cuando llegas a un target y haces login con cuenta normal, pega esto en DevTools Console:
// Detect client-side admin flags in initial state
const text = document.documentElement.innerHTML;
const matches = text.match(/"(is[A-Z]\w+|can[A-Z]\w+|enable\w+|allow\w+)":\s*(true|false)/g) || [];
const interesting = matches.filter(m => /admin|debug|internal|dev|super|test|moderat/i.test(m));
console.table(interesting.map(m => m.replace(/[":,\s]/g, " ").trim().split(" ")));
Si la tabla tiene 5+ flags con admin/debug/internal/moderat en el nombre y todos a false → vulnerable a este bypass con alta probabilidad. Si tiene 30+ → es el report del año.
Real-world output (Quora caso 2026)
isAdminMode false
isAdmin false
tribes_super_admin false
isAdminLogTab false
isDevCode false
isCanaryRevision false
debugToolsEnabled false
isMemberQuoraEmployee false
EnableSubscriptionsDebugMode false
... (30+ flags adicionales)
Sigue leyendo el chain completo
La parte que falta incluye el PoC paso a paso, código de explotación y la cadena completa que llevó al impacto. Disponible para suscriptores.
Practica esto en un lab
Client Side Admin Bypass
Sigue aprendiendo · cuenta gratis
Guarda tu progreso, desbloquea payloads avanzados y rankea tus flags.
Artículos relacionados
DOM XSS — gadgets, postMessage handlers y CVE-2025-59840
DOM XSS no es solo innerHTML. Sources/sinks, gadget chains via toString(), postMessage handlers sin origin check, hash-based routing rotos.
Análisis JavaScript client-side — endpoints, secrets y source maps
Extracción de endpoints ocultos de JS bundles, detección de secrets, análisis de source maps y dynamic instrumentation con Frida para auditar lógica client-side.
IDOR y BAC — metodología manual para encontrar broken access control
Cómo identificar IDOR (Insecure Direct Object Reference) y BAC (Broken Access Control) manualmente: dual-account testing, parameter swap, role escalation, hidden parameters.