Nuevos labs cada semana — Accede a todos desde 5€/mes

Nivel BásicoGratis

Information Disclosure — los 12 patrones que más se pagan

API keys en HTML, debug endpoints, error verbose, JS bundles con secretos, .git expuesto, headers leak. Cómo encontrarlo y por qué se cierra rápido y se paga.

Gorka El Bochi9 de mayo de 202611 min

Respuesta rápida

Information Disclosure es cualquier filtración de datos que ayuda al atacante: tokens, paths internos, versiones de librerías, configuración, código fuente, datos de usuarios. Bug bounty programs lo pagan rápido cuando demuestras impacto (acceso a algo de pago, otro usuario, infra interna). Los 12 patrones más rentables están bien definidos — vale la pena hacerse una checklist.


Los 12 patrones que más se reportan

1. API keys en window.CONFIG o equivalente

Apps SPA inyectan estado global en HTML al cargar:

javascript
window.CONFIG = { contentful: { ACCESS_TOKEN: "..." }, algolia: { apiKey: "..." } }
window.__INITIAL_STATE__ = { ... }
window.__NEXT_DATA__ = { ... }  // Next.js

Ctrl+U → buscar TOKEN, API_KEY, SECRET. Si encuentras, prueba contra la API real del servicio para ver el alcance.

2. JavaScript bundles con secretos hardcoded

bash
# LinkFinder + SecretFinder sobre los .js
python3 SecretFinder.py -i https://app.target.tld/main.abc123.js

Patrones a grep: aws_access_key, aws_secret, slack_webhook, stripe_secret_key, heroku_api_key, api_token.

3. .git expuesto

bash
curl -sI https://target.tld/.git/HEAD
# Si responde 200 con "ref: refs/heads/main" → .git folder accesible

# Dump completo con git-dumper
git-dumper https://target.tld/.git/ ./loot/

Acceso al historial completo del repo → secretos en commits viejos, código fuente del backend.

4. .env, .bak, .swp accesibles

bash
target.tld/.env
target.tld/config.php.bak
target.tld/.htaccess.bak
target.tld/wp-config.php~

Probar wordlists típicas (raft-medium-files, etc.) en cada subdomain.

5. Stack traces verbose en errores

Forzar errores para ver respuestas:

vbnet
GET /api/users?id=abc'
GET /api/users?id=null
GET /api/users?id=99999999999999

Si el servidor responde con stack trace incluyendo paths del filesystem (/var/www/app/src/...), versiones de librerías y query SQL → reporte directo.

6. Debug endpoints sin auth

bash
target.tld/debug
target.tld/debug/vars        # Go debug pprof
target.tld/actuator/env       # Spring Boot
target.tld/actuator/heapdump  # crítico — heap dump del JVM
target.tld/.well-known/security.txt
target.tld/__debug__
target.tld/console            # Werkzeug Python debug shell — RCE directo si está

Spring Boot Actuator mal configurado es el clásico. Werkzeug con /console es RCE inmediato.

7. Headers leak

makefile
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
X-AspNet-Version: 4.0.30319
X-Debug-Mode: 1
X-Backend-Server: app-prod-01.internal.tld

Versions outdated → CVE chain potencial. Internal hostnames → asset enumeration.

8. CORS misconfig que filtra datos

Si Access-Control-Allow-Origin: * con Access-Control-Allow-Credentials: true → cualquier origen puede leer respuestas autenticadas. Reporta con PoC mostrando lectura cross-site.

9. Verbose responses en endpoints públicos

http
GET /api/v1/products/123

Respuesta incluye campos no necesarios:

json
{
  "id": 123,
  "name": "Widget",
  "internal_cost": 12.50,
  "supplier_email": "joao@supplier.tld",
  "stock_db_id": "prod-x42-internal",
  "created_by_uid": 88
}

Internal cost, emails de proveedores, IDs internos — todos info disclosure si no son strictly necessary.

10. Open S3 / Azure / GCP buckets

bash
# S3 enumeration
aws s3 ls s3://target-uploads --no-sign-request
aws s3 ls s3://target-prod --no-sign-request

# Common bucket names
target-backups, target-uploads, target-static, target-dev, target-prod

Buckets públicos con backups, dumps de DB, archivos de usuarios → critical info disclosure.

11. Source maps en producción

arduino
target.tld/main.abc123.js.map

Si responde 200, contiene el código fuente original desminificado. Reveals lógica del frontend, endpoints internos, variables que se ofuscan en bundle pero no en map.

12. PII leak via short URLs / tokens predecibles

Endpoints como acortadores de URL, links de invoice, password reset, account confirmation con tokens cortos o predecibles → enumeración expone PII de cientos de usuarios. Patrón con histórico de bounties altos.


Cómo lo encuentras: checklist

less
[ ] Ctrl+U sobre la home y páginas autenticadasgrep TOKEN/SECRET/KEY
[ ] Análisis de cada .js bundle con LinkFinder + SecretFinder
[ ] Probar /.git, /.env, /.bak, /backup, /admin
[ ] Forzar error: id=', id=null, body malformado, content-type raro
[ ] Probar /debug, /actuator, /__debug__, /pprof, /metrics, /console
[ ] Curl con -I para ver Server / X-Powered-By en cada subdominio
[ ] CORS scan en endpoints autenticados
[ ] Diff entre response autenticado y no autenticado: ¿hay campos extra?
[ ] Enumerar buckets S3/Azure/GCP con nombres derivados del target
[ ] curl <endpoint>.js.map en bundles principales
[ ] Tokens cortos / numéricos en URLs de notificaciones, links transaccionales

Cómo se reporta

El triage exige impacto demostrado, no "este header está, es malo". Para cada finding:

  • Token / API key: una petición HTTP funcional contra la API real que demuestre el alcance (descargar contenido de pago, listar recursos privados).
  • Debug endpoint: capturas o curl mostrando información sensible.
  • Bucket abierto: lista de archivos sensibles + 1 ejemplo descargado.
  • Source maps: screenshot del código fuente original visible.

Sin impacto reproducible, va a Informational. Con impacto claro, suelen pagar entre €100 (low) y €5.000 (critical, según qué se filtra).


Labs relacionados

Practica recon de tokens, debug endpoints y source maps en apps reales: labs de Information Disclosure.

Practica esto en un lab

Information Disclosure

Resolver

Sigue aprendiendo · cuenta gratis

Guarda tu progreso, desbloquea payloads avanzados y rankea tus flags.

Crear cuenta

Artículos relacionados