
Ricognizione passiva e mappatura della superficie d'attacco — zero richieste inviate
Avvio rapido · Hunt Mode · Workbench · Modalità · Esportazioni · vs Burp · Sotto il cofano
PenScope è un'estensione per Chrome. Installala, naviga su un sito che hai il permesso di testare, e mappa silenziosamente l'intera superficie d'attacco — ogni endpoint, ogni segreto, ogni header malconfigurato, ogni parametro nascosto. Quando dai il comando, invia 36 diversi attacchi probe utilizzando i tuoi cookie di sessione reali e segnala quali hanno avuto successo.
Oppure imposta uno scope, clicca su Hunt, e PenScope fa tutto in autonomia mentre tu fai altro — redigendo report di bug bounty completi in formato HackerOne per ogni criticità e segnalazione alta che trova. Ti svegli con una coda di bozze pronte per l'invio.
È il driver quotidiano per i cacciatori di bug bounty che vogliono saltare la routine "imposta un proxy, clicca in tre finestre, alt-tab su una lista di payload" e semplicemente guardare un sito. O smettere di guardare del tutto e lasciare che lo strumento cacci per loro.
Legge tutto, non invia nulla — finché non glielo chiedi. Imposta lo scope, avvia Hunt, chiudi il portatile. Svegliati con criticità già impostate.
Refactoring guidato da audit in 8 fasi. Aggiunte principali:
.env, prefissi s./b. di Vault — più rivelatori di response-body per Spring Boot / Rails ActiveRecord / Django DEBUG / ASP.NET YSOD / Express / Apollo / MSSQL.alg, iss, sub, aud, exp, iat, , ...). Aumento della gravità se è nel futuro e il ruolo ha forma admin.Analisi completa per fase in CHANGES.md. Note di migrazione in MIGRATION.md.
Fissa l'estensione. Visita un sito qualsiasi. Fai clic sull'icona **P**. PenScope stava già osservando.
---
## Cosa puoi fare
PenScope cattura più di 60 campi dati per scheda. Ecco cosa significa in pratica:
**Vedi l'intera superficie d'attacco.** Ogni endpoint, inclusi quelli referenziati in JavaScript ma mai effettivamente chiamati. Percorsi API sepolti nelle source map, operazioni GraphQL ricostruite dai corpi POST, route admin nascoste dedotte dall'introspezione del framework.
**Trova segreti che nessuno intendeva pubblicare.** Chiavi API hardcoded in bundle `.js`. JWT in `localStorage`. Credenziali AWS in dump di ambiente. ID interni nei corpi delle risposte. Il genere di cose che finisce in un report P1.
**Esegui 36 passaggi di attacco nel tuo browser.** Auth bypass, BAC, IDOR, CORS reflection, JWT alg=none, SSTI, XXE, CRLF injection, prototype pollution, parameter discovery, API version downgrade. Tre livelli di aggressività: careful, medium, full. Incolla header personalizzati. La modalità stealth mescola l'ordine delle richieste per non innescare un WAF.
**Collega risultati individuali in exploit reali.** Un JWT in memoria è un risultato. Lo stesso JWT più un endpoint API che accetta token non firmati e il ruolo decodificato che è admin è una catena — e PenScope ti mostra la catena all'inizio del report, con punteggio di confidenza, comando di riproduzione e passaggi successivi.
**Modifica e reinvia qualsiasi richiesta.** Stile clic destro. Repeater si apre in una nuova scheda, finestra intera. Cambia un parametro. Premi Invia. Vedi la risposta. Trascinalo in Diff per confrontarlo con la baseline.
**Fuzz con punti di inserimento.** Segna `§payload§` ovunque in una richiesta, scegli un set di payload (40 stringhe XSS, 30 SQLi, 28 LFI, 18 SSTI, 22 SSRF, 24 command injection, ID 1-100, classici auth bypass, nomi utente comuni), scegli una modalità di attacco (Sniper / Cluster bomb / Pitchfork / Battering ram), guarda la tabella dei risultati in tempo reale. Le righe anomale sono contrassegnate con una stella.
**Testa come cinque utenti diversi contemporaneamente.** Salva contesti di autenticazione (Anonimo, Utente A, Utente B, Admin, Interno). Un clic cambia il contesto attivo — ogni richiesta di Repeater, ogni esecuzione di Intruder, ogni sonda utilizza quelle credenziali. Quindi esegui la **Authorization Matrix**: PenScope percorre ogni endpoint × ogni contesto e colora una griglia. Le discrepanze tra le righe sono i tuoi risultati IDOR/BAC, individuati automaticamente.
**Genera un CSP che si adatti effettivamente al sito.** Analizza ogni richiesta fatta dalla pagina, classifica ciascuna per tipo di risorsa, costruisce una politica restrittiva. Aggiunge `default-src 'none'`, `frame-ancestors 'none'`, `upgrade-insecure-requests`. Rileva script inline e `eval()` e avvisa quando ha dovuto mantenere `'unsafe-inline'`. Confronta con il CSP esistente — verde per rafforzato, rosso per indebolito.
**Parla con Claude in entrambe le direzioni.** Clicca `→ Claude` per inviare l'intera scansione negli appunti come brief strutturato. Chiedi a Claude cosa testare dopo. Claude risponde con una coda JSON delimitata. Clicca `⟳ Sync from Claude` e PenScope analizza la coda, esegue ogni attacco contro il target live e reinserisce i risultati nell'analizzatore di catene.
**Tieni traccia del tuo scope nel tempo.** Scatta un'istantanea di un sito oggi, scattala di nuovo al prossimo sprint, clicca Confronta. PenScope ti dice quali risultati sono nuovi, quali sono risolti, quali non sono cambiati. Esporta la differenza come Markdown per Slack del team.
**Mappa i risultati ai controlli di compliance.** Clicca Compliance Audit. Ogni risultato viene mappato a controlli specifici in PCI-DSS v4, NESA UAE IAS, SAMA CSF, DESC ISR, ISO 27001, OWASP Top 10 2021 e CWE. Esporta JSON per il tuo SIEM. Esporta PDF per il revisore.
---
## Hunt Mode
Clicca `🎯 Hunt` nell'intestazione del popup. Si apre una nuova scheda. Il **pannello pre-volo** in basso mostra lo stato del motore: endpoint catturati, segreti, tecnologia rilevata, contesti di autenticazione salvati — così sai se hai abbastanza superficie per una caccia produttiva prima di cliccare Start. Se gli endpoint < 20, un avviso giallo suggerisce di navigare prima il target OPPURE affidarsi al nuovo passo di auto-crawl del DOM. Configura il tuo scope target (percorsi in-scope, percorsi out-of-scope, livello di aggressività, budget di tempo). Clicca `▶ Start Hunt`.
PenScope autonomamente:
1. Effettua la ricognizione passiva
2. **Abilita automaticamente la modalità Deep** (il debugger CDP si collega silenziosamente — nessun prompt per l'utente)
3. **Auto-crawl del DOM** — analizza ogni `<a href>`, `<form action>`, ``, `[routerLink]`, `[ng-href]`, `[to]`, `[data-href]` nella pagina corrente. Filtra per URL dello stesso dominio. Aggiunge nuovi URL alla coda di probe. _Pura estrazione di URL — nessun clic, nessuna navigazione, nessun effetto collaterale che cambi la sessione._
4. Esegue l'intera pipeline di probe a 36 passi + 8 pacchetti di attacco consapevoli dello stack
5. Spazza la **Authorization Matrix** attraverso i contesti di autenticazione salvati
6. Esegue il correlatore di catene, filtra in base alle tue regole di scope
7. **Redige un report completo in formato HackerOne per ogni risultato Critical e High** — catene *e* risultati individuali ad alta gravità (segreti esposti, JWT alg=none, SSTI/XXE/CRLF confermati). Ogni bozza include titolo, gravità con stima CVSS, riepilogo, passaggi per riprodurre con curl in due fasi (probe senza autenticazione + baseline autenticata per il diff), dichiarazione di impatto specifica per il risultato, fix suggerito dalla libreria di snippet e riferimenti
8. Invia una notifica Chrome per ogni critico: _"Hunt Mode ha trovato un IDOR Critico su /api/users — bozza del report pronta"_
9. Salva le bozze in `chrome.storage.local` indicizzate per host (sopravvive alla chiusura della scheda + al riavvio del browser)
La **scheda Live** narra ogni passo del filtro in tempo reale: conteggio catene prima/dopo il filtro di scope, distribuzione della gravità, cosa è stato scartato e perché. Se la caccia termina con 0 report, un diagnostico "Perché nessun report?" ti guida attraverso ogni punto del filtro con suggerimenti concreti ("deseleziona filtro Critical+High", "salva 2+ contesti di autenticazione", "naviga prima di più il target"). Niente più dubbi sul perché una caccia sia risultata vuota.
**Ti svegli con una coda di report di bounty già scritti.** Leggi ciascuno, clicca Copia o Esporta, incolla nella tua segnalazione HackerOne / Bugcrowd / Intigriti.
Questo è il flusso di lavoro che Burp non tenta nemmeno. Lo scanner attivo di Burp esegue attacchi ma devi comunque scrivere il report. PenScope possiede l'intero percorso dalla scansione → exploit → report → invio.
> Imposta lo scope. Premi Start. Chiudi il laptop. Svegliati con una coda di Critical pronti.
### Controlli di qualità — mantieni la tua reputazione
La modalità Hunt filtra attivamente i falsi positivi che brucerebbero la tua reputazione se inviati:
- **Shell HTML SPA** — Le pagine bootstrap Angular/React/Vue restituiscono HTML identico a richieste autenticate e non autenticate perché il JS gestisce l'auth lato client. Hunt Mode rileva questo pattern (percorso termina con `.html` + `sameBody=true`) e sopprime il risultato. Le API reali segnalano ancora.
- **Token SAS Azure benigni** — URL SAS di sola lettura a breve scadenza per media (`image.jpg?sv=...&sp=r&se=...`) sono consegna CDN legittima, non fughe di credenziali. Hunt Mode controlla `sp=r` + estensione file media + `se - st < 7 giorni` e sopprime. Token SAS a lunga durata, con capacità di scrittura o non media segnalano ancora come fughe reali.
- **Normalizzazione dei frammenti hash** — `/Dashboard#!/` è una route lato client, non un endpoint server. Hunt Mode rimuove i frammenti hash prima dell'analisi delle catene in modo che il report mostri `/Dashboard` (il percorso server effettivo).
- **`baseUrl` reale in ogni curl** — l'analizzatore di catene deriva l'host target da `tab.url` (solo HTTP/HTTPS) con un fallback al primo endpoint osservato. Niente più URL segnaposto `https://target.tld` nei tuoi report.
- **Diagnostica trasparente** — ogni passo del filtro (scope, gravità, deduplicazione) registra i suoi conteggi prima/dopo nel feed live. Quando una caccia termina con 0 report, il feed termina con un blocco "Perché nessun report?" che spiega esattamente dove ogni potenziale risultato è stato scartato, con suggerimenti concreti per i passaggi successivi adattati alla tua configurazione specifica.
### Una bozza reale di Hunt Mode
Ecco un estratto oscurato da una bozza reale prodotta da Hunt Mode su un LMS governativo in 4 minuti:```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 ... ]
Questo è un report per bounty valido. Redatto mentre facevi altro.
Il Workbench è ciò che trasforma PenScope da "strumento di ricognizione passiva" a "tutto ciò per cui apriresti Burp". Clicca ⌘ Workbench nell'intestazione del popup e si apre una scheda Chrome a finestra intera con sei strumenti, che condividono lo stato con la tua scansione.
Hai catturato una richiesta che vuoi modificare? Cliccala nella Site Map. La richiesta completa — metodo, URL, header, corpo — viene caricata nell'editor. Modifica qualsiasi cosa. Premi Send (o Ctrl+Enter). La risposta viene visualizzata a destra con stato, dimensione, tempo e il contesto di autenticazione attivo che l'ha inviata.
La barra della cronologia mantiene gli ultimi 50 invii. Tre pulsanti trasformano la richiesta corrente in artefatti utilizzabili: Copia come curl (per terminali e report), Invia a Intruder (con gli stessi header e corpo precaricati), Invia risposta a Diff.
Prendi qualsiasi richiesta. Racchiudi il valore che vuoi testare in §...§. Scegli un set di payload. Premi Start.
Libreria di payload integrata:
Oppure incolla la tua lista personalizzata. Quattro modalità di attacco: Sniper (una posizione alla volta), Cluster bomb (ogni combinazione), Pitchfork (posizioni in sincronia), Battering ram (stesso payload ovunque). Tabella dei risultati in tempo reale con rilevamento anomalie — le righe in cui il codice di stato o la dimensione della risposta differiscono dalla baseline vengono evidenziate.
Limite massimo: 200 richieste per attacco. Non DOSare accidentalmente il tuo target per bounty.
Conversioni reversibili per i formati che i cacciatori toccano ogni giorno:``` Base64 ↔ B64-URL ↔ URL ↔ HTML ↔ Hex ↔ MD5 / SHA-1 / SHA-256 / SHA-512
Plus a dedicated **JWT card**: paste a token, decode the header and payload, edit either, then forge a new one. Two forge modes:
- **alg=none** — the classic JWT auth bypass test (server trusts unsigned tokens)
- **HS256** — sign with a guessed weak secret (`secret`, `key`, `password`, `jwt-secret` are the common ones)
Output is a single token, copy-paste ready.
### Diff
Due riquadri di testo. Invia le risposte da Repeater con un clic. Premi `Compute Diff`. PenScope esegue un LCS line-diff e codifica a colori il risultato: `+` per aggiunte, `−` per rimozioni. Riepilogo dei conteggi in alto.
Questo è il killer per la conferma di IDOR. "La risposta per l'Utente A è *la stessa* di quella per l'Utente B, o il server ha effettivamente restituito i dati dell'Utente B?" Diff te lo dice in tre secondi.
### Site Map
Albero gerarchico di ogni endpoint catturato da PenScope, organizzato per host → percorso. Pillole dei metodi (`GET`, `POST`, `DELETE`...). Badge dei codici di stato per nodo, codificati a colori verde/giallo/arancione/rosso. Clicca su qualsiasi percorso per caricarlo in Repeater.
L'intera superficie d'attacco, in una vista, pronta per essere testata.
### Auth Contexts + Authorization Matrix
Questo è il differenziatore. Burp non include questa funzionalità.
Salva profili di autenticazione nominati. Ogni profilo = un nome + un insieme di cookie + un insieme di header. Creali effettuando l'accesso come ciascun utente, copiando i loro cookie di sessione + l'header Authorization, incollandoli nell'editor. Aggiungi note ("piano a pagamento", "ruolo di sola lettura", "personale interno"). Un clic cambia il contesto attivo. Ogni richiesta di Repeater / Intruder / probe ora viene inviata con quelle credenziali.
Poi clicca su `Run authorization matrix`. PenScope colpisce ogni endpoint × ogni contesto e mostra una griglia:```
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
Le stelle contrassegnano le righe dove i contesti discordano. Quelle righe sono i tuoi reperti IDOR e BAC, automaticamente emersi.
Un cacciatore tipico passa un intero pomeriggio a testare manualmente ogni endpoint come ogni utente, prendendo appunti in un documento. PenScope lo fa in 30 secondi e codifica a colori i risultati.
Stesso motore dati, tre viste. Scegli quella che corrisponde a ciò che stai facendo.
Cambia modalità con la pillola Classic / Red / Blue nell'intestazione del popup. Ogni scheda ricorda in quale modalità eri l'ultima volta. I colori del tema cambiano con la modalità.
Clicca su Export ▾ nell'intestazione del popup. Dieci formati, due scopi:
Il report Markdown è progettato per la condivisione — ogni credenziale viene redatta, l'intestazione del report lo dice esplicitamente. Il JSON è progettato per la sincronizzazione con il tuo compagno di caccia — ogni credenziale viene inviata intatta.
PenScope e Burp risolvono lo stesso problema da lati diversi. PenScope vive nel tuo browser; Burp è un proxy MITM. Entrambi hanno il loro posto. Ecco il confronto onesto.
Dove PenScope vince: gratuito, configurazione più rapida, nativo del browser (usa la tua sessione reale, nessun ballo di certificati), correlazione catena, strumentazione modalità difensore, ponte AI.
Dove vince Burp: l'intercettazione a livello TLS ti consente di vedere e modificare le richieste prima che lascino lo stack di rete — utile per app native e contrabbando websocket. Collaborator ti fornisce infrastruttura di callback out-of-band per XXE / SSRF ciechi.
Se fai bug bounty esclusivamente nel tuo browser su app web, PenScope sostituisce Burp per circa il 95% del tuo flusso di lavoro quotidiano. Se fai reverse engineering di app mobili o testi client pesanti, Burp è ancora tuo amico.
PenScope non invia nulla senza azione esplicita dell'utente. Non c'è:
Il traffico in uscita avviene solo in tre casi:
Zero pacchetti npm. Zero script CDN. Zero SDK di terze parti. Puro vanilla JavaScript, manifest MV3, superficie di attacco della supply chain zero.
Architettura, i 36 attacchi probe, i 13 pattern di catena, la mappa dei file, e perché nulla di tutto ciò ha bisogno di un passaggio di build.
┌──────────────────────────┐
│ 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 motore, tre modalità, tre superfici.** Il motore dati è indipendente dalla modalità — ogni campo di stato viene raccolto allo stesso modo indipendentemente dalla vista in cui ci si trova. Le modalità sono scelte di tema + renderer sugli stessi dati. La Workbench e la Hunt Mode sono schede Chrome autonome che condividono `state[tabId]` tramite gestori di messaggi in background.
Gli override delle variabili CSS (`body.mode-red`, `body.mode-blue`) ri-tematizzano tutto senza toccare un singolo selettore di regole. Ecco perché la Classic mode è identica byte per byte all'esperienza v5.9.
---
## Performance
PenScope è su ogni scheda, sempre. Per impostazione predefinita, evita l'arricchimento costoso per ~50 suffissi di host rumorosi noti (CDN video come `googlevideo.com`, reti pubblicitarie come `doubleclick.net`, endpoint di telemetria come `sentry.io`, grandi CDN statiche come `gstatic.com`). Centinaia di richieste di chunk di `googlevideo.com` al minuto su YouTube non passano più attraverso 14 regex AUTH_PATTERN + rilevamento parametri percorso + ricerca Swagger — vengono registrate come endpoint (quindi la Site Map le include ancora) e saltate per il resto.
Stesso percorso veloce per i tipi di risorsa `image`/`media`/`font`/`stylesheet`/`object`/`ping` su qualsiasi host. I bug quasi mai si nascondono nei parametri URL `.css`.
Le riescansioni DOM degli script di contenuto vengono eseguite tramite `requestIdleCallback` (con un intervallo minimo di 15 secondi tra le scansioni) e saltano completamente quando la scheda è nascosta. MutationObserver filtra le modifiche di solo testo (ticchettii di timer, aggiornamenti di dati carattere) in modo che il continuo rimescolamento DOM di YouTube non inneschi una riescrizione completa ogni 3 secondi.
Override disponibile: casella di controllo **"Full capture on noisy hosts"** nel menu a discesa Probe. Quando si esegue specificamente un audit di YouTube/Twitch/Sentry/ecc. COME target, spuntarla e il percorso veloce viene bypassato.
---
## I 45 attacchi probe
Eseguiti su richiesta. Tre livelli di aggressività con un contratto vincolante: **Careful** = solo GET/HEAD/OPTIONS con un intervallo minimo di 200 ms tra le richieste; **Medium** = aggiunge POST per operazioni di lettura-shape (≤3 paralleli); **Full** = tutti i metodi inclusi DELETE/PUT/PATCH più raffiche di race condition (≤10 paralleli). Intestazioni personalizzate incollate in ogni richiesta. La modalità Stealth mescola l'ordine dei passi con Fisher-Yates e aggiunge un jitter dello 0–80% ai ritardi tra i passi. Il metodo previsto per ogni passo viene controllato a secco rispetto al livello attivo all'avvio del probe; i passi bloccati sono elencati nel registro diagnostico.
| # | Attacco | Cosa fa |
|---|---|---|
| 1 | GraphQL introspection | Scarica schema, tipi, query, mutazioni |
| 2 | Source map harvesting | Scarica `.map`, estrae segreti + endpoint |
| 3 | Swagger/OpenAPI fetch | `/swagger.json`, `/openapi.json`, ecc. |
| 4 | OPTIONS preflight | Preflight CORS su ogni percorso API |
| 5 | Recon path probing | `/admin`, `/.env`, `/.git/HEAD`, `/actuator` |
| 6 | API prefix suffix brute | `/api/v1/<parola>` |
| 7 | Smart suffix bruteforce | Prefisso × suffisso mescolato furtivamente |
| 8 | BAC (broken access control) | Endpoint che modificano lo stato non autenticati |
| 9 | IDOR auto-test | Sostituzione ID + confronto stesso corpo |
| 10 | CORS reflection test | Riflessione dell'Origine con credenziali |
| 11 | Method tampering | Scambio GET/POST/PUT/PATCH/DELETE |
| 12 | Open redirect probe | Varianti `?redirect=evil.com` |
| 13 | Race condition probe | Richieste concorrenti su endpoint sensibili all'idempotenza |
| 14 | HTTP parameter pollution | `?id=1&id=2` |
| 15 | Subdomain enumeration | Da log CT + traffico osservato |
| 16 | GraphQL field fuzzing | Sonda ogni campo introspettato per l'autenticazione |
| 17 | JWT alg=none acceptance | Il server si fida di token non firmati? |
| 18 | Host header injection | Varianti `X-Forwarded-Host` |
| 19 | Cache poisoning | Iniezione di intestazione non chiavata |
| 20 | IDOR confirmed sameBody | Somiglianza del corpo tra ID |
| 21 | Auth removal test | Rimuovi cookie, cerca 200 |
| 22 | CSRF validation gap | Endpoint che modificano lo stato senza token |
| 23 | gRPC reflection | Servizio di riflessione gRPC esposto |
| 24 | Compression oracle (BREACH) | Euristico, non sfrutta effettivamente |
| 25 | WebSocket hijacking | Connessioni WS cross-origin |
| 26 | Cache poison probe | Input non chiavato basato su intestazione |
| 27 | Timing oracle | Variazione di tempistica sullo stesso endpoint |
| 28 | COOP/COEP bypass | Forza isolamento cross-origin |
| 29 | Storage partition | Isolamento storage cross-sito |
| 30 | Smart recursive discovery | 3 ondate di probing, concatenate dalle risposte precedenti |
| 31 | Parameter discovery | 38 parametri nascosti brute (`debug`, `admin`, `_method`, `bypass`...) |
| 32 | SSTI probing | `{{7*7}}`, `${7*7}`, `<%=7*7%>` |
| 33 | XXE probing | XML con entità esterne |
| 34 | CRLF injection | `%0d%0a` nei parametri di reindirizzamento |
| 35 | API version downgrade | `/v1/`, `/v2/` per ogni `/vN/` osservato |
| 36 | Prototype pollution | `__proto__` / `constructor.prototype` nei corpi JSON |
| 37 | SSRF param probing | 26 nomi di parametri SSRF con payload di metadati cloud; segnala contenuto metadati riflesso |
| 38 | NoSQL operator injection | `{"$ne":null}` / `{"$gt":""}` / `{"$exists":true}` su campi ID JSON |
| 39 | GraphQL alias amplification | Query con 50 alias → superficie amplificazione DoS (solo full) |
| 40 | GraphQL batch amplification | Batch array JSON di 25 elementi → amplificazione DoS (solo full) |
| 41 | Cache deception | Stile `/api/me/avatar.css` — contenuto sensibile memorizzato nella cache dietro estensioni statiche |
| 42 | Subdomain takeover | Probe in stile HEAD dei sottodomini acquisiti; corrisponde alle firme di takeover GitHub Pages / S3 / Heroku / Netlify / Vercel / Bitbucket / Shopify |
| 43 | TabNabbing | `<a target="_blank">` cross-origin senza `rel="noopener"` |
| 44 | postMessage origin correlation | Listener `addEventListener("message")` senza controlli di origine |
| 45 | Service Worker scope abuse | Segnala ambiti SW ampi (soprattutto `/`) |
Più **8 pacchetti di attacco consapevoli dello stack** che si attivano automaticamente quando la Red mode rileva il framework corrispondente: Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress. Ogni pacchetto ha 4–9 test specifici dello stack. Il solo pacchetto di Spring Boot colpisce `/actuator/heapdump`, `/actuator/env`, `/jolokia/list`, `/h2-console`.
---
## I 13 schemi di catena
I singoli risultati sono rumore. I risultati composti sono exploit. L'analizzatore di catene di PenScope esamina l'intero stato ed emette catene in cui più segnali si combinano in qualcosa di sfruttabile.
1. **Auth bypass su endpoint sensibile** — autenticazione mancante confermata + percorso admin/billing/utente
2. **BAC distruttivo** — endpoint vulnerabile con `delete`/`remove`/`purge` nel percorso
3. **Mutazione GraphQL vulnerabile a CSRF** — CSRF mancante confermato + è una mutazione
4. **Token auth esposto + API attiva** — JWT in memoria + endpoint corrispondenti
5. **IDOR confermato con dati sensibili** — risposta con stessa struttura tra ID
6. **Riflessione CORS CON credenziali** — bypass completo SOP
7. **Reindirizzamento aperto su flusso di autenticazione** — parametro di reindirizzamento su percorsi callback OAuth
8. **Route admin nascoste** — 3+ percorsi admin nel codice mai osservati nel traffico
9. **JWT alg=none accettato** — il server si fida di token non firmati
10. **Segreti trapelati da source map** — file `.map` distribuiti in produzione con chiavi hardcoded
11. **Perdita IP interno WebRTC** — IP privati esposti tramite STUN
12. **Cluster di risultati di probe ricorsivo** — 3+ risultati sensibili su più endpoint
13. **Superficie RCE specifica dello stack** — pacchetto stack ha trovato actuator/Ignition/ecc. esposti
Ogni catena ha una gravità, un riepilogo, un comando di riproduzione, i passi successivi e un punteggio di confidenza. Ordinato per `severity × confidence`. Visualizzato nella parte superiore della Red mode e nella parte superiore di ogni report Claude.
---
## Punteggio di salute (Blue mode)```
score = max(10, 100 − min(90, crit×22 + high×9))
Strict on purpose. Only criticals and highs move the number. Mediums and lows still surface in the count tiles and Top-5 fixes — they're worth fixing — but they don't drag the score.
Floor at 10 so a catastrophic site reads "10/100", not "0/100" (which the user couldn't distinguish from "scan failed").
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
I quattro vecchi file di riferimento (`red-attacks.js`, `blue-fixes.js`, `blue-csp.js`, `blue-compliance.js`) sono stati rimossi nella v6.3 — il loro contenuto era già stato integrato in `popup.js` / `background.js` dalla v6.0; i file standalone erano codice morto. `STACK_ATTACK_PACKS` è ora un vero export di modulo ES da `src/probe/stack-packs.js`.
---
## Nessun passaggio di build```bash
git clone https://github.com/spider12223/PenScope
# That's it.
Nessun npm install. Nessun webpack. Nessun babel. Nessun TypeScript. Nessun bundler. Puro vanilla JavaScript. Il tag <script> in popup.html punta direttamente a popup.js. Il service worker carica direttamente background.js. Il CSS è inline in <style>.
L'implementazione MD5 è di circa 50 righe di riferimento RFC 1321 inline (perché crypto.subtle non espone MD5). Il diff LCS è di circa 30 righe. La firma JWT utilizza nativamente crypto.subtle.sign. Il correlatore di catene è semplice regex + iterazione di array. Tutto ciò che leggi in questo codice è esattamente ciò che viene eseguito nel browser.
Uno strumento di riconoscimento che viene distribuito con 200 dipendenze npm transitive ha 200 pacchetti di superficie di attacco della supply chain. PenScope ne ha zero.
Segnalazioni di bug e PR sono benvenuti. Alcune linee guida:
package.json. Se hai bisogno di una piccola utility, scrivi 20 righe.state[tabId]. Non introdurre nuovi store globali.:focus-visible, etichette ARIA, contrasto ≥4.5:1.new Function(). I service worker MV3 vietano il codice dinamico. Usa dichiarazioni di funzioni con nome + args per chrome.scripting.executeScript.MIT. Usalo, forkalo, pubblicalo.
Se PenScope ti trova un critico, apri una segnalazione e raccontacelo. Raccogliamo storie di guerra.
Costruito da cacciatori, per cacciatori.
rolescopeexpAccessibility.getFullAXTree rivela aria-label sensibili (pulsanti admin/sudo/delete/destroy). Storage.getCookies espone i cookie partizionati CHIPS che chrome.cookies.getAll non vede.<script type="application/json"> (Next __NEXT_DATA__, Nuxt __NUXT__, Remix __remixContext, Apollo __APOLLO_STATE__) vengono analizzati per endpoint + campi ID, non solo scansionati con regex.curl per riga, pulsante unauth per riga (ripete la richiesta senza cookie, mostra verdetto affiancato). Vista tabella route che comprime /users/123, /users/124 in /users/{id} con conteggi. Barra di pivot automatica per sottodomini admin.*, api.*, internal.*.ffuf -w.window.__ps_ctx non perde più gli header Authorization dell'utente nel contesto della pagina dopo il completamento del probe. I comandi di riproduzione di catena oscurano i cookie di sessione per impostazione predefinita (la modalità Red ha un toggle attivo per valori reali). Il probe IIFE cattura fetch/JSON/Promise/atob/btoa/ecc. all'avvio in modo che le pagine strumentate con analytics non possano intercettare il probe sovrascrivendo i globali. Font locali — zero richieste in uscita all'apertura del popup."type":"module". Albero src/ in posizione; STACK_ATTACK_PACKS estratto in src/probe/stack-packs.js. I moduli rimanenti sono stub che documentano il percorso di estrazione.| Set | Conteggio | Caso d'uso |
|---|
| XSS | 40 | Test di riflessione, DOM XSS, varianti SVG/iframe |
| SQLi | 30 | Blind booleano, basato su errori, basato sul tempo, UNION |
| LFI / Path Traversal | 28 | Varianti di codifica, Windows + Linux, log poisoning |
| SSTI | 18 | Jinja2, Twig, Freemarker, Velocity, Smarty |
| SSRF | 22 | Varianti localhost, metadati AWS/Azure/GCP, gopher/dict |
| Command Injection | 24 | Bash, PowerShell, bypass IFS |
| ID 1-100 | 100 | Per enumerazione IDOR |
| Auth bypass | 25 | Trucchi di path, escalation di ruolo, bypass SQL auth |
| Nomi utente comuni | 25 | admin, root, test, support, service... |
| Modalità | Progettato per | Cosa è a schermo |
|---|
| 🟣 | Classic | Flusso di lavoro familiare, dati completi | Ogni scheda, ogni dettaglio. Il PenScope originale. |
| 🔴 | Red | Test offensivi | Binario della catena di exploit in alto con pulsanti di armamento (curl, Nuclei YAML, richiesta Burp, bozza rapporto H1, coda Claude). I pacchetti di attacco consapevoli dello stack si attivano automaticamente sui framework rilevati (Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress). Prima la catena, schede classiche compresse sotto. |
| 🔵 | Blue | Difensori / revisione sicurezza | Punteggio di salute (0-100, rigoroso — contano solo critici e alti). Top 5 correzioni prioritarie per gravità × facilità, ciascuna con snippet copia-incolla in Nginx / Apache / IIS / Express / Django / Laravel / Rails / ASP.NET. Generatore CSP dal traffico osservato. Audit di conformità per 7 framework. Snapshot e diff di regressione. Monitoraggio continuo con notifiche Chrome quando nuovi segreti trapelano. |
| Esportazione | Include credenziali? | Usalo per |
|---|
| JSON (dati completi) | ✅ Sì | Formato per condivisione team. Due cacciatori che lavorano sullo stesso obiettivo necessitano di contesti di autenticazione condivisi per riprodurre i reperti. Invia tramite Signal / canale crittografato. |
| 📄 Report Completo (.md) | ❌ Redatto | Invio bounty, interazione con il cliente, ovunque esca dal tuo team. I valori degli header di autenticazione (Authorization, Cookie, X-API-Key, X-Auth-Token, X-CSRF-Token, X-Amz-Security-Token, ecc.) sostituiti con <redacted, N caratteri>. Include rapporti redatti dalla modalità Hunt incorporata, colpi dei pacchetti di attacco stack, avvisi di monitoraggio continuo e stato di triage Marked-as-Fixed. |
| Lista URL Burp | Solo elenco URL | Incolla nell'ambito target di Burp o alimenta ffuf/nuclei |
| Wordlist parametri | Solo nomi | Dizionari per fuzzing — parametri query + nomi input form + nomi campi nascosti |
| Wordlist parametri (ffuf) | Solo nomi | Stessi dati emessi come righe param=FUZZ per ffuf -w |
| Endpoint (txt) | Solo elenco URL | Method/status/path/host/tags/size separati da tab — rotte osservate + scoperte |
| 📤 Esportazione HAR | Header + corpi | Cattura HAR-1.2 completa che puoi importare in Chrome DevTools / un visualizzatore HAR / passare a un compagno di squadra |
| 🔧 Specifica Swagger (.yaml) | Solo elenco URL | Specifica OpenAPI 3.0 ricostruita dal traffico osservato |
| 🗺️ Source Maps (JSON) | Solo estratti sorgente | Source maps analizzate complete con alberi di file, segreti, rotte, variabili d'ambiente, dipendenze |
| ⚔️ Template Nuclei (.yaml) | Solo URL probe | Drop-in ~/.config/nuclei/custom/ per scansione continua |
| Caratteristica | PenScope (gratuito) | Burp Suite Pro ($449/anno) |
|---|
| Repeater | ✅ | ✅ |
| Intruder (4 modalità di attacco) | ✅ | ✅ |
| Decoder (B64/URL/Hex/JWT) | ✅ | ✅ |
| Comparer / Diff | ✅ | ✅ |
| Target / Mappa del sito | ✅ | ✅ |
| Scanner attivo | ✅ (45 probe + 8 pacchetti stack) | ✅ |
| Gestione contesto sessione/autenticazione | ✅ (profili salvati + matrice) | ✅ (basato su regole) |
| Tester matrice autorizzazioni | ✅ (integrato) | ❌ (estensione a pagamento) |
| Correlazione catena (reperti composti) | ✅ (13 pattern) | ❌ |
| Euristico takeover sottodominio | ✅ (8 firme di servizio) | ❌ (estensione a pagamento) |
| Test superficie DoS GraphQL (alias + batch) | ✅ | ❌ |
| Pulsante replay non autenticato per endpoint | ✅ | ❌ |
| Import + export HAR | ✅ (andata e ritorno) | ✅ (solo andata) |
| Diff IndexedDB (cattura perdite stato client) | ✅ | ❌ |
| Cattura cookie partizionati CHIPS | ✅ | ❌ |
| Parser JSON island (dati idratazione Next/Nuxt/Remix) | ✅ | ❌ |
| Mappatura conformità (PCI/NESA/SAMA/ISO/OWASP) | ✅ (7 framework) | ❌ |
| Generatore CSP dal traffico osservato | ✅ | ❌ |
| Diff di regressione (snapshot + confronto) | ✅ | ❌ |
| Integrazione AI (Claude bidirezionale) | ✅ | ❌ |
| Modalità caccia autonoma (redige rapporti H1 mentre dormi) | ✅ | ❌ |
| Tempo di configurazione | 60 secondi | ~30 minuti (proxy + certificato + configurazione browser) |
| Intercettazione proxy a livello TLS | ❌ (limitazione browser) | ✅ |
| Test out-of-band (Collaborator) | ❌ (pianificato) | ✅ |
| Marketplace delle estensioni | ❌ | ✅ |
| Costo | $0 | $449 / utente / anno |
| State | Score |
|---|
| 0 crit, 0 high | 100 (pulito) |
| 1 high | 91 |
| 3 highs | 73 |
| 1 critical | 78 |
| 1 critical + 3 highs | 51 |
| 3 criticals | 34 |
| 5+ criticals | 10 (pavimento) |
| Autorizzazione | Perché |
|---|
webRequest | Cattura ogni richiesta/risposta senza rifetching |
webNavigation | Rileva i cambiamenti di route SPA pushState/replaceState (v6.3+) in modo che gli endpoint di app.com non si riversino nello stato della nuova origine quando la SPA naviga tra origini diverse |
activeTab | Legge l'URL della scheda corrente + invia messaggi content-script |
scripting | Inietta esecutori di probe, stack pack e richieste Workbench nel contesto della pagina |
tabs | Mappa i risultati alla scheda corretta; apre il Workbench in una nuova scheda |
cookies | Legge i cookie HttpOnly che document.cookie non può vedere |
debugger | Richiesto per la modalità Deep — abilita CDP per corpi di risposta completi, introspezione runtime, estrazione sorgenti, problemi di audit, albero di accessibilità, cookie partizionati |
notifications | Avvisi di monitoraggio continuo su nuove fughe di segreti |
alarms | Tick di intervallo di 5 minuti per il monitoraggio continuo |
storage | Persiste lo stato (session) e gli snapshot (local) tra riavvii del SW |
<all_urls> permesso host | La cattura è indipendente dal target; l'utente controlla quale scheda è aperta |