
Reconocimiento pasivo & mapeador de superficie de ataque — cero solicitudes enviadas
Inicio rápido · Modo Caza · Banco de trabajo · Modos · Exportaciones · vs Burp · Bajo el capó
PenScope es una extensión de Chrome. Instálala, navega por un sitio que tengas permiso para probar, y mapea silenciosamente toda la superficie de ataque — cada endpoint, cada secreto, cada cabecera mal configurada, cada parámetro oculto. Cuando le das la orden, envía 36 ataques de sonda diferentes usando tus cookies de sesión reales e informa cuáles acertaron.
O estableces el alcance, haces clic en Cazar y PenScope hace todo el proceso de forma autónoma mientras haces otra cosa — redactando informes completos de bug bounty en formato HackerOne por cada hallazgo Crítico y Alto que consigue. Te despiertas con una cola de borradores listos para enviar.
Es la herramienta diaria para los cazadores de bug bounty que quieren saltarse la rutina de "configurar un proxy, hacer clic en tres ventanas, alt-tab a una lista de payloads" y simplemente mirar un sitio. O dejar de mirar por completo y dejar que la herramienta cace por ellos.
Lee todo, no envía nada — hasta que se lo ordenes. Establece el alcance, pulsa Cazar, cierra el portátil. Despiértate con críticos redactados.
Refactorización dirigida por auditoría en 8 fases. Adiciones destacadas:
.env, prefijos s./b. de Vault — más detectores de cuerpo de respuesta para Spring Boot / Rails ActiveRecord / Django DEBUG / ASP.NET YSOD / Express / Apollo / MSSQL.alg, iss, sub, aud, exp, iat, , ...). Aumento de gravedad cuando está en el futuro y el rol es de tipo admin.Desglose completo por fases en CHANGES.md. Notas de migración en MIGRATION.md.
Ancla la extensión. Visita cualquier sitio. Haz clic en el icono **P**. PenScope ya estaba vigilando.
---
## Qué puedes hacer
PenScope captura más de 60 campos de datos por pestaña. Esto es lo que eso significa en la práctica:
**Ver toda la superficie de ataque.** Cada endpoint, incluidos aquellos referenciados en JavaScript pero nunca llamados realmente. Rutas de API enterradas en source maps, operaciones GraphQL reconstruidas desde cuerpos POST, rutas de administración ocultas inferidas de la introspección del framework.
**Encontrar secretos que nadie pretendía enviar.** Claves API hardcodeadas en paquetes `.js`. JWTs en `localStorage`. Credenciales de AWS en volcados de entorno. IDs internas en cuerpos de respuesta. El tipo de cosas que terminan en un informe P1.
**Ejecutar 36 pasos de ataque en tu navegador.** Bypass de autenticación, BAC, IDOR, CORS reflection, JWT alg=none, SSTI, XXE, inyección CRLF, contaminación de prototipos, descubrimiento de parámetros, degradación de versión de API. Tres niveles de agresión — cuidadoso, medio, completo. Pega encabezados personalizados. El modo sigiloso baraja el orden de las solicitudes para que no actives un WAF.
**Encadenar hallazgos individuales en exploits reales.** Un JWT en memoria es un hallazgo. El mismo JWT más un endpoint de API que acepta tokens sin firmar más el rol decodificado siendo admin es una cadena — y PenScope te muestra la cadena en la parte superior del informe, con puntuación de confianza, comando de reproducción y próximos pasos.
**Editar y reenviar cualquier solicitud.** Estilo clic derecho. El Repetidor se abre en una nueva pestaña, ventana completa. Cambia un parámetro. Presiona Enviar. Ve la respuesta. Colócala en Diff para compararla con la línea base.
**Fuzzear con puntos de inserción.** Marca `§payload§` en cualquier lugar de una solicitud, elige un conjunto de payloads (40 cadenas XSS, 30 SQLi, 28 LFI, 18 SSTI, 22 SSRF, 24 inyección de comandos, IDs 1-100, clásicos de bypass de autenticación, nombres de usuario comunes), elige un modo de ataque (Sniper / Cluster bomb / Pitchfork / Battering ram), observa la tabla de resultados en vivo. Las filas anómalas se marcan con una estrella.
**Probar como cinco usuarios diferentes a la vez.** Guarda contextos de autenticación (Anónimo, Usuario A, Usuario B, Admin, Interno). Un clic cambia el contexto activo — cada solicitud del Repetidor, cada ejecución de Intruder, cada sonda usa esas credenciales. Luego ejecuta la **Matriz de Autorización**: PenScope recorre cada endpoint × cada contexto y colorea una cuadrícula. Las discrepancias entre filas son tus hallazgos IDOR / BAC, descubiertos automáticamente.
**Generar un CSP que realmente se ajuste al sitio.** Recorre cada solicitud que hizo la página, clasifica cada una por tipo de recurso, construye una política estricta. Añade `default-src 'none'`, `frame-ancestors 'none'`, `upgrade-insecure-requests`. Detecta scripts en línea y `eval()` y advierte cuando tuvo que mantener `'unsafe-inline'`. Muestra diferencias con el CSP existente — verde para reforzado, rojo para relajado.
**Hablar con Claude en ambos sentidos.** Haz clic en `→ Claude` para copiar todo el escaneo en tu portapapeles como un resumen estructurado. Pregúntale a Claude qué probar a continuación. Claude responde con una cola JSON entre comillas. Haz clic en `⟳ Sincronizar desde Claude` y PenScope analiza la cola, ejecuta cada ataque contra el objetivo en vivo y retroalimenta los resultados al analizador de cadenas.
**Rastrear tu alcance a lo largo del tiempo.** Toma una instantánea de un sitio hoy, otra el próximo sprint, haz clic en Comparar. PenScope te dice qué hallazgos son nuevos, cuáles están resueltos, cuáles no se han movido. Exporta la diferencia como Markdown para el Slack del equipo.
**Mapear hallazgos a controles de cumplimiento.** Haz clic en Auditoría de Cumplimiento. Cada hallazgo se mapea a controles específicos en PCI-DSS v4, NESA UAE IAS, SAMA CSF, DESC ISR, ISO 27001, OWASP Top 10 2021 y CWE. Exporta JSON para tu SIEM. Exporta PDF para el auditor.
---
## Modo Cacería
Haz clic en `🎯 Cazar` en el encabezado de la ventana emergente. Se abre una nueva pestaña. El **panel de pre-vuelo** en la parte inferior muestra el estado de tu motor — endpoints capturados, secretos, tecnología detectada, contextos de autenticación guardados — para que sepas si tienes suficiente superficie para una cacería productiva antes de hacer clic en Iniciar. Si los endpoints < 20, una advertencia amarilla sugiere que explores el objetivo primero O que confíes en el nuevo paso de rastreo automático del DOM. Configura tu alcance objetivo (rutas dentro del alcance, rutas fuera del alcance, nivel de agresión, presupuesto de tiempo). Haz clic en `▶ Iniciar Cacería`.
PenScope autónomamente:
1. Realiza reconocimiento pasivo
2. **Activa automáticamente el modo Profundo** (el depurador CDP se adjunta silenciosamente — sin aviso al usuario)
3. **Rastreo automático del DOM** — recorre cada `<a href>`, `<form action>`, ``, `[routerLink]`, `[ng-href]`, `[to]`, `[data-href]` en la página actual. Filtra a URLs del mismo origen. Agrega nuevas a la cola de sondas. _Extracción pura de URL — sin clics, sin navegación, sin efectos secundarios que cambien la sesión._
4. Ejecuta el pipeline completo de 36 pasos de sonda + 8 paquetes de ataque conscientes de la pila
5. Barre la **Matriz de Autorización** a través de los contextos de autenticación guardados
6. Ejecuta el correlacionador de cadenas, filtra por tus reglas de alcance
7. **Redacta un informe completo en formato HackerOne para cada hallazgo Crítico y Alto** — cadenas *y* hallazgos individuales de alta gravedad (secretos expuestos, JWT alg=none, SSTI/XXE/CRLF confirmados). Cada borrador incluye título, gravedad con estimación CVSS, resumen, pasos para reproducir con curl de dos pasos (sonda sin autenticación + línea base de autenticación para diferencias), declaración de impacto específica del hallazgo, corrección sugerida de la biblioteca de fragmentos y referencias
8. Dispara una notificación de Chrome por cada crítico: *"El Modo Cacería encontró un IDOR Crítico en /api/users — borrador de informe listo"*
9. Persiste los borradores en `chrome.storage.local` indexados por host (sobreviven al cierre de pestaña y reinicio del navegador)
La **pestaña En Vivo** narra cada paso de filtrado en tiempo real — recuento de cadenas antes/después del filtro de alcance, distribución de gravedad, qué se descartó y por qué. Si la cacería termina con 0 informes, un diagnóstico "¿Por qué no hay informes?" te guía a través de cada punto de filtro con sugerencias concretas ("desmarcar filtro Crítico+Alto", "guardar 2+ contextos de autenticación", "explorar el objetivo más primero"). No más preguntarse por qué una cacería quedó vacía.
**Te despiertas con una cola de informes de recompensas preescritos.** Lee cada uno, haz clic en Copiar o Exportar, pégalo en tu envío de HackerOne / Bugcrowd / Intigriti.
Este es el flujo de trabajo que Burp ni siquiera intenta. El Escáner Activo de Burp ejecuta ataques pero aún tienes que escribir el informe. PenScope posee el camino completo desde escaneo → exploit → informe → envío.
> Establece alcance. Presiona Iniciar. Cierra la laptop. Despiértate con una cola de Críticos redactados.
### Controles de calidad — mantén tu reputación
El Modo Cacería filtra activamente falsos positivos que quemarían tu reputación si se envían:
- **Cáscaras HTML SPA** — las páginas de arranque de Angular/React/Vue devuelven HTML idéntico a solicitudes autenticadas y no autenticadas porque el JS maneja la autenticación del lado del cliente. El Modo Cacería detecta este patrón (ruta termina en `.html` + `sameBody=true`) y suprime el hallazgo. Las APIs reales aún informan.
- **Tokens SAS benignos de Azure** — URLs SAS de solo lectura de corta duración para medios (`image.jpg?sv=...&sp=r&se=...`) son entrega legítima de CDN, no fugas de credenciales. El Modo Cacería verifica `sp=r` + extensión de archivo multimedia + `se - st < 7 días` y los suprime. Los tokens SAS de larga duración, con capacidad de escritura o que no son multimedia aún se reportan como fugas reales.
- **Normalización de fragmentos hash** — `/Dashboard#!/` es una ruta del lado del cliente, no un endpoint del servidor. El Modo Cacería elimina los fragmentos hash antes del análisis de cadenas para que el informe muestre `/Dashboard` (la ruta real del servidor).
- **`baseUrl` real en cada curl** — el analizador de cadenas deriva el host objetivo de `tab.url` (solo HTTP/HTTPS) con un fallback al primer endpoint observado. No más URLs placeholder `https://target.tld` en tus informes.
- **Diagnósticos transparentes** — cada paso de filtro (alcance, gravedad, deduplicación) registra sus recuentos de antes/después en el feed en vivo. Cuando una cacería termina con 0 informes, el feed termina con un bloque "¿Por qué no hay informes?" explicando exactamente dónde se descartó cada posible hallazgo, con sugerencias concretas de próximos pasos adaptadas a tu configuración específica.
### Un borrador real del Modo Cacería
Aquí hay un extracto censurado de un borrador real que produjo el Modo Cacería en un LMS gubernamental en 4 minutos:```markdown
# Authentication bypass on sensitive endpoint: /api/DashboardApi/getUsefulLinks
**Severity:** CRITICAL (CVSS estimate: 9.0–10.0)
**Confidence:** 95%
**Target:** https://lms.example.gov/Dashboard
**Discovered:** 2026-05-01T07:31:13.151Z
**Detected by:** PenScope v6.2 Hunt Mode (chain pattern: chain-authbypass)
## Summary
PenScope's probe confirmed that GET /api/DashboardApi/getUsefulLinks returns
the same data whether or not authentication cookies are sent
(auth=200, noauth=200, sameBody=false). The path name strongly suggests this
endpoint should be role-gated — it's returning sensitive data to
unauthenticated callers.
## Steps to reproduce
# Verify unauthenticated access
curl -i "https://lms.example.gov/api/DashboardApi/getUsefulLinks"
# Compare to authenticated baseline (paste your real cookies):
curl -i "https://lms.example.gov/api/DashboardApi/getUsefulLinks" -b "session=..."
## Impact
Successful exploitation enables an attacker to bypass core security controls,
gain unauthorized access to sensitive functionality or data, and pivot to
broader compromise. This is a credible breach path warranting immediate
remediation.
## Suggested fix
Enforce server-side authentication on every endpoint that returns sensitive
data. The fact that PenScope received a 200 with no cookies means the
authorization middleware is missing or disabled for this route.
[ ... full Express/Django/Laravel snippet examples + references ... ]
Eso es un informe de recompensa presentable. Redactado mientras hacías otra cosa.
El Banco de Trabajo es lo que eleva a PenScope de "herramienta de reconocimiento pasivo" a "todo por lo que abrirías Burp". Haz clic en ⌘ Workbench en el encabezado de la ventana emergente y se abre una pestaña de Chrome a pantalla completa con seis herramientas, compartiendo el estado con tu escaneo.
¿Capturaste una solicitud con la que quieras jugar? Haz clic en ella en el Mapa del Sitio. La solicitud completa — método, URL, encabezados, cuerpo — se carga en el editor. Edita cualquier cosa. Presiona Enviar (o Ctrl+Enter). La respuesta se muestra a la derecha con estado, tamaño, tiempo y el contexto de autenticación activo que la disparó.
La barra de historial mantiene tus últimos 50 envíos. Tres botones convierten la solicitud actual en artefactos accionables: Copiar como curl (para terminales e informes), Enviar a Intruso (con los mismos encabezados y cuerpo precargados), Enviar respuesta a Diff.
Toma cualquier solicitud. Envuelve el valor que quieras fuzzear entre §...§. Elige un conjunto de cargas. Presiona Iniciar.
Biblioteca de cargas integrada:
O pega tu propia lista. Cuatro modos de ataque: Francotirador (una posición a la vez), Bomba de racimo (todas las combinaciones), Hórquilla (posiciones sincronizadas), Ariete (la misma carga en todas partes). Tabla de resultados en vivo con detección de anomalías: se marcan las filas donde el código de estado o el tamaño de la respuesta difiere de la línea base.
Límite máximo: 200 solicitudes por ataque. No vayas a hacer DoS accidentalmente a tu objetivo de recompensa.
Conversiones reversibles para los formatos que los cazadores tocan a diario:``` Base64 ↔ B64-URL ↔ URL ↔ HTML ↔ Hex ↔ MD5 / SHA-1 / SHA-256 / SHA-512
Además, una tarjeta **JWT** dedicada: pega un token, decodifica el encabezado y el payload, edita cualquiera de ellos y luego falsifica uno nuevo. Dos modos de falsificación:
- **alg=none** — la prueba clásica de omisión de autenticación JWT (el servidor confía en tokens sin firmar)
- **HS256** — firma con un secreto débil adivinado (`secret`, `key`, `password`, `jwt-secret` son los comunes)
El resultado es un único token, listo para copiar y pegar.
### Diff
Dos paneles de texto. Envía respuestas desde Repeater con un clic. Pulsa `Compute Diff`. PenScope ejecuta un diff de líneas LCS y colorea el resultado: `+` para añadido, `−` para eliminado. Resumen de recuento en la parte superior.
Este es el asesino de la confirmación de IDOR. "¿La respuesta para el Usuario A es *la misma* que para el Usuario B, o el servidor realmente devolvió los datos del Usuario B?" Diff te lo dice en tres segundos.
### Site Map
Árbol jerárquico de cada endpoint capturado por PenScope, organizado por host → ruta. Píldoras de método (`GET`, `POST`, `DELETE`...). Insignias de código de estado por nodo, coloreadas verde/amarillo/naranja/rojo. Haz clic en cualquier ruta para cargarla en Repeater.
La superficie de ataque completa, en una sola vista, lista para probar.
### Auth Contexts + Authorization Matrix
Este es el diferenciador. Burp no incluye esto.
Guarda perfiles de autenticación con nombre. Cada perfil = un nombre + un conjunto de cookies + un conjunto de encabezados. Créalos iniciando sesión como cada usuario, copiando sus cookies de sesión + encabezado de Autorización, pegándolos en el editor. Añade notas ("plan de pago", "rol de solo lectura", "personal interno"). Un clic cambia el contexto activo. Todas las solicitudes de Repeater / Intruder / sonda ahora se envían con esas credenciales.
Luego haz clic en `Run authorization matrix`. PenScope golpea cada endpoint × cada contexto y renderiza una cuadrícula:```
Anonymous User A User B Admin
GET /api/me 401 200 200 200
GET /api/users 401 403 403 200
GET /api/admin 401 403 403 200
DELETE /api/orders/5 405 403 403 ★ 200
PATCH /api/users/42 401 200 ★ 403 200
Las estrellas marcan filas donde los contextos discrepan. Esas filas son tus hallazgos de IDOR y BAC, detectados automáticamente.
Un cazador típico pasa toda una tarde probando manualmente cada endpoint como cada usuario, tomando notas en un documento. PenScope lo hace en 30 segundos y codifica los resultados con colores.
Mismo motor de datos, tres vistas. Elige la que coincida con lo que estás haciendo.
Cambia de modo con la píldora Classic / Red / Blue en el encabezado emergente. Cada pestaña recuerda el último modo en que estuviste. Los colores del tema cambian con el modo.
Haz clic en Export ▾ en el encabezado emergente. Diez formatos, dos propósitos:
El informe Markdown está diseñado para compartir — cada credencial se redacta, el encabezado del informe lo dice explícitamente. El JSON está diseñado para sincronizar con tu compañero de caza — cada credencial se envía intacta.
PenScope y Burp resuelven el mismo problema desde lados diferentes. PenScope vive en tu navegador; Burp es un proxy MITM. Ambos tienen su lugar. Aquí está la comparación honesta.
Donde PenScope gana: gratis, configuración más rápida, nativo del navegador (usa tu sesión real, sin baile de certificados), correlación de cadenas, herramientas de modo defensor, puente de IA.
Donde Burp gana: la intercepción a nivel TLS te permite ver y modificar solicitudes antes de que salgan de la pila de red — útil para aplicaciones nativas y contrabando de websockets. Collaborator te da infraestructura de callback fuera de banda para XXE / SSRF ciegos.
Si haces bug bounty exclusivamente en tu navegador en aplicaciones web, PenScope reemplaza a Burp en ~95% de tu flujo de trabajo diario. Si haces ingeniería inversa de aplicaciones móviles o pruebas clientes pesados, Burp sigue siendo tu amigo.
PenScope no envía nada sin acción explícita del usuario. No hay:
El tráfico saliente solo ocurre en tres casos:
Cero paquetes npm. Cero scripts CDN. Cero SDKs de terceros. JavaScript puro vanilla, manifiesto MV3, superficie de ataque de cadena de suministro cero.
Arquitectura, los 36 ataques de sonda, los 13 patrones de cadena, el mapa de archivos y por qué nada de esto necesita un paso de compilación.
┌──────────────────────────┐
│ state[tabId] │
│ 60+ fields populated by │
│ webRequest / content / │
│ CDP / probe layers │
└──────────┬───────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
Classic mode Red mode Blue mode renderClassic() renderRed() renderBlue() │ │ │ └───────────────────────┴───────────────────────┘ │ ┌────────────────┴────────────────┐ │ │ Workbench Hunt Mode (Repeater · Intruder · Encoder (autonomous orchestrator · Diff · Site Map · Auth Matrix) drafting H1 reports)
**Un motor, tres modos, tres superficies.** El motor de datos es independiente del modo: cada campo de estado se recopila de la misma manera, independientemente de la vista en la que te encuentres. Los modos son opciones de tema + renderizador sobre los mismos datos. El Workbench y el Modo Hunt son pestañas independientes de Chrome que comparten `state[tabId]` a través de manejadores de mensajes en segundo plano.
Las anulaciones de variables CSS (`body.mode-red`, `body.mode-blue`) re-tematizan todo sin tocar ni un solo selector de reglas. Por eso el modo Classic es exactamente la misma experiencia que v5.9 byte por byte.
---
## Rendimiento
PenScope está en cada pestaña, todo el tiempo. Por defecto, evita el enriquecimiento costoso para ~50 sufijos de hosts ruidosos conocidos (CDN de video como `googlevideo.com`, redes publicitarias como `doubleclick.net`, endpoints de telemetría como `sentry.io`, CDN estáticas grandes como `gstatic.com`). Cientos de solicitudes de fragmentos de `googlevideo.com` por minuto en YouTube ya no pasan por 14 expresiones regulares AUTH_PATTERN + detección de parámetros de ruta + búsqueda de Swagger; se registran como endpoints (por lo que el Site Map aún los incluye) y se omiten para el resto.
El mismo camino rápido para los tipos de recurso `image`/`media`/`font`/`stylesheet`/`object`/`ping` en cualquier host. Los errores casi nunca se esconden en los parámetros de URL `.css`.
Los reanálisis del DOM del script de contenido se ejecutan mediante `requestIdleCallback` (con un mínimo de 15 segundos entre análisis) y se omiten por completo cuando la pestaña está oculta. MutationObserver filtra cambios solo de texto (tics de temporizador, actualizaciones de datos de caracteres) para que el constante cambio del DOM de YouTube no active un reanálisis completo cada 3 segundos.
Anulación disponible: casilla de verificación **"Captura completa en hosts ruidosos"** en el menú desplegable de Probe. Cuando estés auditando específicamente YouTube/Twitch/Sentry/etc. COMO objetivo, márcala y se omitirá el camino rápido.
---
## Los 45 ataques de Probe
Se ejecutan a demanda. Tres niveles de agresión con un contrato impuesto: **Careful** = solo GET/HEAD/OPTIONS con un espaciado mínimo de 200 ms entre solicitudes; **Medium** = añade POST para operaciones de lectura de forma (≤3 en paralelo); **Full** = todos los métodos incluidos DELETE/PUT/PATCH más ráfagas de condiciones de carrera (≤10 en paralelo). Los encabezados personalizados se pegan en cada solicitud. El modo sigiloso baraja el orden de los pasos con Fisher-Yates y añade una fluctuación del 0–80% a los retrasos entre pasos. El método esperado de cada paso se verifica en seco contra el nivel activo al inicio del probe; los pasos bloqueados se listan en el registro de diagnóstico.
| # | Ataque | Qué hace |
|---|---|---|
| 1 | Introspección de GraphQL | Vuelca esquema, tipos, consultas, mutaciones |
| 2 | Cosecha de mapas de fuente | Descarga `.map`, extrae secretos + endpoints |
| 3 | Obtención de Swagger/OpenAPI | `/swagger.json`, `/openapi.json`, etc. |
| 4 | Preflight OPTIONS | Preflight CORS en cada ruta de API |
| 5 | Sondaje de rutas de reconocimiento | `/admin`, `/.env`, `/.git/HEAD`, `/actuator` |
| 6 | Fuerza bruta de prefijo/sufijo de API | `/api/v1/<word>` |
| 7 | Fuerza bruta inteligente de sufijo | Prefijo × sufijo barajado sigilosamente |
| 8 | BAC (control de acceso roto) | Endpoints que cambian de estado sin autenticar |
| 9 | Autotest de IDOR | Sustitución de ID + comparación de mismo cuerpo |
| 10 | Prueba de reflexión CORS | Reflexión de origen con credenciales |
| 11 | Manipulación de métodos | Intercambios GET/POST/PUT/PATCH/DELETE |
| 12 | Sonda de redirección abierta | Variantes de `?redirect=evil.com` |
| 13 | Sonda de condición de carrera | Solicitudes concurrentes en endpoints sensibles a idempotencia |
| 14 | Polución de parámetros HTTP | `?id=1&id=2` |
| 15 | Enumeración de subdominios | Desde registros CT + tráfico observado |
| 16 | Fuzzing de campos de GraphQL | Sondear cada campo introspeccionado para auth |
| 17 | Aceptación de JWT alg=none | ¿El servidor confía en tokens sin firmar? |
| 18 | Inyección de encabezado Host | Variantes de `X-Forwarded-Host` |
| 19 | Envenenamiento de caché | Inyección de encabezado sin clave |
| 20 | IDOR confirmado mismoCuerpo | Similitud de cuerpo entre IDs |
| 21 | Prueba de eliminación de autenticación | Eliminar cookies, buscar 200s |
| 22 | Brecha de validación CSRF | Endpoints que cambian de estado sin token |
| 23 | Reflexión gRPC | Servicio de reflexión gRPC expuesto |
| 24 | Oráculo de compresión (BREACH) | Heurístico, no explota realmente |
| 25 | Secuestro de WebSocket | Conexiones WS de origen cruzado |
| 26 | Sonda de envenenamiento de caché | Entrada sin clave basada en encabezados |
| 27 | Oráculo de temporización | Variación de temporización en el mismo endpoint |
| 28 | Omisión de COOP/COEP | Fortaleza del aislamiento de origen cruzado |
| 29 | Partición de almacenamiento | Aislamiento de almacenamiento entre sitios |
| 30 | Descubrimiento recursivo inteligente | 3 oleadas de sondaje, encadenadas desde respuestas anteriores |
| 31 | Descubrimiento de parámetros | 38 parámetros ocultos por fuerza bruta (`debug`, `admin`, `_method`, `bypass`...) |
| 32 | Sondaje de SSTI | `{{7*7}}`, `${7*7}`, `<%=7*7%>` |
| 33 | Sondaje de XXE | XML con entidades externas |
| 34 | Inyección CRLF | `%0d%0a` en parámetros de redirección |
| 35 | Degradación de versión de API | `/v1/`, `/v2/` para cada `/vN/` observado |
| 36 | Polución de prototipo | `__proto__` / `constructor.prototype` en cuerpos JSON |
| 37 | Sondaje de parámetros SSRF | 26 nombres de parámetros SSRF con payloads de metadatos de nube; marca contenido de metadatos reflejado |
| 38 | Inyección de operadores NoSQL | `{"$ne":null}` / `{"$gt":""}` / `{"$exists":true}` en campos JSON de ID |
| 39 | Amplificación de alias GraphQL | Consulta de 50 alias → superficie de amplificación DoS (solo completo) |
| 40 | Amplificación de lote GraphQL | Lote de 25 elementos en array JSON → amplificación DoS (solo completo) |
| 41 | Engaño de caché | Estilo `/api/me/avatar.css` — contenido sensible almacenado en caché detrás de extensiones estáticas |
| 42 | Toma de control de subdominio | Sonda estilo HEAD de subdominios capturados; coincide con firmas de toma de control de GitHub Pages / S3 / Heroku / Netlify / Vercel / Bitbucket / Shopify |
| 43 | TabNabbing | `<a target="_blank">` de origen cruzado sin `rel="noopener"` |
| 44 | Correlación de origen postMessage | Listeners `addEventListener("message")` sin comprobaciones de origen |
| 45 | Abuso de ámbito de Service Worker | Marca ámbitos SW amplios (especialmente `/`) |
Además, **8 paquetes de ataque conscientes del stack** que se activan automáticamente cuando el modo Red detecta el framework correspondiente: Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress. Cada paquete tiene de 4 a 9 pruebas específicas del stack. Solo el paquete de Spring Boot alcanza `/actuator/heapdump`, `/actuator/env`, `/jolokia/list`, `/h2-console`.
---
## Los 13 patrones de cadena
Los hallazgos individuales son ruido. Los hallazgos compuestos son exploits. El analizador de cadenas de PenScope recorre todo el estado y emite cadenas donde múltiples señales se combinan en algo explotable.
1. **Omisión de autenticación en endpoint sensible** — falta de autenticación confirmada + ruta admin/facturación/usuario
2. **BAC destructivo** — endpoint vulnerable con `delete`/`remove`/`purge` en la ruta
3. **Mutación GraphQL vulnerable a CSRF** — falta de CSRF confirmada + es una mutación
4. **Token de autenticación expuesto + API activa** — JWT en memoria + endpoints coincidentes
5. **IDOR confirmado con datos sensibles** — respuesta de mismo esqueleto entre IDs
6. **Reflexión CORS CON credenciales** — omisión completa de SOP
7. **Redirección abierta en flujo de autenticación** — parámetro de redirección en rutas de callback OAuth
8. **Rutas de administración ocultas** — 3+ rutas admin en código nunca observadas en tráfico
9. **JWT alg=none aceptado** — el servidor confía en tokens sin firmar
10. **Mapa de fuente filtró secretos** — archivos `.map` enviados a producción con claves hardcodeadas
11. **Fuga de IP interna por WebRTC** — IPs privadas expuestas vía STUN
12. **Grupo de hallazgos de sonda recursiva** — 3+ hallazgos sensibles en múltiples endpoints
13. **Superficie RCE específica del stack** — el paquete de stack encontró actuator/Ignition/etc. expuestos
Cada cadena tiene una gravedad, resumen, comando de reproducción, próximos pasos y puntuación de confianza. Ordenadas por `severity × confidence`. Se muestran en la parte superior del modo Red y en la parte superior de cada informe de Claude.
---
## Puntuación de salud (Modo Blue)```
score = max(10, 100 − min(90, crit×22 + high×9))
Estricto a propósito. Solo los críticos y altos mueven el número. Los medios y bajos aún aparecen en los mosaicos de conteo y en las 5 correcciones principales (vale la pena corregirlos), pero no arrastran la puntuación.
Mínimo en 10 para que un sitio catastrófico muestre «10/100», no «0/100» (que el usuario no podría distinguir de «escaneo fallido»).
PenScope/ ├── manifest.json MV3 manifest, v6.3.0, "type":"module" service worker ├── popup.html Mode UI shell — three modes, glassmorphism dark theme ├── popup.js Renderers, mode router, weaponize panels, fix snippets, │ compliance, Hunt + Workbench launchers, exports ├── content.js Content script — DOM scanning, secrets, JSON islands, │ tech fingerprints, XSS sinks, postMessage scan │ ├── workbench.html / .js Workbench tab — Repeater / Intruder / Encoder / │ Diff / SiteMap / AuthCtx + AuthMatrix │ ├── hunt.html / .js Hunt Mode tab — autonomous orchestrator │ ├── regex-pack.json 81 secret patterns + 44 response-body patterns │ (loaded by SW at boot, merged into RESP_PATTERNS, │ fetched by content script via getRegexPack message) │ ├── src/ Service worker entry + module tree (Phase 7 migration) │ ├── background.js Entry — webRequest, CDP, probe orchestrator, │ │ chain correlator, message router (~7,000 lines) │ ├── probe/ │ │ └── stack-packs.js STACK_ATTACK_PACKS (8 stacks) — extracted module │ └── (other audit-named files are stubs — see MIGRATION.md) │ ├── fonts/ Local woff2: JetBrains Mono + Plus Jakarta Sans │ (4 + 5 weights, ~590 KB total). Replaces the │ Google Fonts beacon that earlier versions hit on │ every popup open. │ ├── icons/ 16, 48, 128 px PNG ├── CHANGELOG.md Full version history v5.1 → v6.3.0 ├── CHANGES.md v6.3 per-phase fix breakdown ├── MIGRATION.md Phase 7 module-migration map (real vs stub) ├── LICENSE MIT └── README.md You are here
Los cuatro archivos de referencia antiguos (`red-attacks.js`, `blue-fixes.js`, `blue-csp.js`, `blue-compliance.js`) fueron eliminados en v6.3 — su contenido ya estaba incrustado en `popup.js` / `background.js` desde v6.0; los archivos independientes eran código muerto. `STACK_ATTACK_PACKS` ahora es una exportación real de módulo ES desde `src/probe/stack-packs.js`.
---
## Sin paso de compilación```bash
git clone https://github.com/spider12223/PenScope
# That's it.
Sin npm install. Sin webpack. Sin babel. Sin TypeScript. Sin bundler. JavaScript vanilla puro. La etiqueta <script> de popup.html apunta directamente a popup.js. El service worker carga background.js directamente. CSS está en línea en <style>.
La implementación de MD5 son ~50 líneas de la referencia RFC 1321 en línea (porque crypto.subtle no expone MD5). El diff LCS tiene ~30 líneas. La firma JWT usa crypto.subtle.sign nativo. El correlacionador de cadenas es regex simple + iteración de arrays. Todo lo que lees en este código base es exactamente lo que se ejecuta en el navegador.
Una herramienta de reconocimiento que incluye 200 dependencias transitivas de npm tiene 200 paquetes de superficie de ataque en la cadena de suministro. PenScope tiene cero.
Informes de errores y PRs bienvenidos. Algunas barreras de seguridad:
package.json. Si necesitas una pequeña utilidad, escribe 20 líneas.state[tabId]. No introduzcas nuevos almacenes globales.:focus-visible, etiquetas ARIA, contraste ≥4.5:1.new Function(). Los service workers de MV3 prohíben el código dinámico. Usa declaraciones de funciones nombradas + args para chrome.scripting.executeScript.MIT. Úsalo, haz un fork, envíalo.
Si PenScope te encuentra un crítico, abre un issue y cuéntanos. Coleccionamos historias de guerra.
Construido por cazadores, para cazadores.
rolescopeexpAccessibility.getFullAXTree revela etiquetas aria sensibles (botones admin/sudo/delete/destroy). Storage.getCookies expone cookies CHIPS particionadas que chrome.cookies.getAll no captura.<script type="application/json"> (Next __NEXT_DATA__, Nuxt __NUXT__, Remix __remixContext, Apollo __APOLLO_STATE__) se analizan para extraer endpoints y campos ID, no solo se escanean con regex.curl por fila, botón unauth por fila (repite la solicitud sin cookies, muestra un veredicto lado a lado). Vista de tabla de rutas que colapsa /users/123, /users/124 en /users/{id} con recuentos. Carril de pivote automático para subdominios admin.*, api.*, internal.*.ffuf -w.window.__ps_ctx ya no filtra los encabezados de Autorización del usuario al contexto de la página después de que la sonda se completa. Los comandos de reproducción en cadena redactan las cookies de sesión por defecto (el modo Rojo tiene un interruptor opcional para valores en vivo). La IIFE de la sonda captura fetch/JSON/Promise/atob/btoa/etc. al inicio para que las páginas instrumentadas con análisis no puedan interceptar la sonda sobrescribiendo globales. Inclusión de fuentes locales — cero solicitudes salientes al abrir el popup."type":"module". Árbol de directorio src/ en su lugar; STACK_ATTACK_PACKS extraído a src/probe/stack-packs.js. Los módulos restantes son stubs que documentan la ruta de extracción.| Conjunto | Cantidad | Caso de uso |
|---|
| XSS | 40 | Pruebas de reflexión, XSS DOM, variantes SVG/iframe |
| SQLi | 30 | Ciego booleano, basado en errores, basado en tiempo, UNION |
| LFI / Path Traversal | 28 | Variantes de codificación, Windows + Linux, envenenamiento de logs |
| SSTI | 18 | Jinja2, Twig, Freemarker, Velocity, Smarty |
| SSRF | 22 | Variantes de localhost, metadatos de AWS/Azure/GCP, gopher/dict |
| Inyección de Comandos | 24 | Bash, PowerShell, bypass de IFS |
| IDs 1-100 | 100 | Para enumeración de IDOR |
| Bypass de autenticación | 25 | Trucos de ruta, escalada de roles, bypass de autenticación SQL |
| Nombres de usuario comunes | 25 | admin, root, test, support, service... |
| Mode | Built for | What's on screen |
|---|
| 🟣 | Classic | Flujo de trabajo familiar, datos completos | Cada pestaña, cada detalle. El PenScope original. |
| 🔴 | Red | Pruebas ofensivas | Vía de cadena de exploit en la parte superior con botones de weaponize (curl, Nuclei YAML, petición Burp, borrador de informe H1, cola de Claude). Los paquetes de ataque conscientes de la pila se activan automáticamente en frameworks detectados (Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress). Primero la cadena, pestañas clásicas colapsadas debajo. |
| 🔵 | Blue | Defensores / revisión de seguridad | Puntaje de salud (0-100, estricto — solo cuentan críticos y altos). Top 5 correcciones priorizadas por severidad × facilidad, cada una con fragmentos copiables en Nginx / Apache / IIS / Express / Django / Laravel / Rails / ASP.NET. Generador de CSP a partir del tráfico observado. Auditoría de cumplimiento de 7 frameworks. Diferencia de instantánea y regresión. Monitor continuo con notificaciones de Chrome cuando se filtran nuevos secretos. |
| Export | Includes credentials? | Use it for |
|---|
| JSON (full data) | ✅ Yes | Formato para compartir en equipo. Dos cazadores trabajando en el mismo objetivo necesitan contextos de autenticación compartidos para reproducir los hallazgos. Envía a través de Signal / canal cifrado. |
| 📄 Full Report (.md) | ❌ Redacted | Envío de bounty, compromiso con el cliente, en cualquier lugar donde salga de tu equipo. Los valores de encabezados de autenticación (Authorization, Cookie, X-API-Key, X-Auth-Token, X-CSRF-Token, X-Amz-Security-Token, etc.) se reemplazan con <redacted, N chars>. Incluye informes redactados de Hunt Mode integrados, aciertos de paquetes de ataque de pila, alertas de monitor continuo y estado de triaje Marcado como Arreglado. |
| Burp URL list | URL list only | Pega en el alcance objetivo de Burp o alimenta a ffuf/nuclei |
| Param wordlist | Names only | Diccionarios de fuzzing — parámetros de consulta + nombres de entrada de formulario + nombres de campos ocultos |
| Param wordlist (ffuf) | Names only | Mismos datos emitidos como líneas param=FUZZ para ffuf -w |
| Endpoints (txt) | URL list only | Método/estado/ruta/host/etiquetas/tamaño separados por tabulador — rutas observadas + descubiertas |
| 📤 HAR Export | Headers + bodies | Captura HAR-1.2 completa que puedes importar en Chrome DevTools / un visor HAR / entregar a un compañero |
| 🔧 Swagger Spec (.yaml) | URL list only | Especificación OpenAPI 3.0 reconstruida a partir del tráfico observado |
| 🗺️ Source Maps (JSON) | Source extracts only | Mapas de fuente analizados completos con árboles de archivos, secretos, rutas, vars de entorno, dependencias |
| ⚔️ Nuclei Templates (.yaml) | Probe URLs only | Colócalos en ~/.config/nuclei/custom/ para escaneo continuo |
| Feature | PenScope (free) | Burp Suite Pro ($449/yr) |
|---|
| Repeater | ✅ | ✅ |
| Intruder (4 attack modes) | ✅ | ✅ |
| Decoder (B64/URL/Hex/JWT) | ✅ | ✅ |
| Comparer / Diff | ✅ | ✅ |
| Target / Site Map | ✅ | ✅ |
| Active scanner | ✅ (45 probes + 8 stack packs) | ✅ |
| Session/auth context handling | ✅ (saved profiles + matrix) | ✅ (rules-based) |
| Authorization matrix tester | ✅ (built-in) | ❌ (paid extension) |
| Chain correlation (compound findings) | ✅ (13 patterns) | ❌ |
| Subdomain takeover heuristic | ✅ (8 service signatures) | ❌ (paid extension) |
| GraphQL DoS surface tests (alias + batch) | ✅ | ❌ |
| Per-endpoint unauth replay button | ✅ | ❌ |
| HAR import + export | ✅ (round-trip) | ✅ (one-way) |
| IndexedDB diff (catch client-state leaks) | ✅ | ❌ |
| CHIPS partitioned cookie capture | ✅ | ❌ |
| JSON island parser (Next/Nuxt/Remix hydration data) | ✅ | ❌ |
| Compliance mapping (PCI/NESA/SAMA/ISO/OWASP) | ✅ (7 frameworks) | ❌ |
| CSP generator from observed traffic | ✅ | ❌ |
| Regression diff (snapshot + compare) | ✅ | ❌ |
| AI integration (Claude bidirectional) | ✅ | ❌ |
| Autonomous Hunt Mode (drafts H1 reports while you sleep) | ✅ | ❌ |
| Setup time | 60 segundos | ~30 minutos (proxy + certificado + configuración del navegador) |
| TLS-level proxy interception | ❌ (limitación del navegador) | ✅ |
| Out-of-band testing (Collaborator) | ❌ (planeado) | ✅ |
| Extension marketplace | ❌ | ✅ |
| Cost | $0 | $449 / user / year |
| Estado | Puntuación |
|---|
| 0 críticos, 0 altos | 100 (limpio) |
| 1 alto | 91 |
| 3 altos | 73 |
| 1 crítico | 78 |
| 1 crítico + 3 altos | 51 |
| 3 críticos | 34 |
| 5+ críticos | 10 (mínimo) |
| Permiso | Por qué |
|---|
webRequest | Captura cada solicitud/respuesta sin volver a obtener |
webNavigation | Detecta cambios de ruta pushState/replaceState en SPA (v6.3+) para que los endpoints de app.com no contaminen el estado del nuevo origen cuando el SPA navega entre orígenes |
activeTab | Lee la URL de la pestaña actual + envía mensajes del content script |
scripting | Inyecta ejecutores de prueba, paquetes de pila y solicitudes de Workbench en el contexto de la página |
tabs | Asigna hallazgos a la pestaña correcta; abre Workbench en una nueva pestaña |
cookies | Lee cookies HttpOnly que document.cookie no puede ver |
debugger | Requerido para el modo Profundo — habilita CDP para cuerpos de respuesta completos, introspección en tiempo de ejecución, extracción de fuentes, problemas de auditoría, árbol de accesibilidad, cookies particionadas |
notifications | Alertas del monitor continuo sobre nuevas filtraciones de secretos |
alarms | Tics de intervalo de 5 minutos para el monitor continuo |
storage | Persiste el estado (session) y las instantáneas (local) en los reinicios del SW |
<all_urls> permiso de host | La captura es independiente del objetivo; el usuario controla qué pestaña está abierta |