Whitebox pentesting: un processo, non una mentalità
Le quattro fasi del whitebox pentesting: code review, local testing, proof of concept e patching, e perché l'accesso al sorgente trova bug che il blackbox testing non può vedere strutturalmente.

Il whitebox pentesting è una metodologia di security assessment basata sull’accesso completo al codice sorgente di un’applicazione e al suo ambiente di sviluppo. Questa singola differenza rispetto al blackbox testing cambia quasi tutto quello che viene dopo: cosa cerchi, come dai priorità e cosa significa davvero avere una “prova” di una vulnerabilità.
Cosa compra davvero l’accesso al sorgente
Il blackbox testing lavora dall’esterno: tocchi l’applicazione e inferisci cosa c’è dietro. Il whitebox testing parte dall’interno, con:
- Accesso parziale o completo al codice sorgente.
- Conoscenza dell’ambiente di sviluppo.
- Accesso ad account con livelli di privilegio diversi.
- Spazio per un’analisi molto più profonda, di quelle che fanno emergere vulnerabilità nascoste e non ovvie.
Nota: il trade-off è il tempo, non la completezza. Leggere e prioritizzare una codebase richiede più tempo che sparare richieste a un endpoint, ma trova classi di bug che un approccio blackbox non può trovare per struttura, perché alcune vulnerabilità non producono sintomi esterni finché non sai esattamente dove guardare.
Perché vale lo sforzo extra
- Più vulnerabilità, comprese quelle che non si vedono dall’esterno. Uno scan blackbox riporta solo ciò che può osservare da fuori. Il whitebox trova bug di logica, race condition e punti di injection che non producono nessun sintomo visibile senza il trigger giusto.
- Alcuni bug sono trovabili solo con accesso al codice. Alcune classi di vulnerabilità, soprattutto nella logica di autorizzazione e nel flusso dati interno, sono praticamente invisibili se non puoi leggere come il controllo è davvero implementato.
- Si integra bene in un ciclo DevOps. Visto che il tester lavora già sullo stesso source tree e nello stesso ambiente del team di sviluppo, i risultati si mappano direttamente sulla pipeline esistente invece di restare in un report separato che nessuno integra.
- È la scelta giusta per sistemi critici o sensibili. Quando il costo di una vulnerabilità mancata è alto, il tempo extra del whitebox testing è un prezzo ragionevole.
- Produce patch, non solo finding. Avendo visto l’implementazione reale, puoi proporre una correzione alla root cause e non una mitigazione generica.
Le quattro fasi
Il processo che HackTheBox descrive per gli engagement whitebox si divide in quattro fasi, ognuna che alimenta la successiva, con loop di ritorno verso il local testing e il proof of concept quando serve.
Code Review -> Local Testing -> Proof of Concept -> Patching & Remediation
^ |
'-------------------'
1. Code review
Questa fase parte dall’analisi statica del sorgente e ha un solo obiettivo: capire design e funzionalità dell’app abbastanza bene da sapere quali funzioni meritano il tuo tempo. Per farlo serve confidenza con i linguaggi usati dalla codebase e abbastanza familiarità con i loro failure mode tipici da riconoscere al volo un pattern rischioso.
Tre modi per dare priorità a cosa guardare prima:
- Per design. Un passaggio preliminare sulla struttura dell’app ti dice dove probabilmente vivono le operazioni sensibili prima ancora di leggere una singola funzione in dettaglio.
- Per ricerca. Strumenti come
findegreplocalizzano direttamente le funzioni critiche. Cercareexec(in una codebase PHP è un modo da cinque secondi per trovare ogni punto in cui vengono invocati comandi shell.
grep -rn "exec(\|system(\|eval(\|unserialize(" --include="*.php" .
- Per uso. Combina analisi dinamica e statica, e presta attenzione alle aree che sembrano deboli o vanno in errore durante l’uso normale. Un messaggio di errore che espone uno stack trace spesso indica esattamente la funzione da rivedere dopo.
2. Local testing
Una volta che hai una shortlist di funzioni, il passo successivo è testarle in modo dinamico, in un ambiente controllato che replichi la produzione abbastanza bene da rendere applicabile ciò che trovi al target reale.
Gli obiettivi qui sono specifici:
- Attivare la funzione target.
- Tracciare esattamente quale input la raggiunge e in quale forma.
- Confermare se è davvero vulnerabile e, soprattutto, davvero sfruttabile, non solo teoricamente fragile.
Quest’ultima distinzione conta. Una funzione che gestisce male un input ma non è raggiungibile da nessun path reale verso l’utente è un code smell, non un finding.
3. Proof of concept
Qui una vulnerabilità teorica diventa un exploit funzionante. Un PoC deve:
- Funzionare davvero, non solo dimostrare il concetto in teoria.
- Essere documentato passo per passo, incluso ogni payload usato, così qualcun altro può riprodurlo senza tirare a indovinare.
- Spesso bypassare i meccanismi di sicurezza presenti nell’app reale, perché l’ambiente locale raramente ha tutti i controlli di produzione attivi.
- Spesso prendere la forma di uno script, in Python, JavaScript o quello che si adatta meglio, così l’exploit diventa un artefatto ripetibile e non una sequenza manuale una tantum.
Un exploit che funziona solo quando lo esegui tu a mano non è un finding su cui un team può lavorare. Automatizzarlo è ciò che trasforma “ho trovato un bug” in “ecco la condizione esatta che lo attiva, ed ecco come verificare che sia stato chiuso”.
4. Patching & remediation
L’ultima fase è quella in cui il whitebox testing ripaga di più:
- Proporre e testare una patch per ogni vulnerabilità identificata, nello stesso ambiente di test.
- Confermare che la patch corregga davvero il problema senza rompere la funzionalità originale: una correzione che introduce una regressione non è una correzione.
- Dare ai team di sviluppo dettagli precisi su cosa cambiare nel codice, non solo una descrizione del sintomo.
- Raccomandare pratiche di secure coding che impediscano la ricomparsa della stessa classe di bug altrove nella codebase.
- Rieseguire il PoC dopo l’applicazione della patch, per confermare che sia davvero chiuso e non solo più difficile da attivare.
- Scrivere finding, PoC e raccomandazioni di patching in un report che il team di sviluppo possa usare direttamente.
Nota: rieseguire il PoC dopo il patching non è opzionale. Una patch che cambia l’error handling può far sembrare che l’exploit sia fallito mentre la condizione sottostante è ancora raggiungibile da un path leggermente diverso.
Il punto di tutto questo
Il whitebox pentesting non è blackbox testing con più visibilità: è una disciplina diversa, costruita attorno alla lettura del codice con un’intenzione precisa, alla prioritizzazione di ciò che vale davvero la pena sfruttare, alla prova con qualcosa di riproducibile e alla chiusura del ciclo con una patch verificata, non solo proposta. La code review decide tutto quello che viene dopo: se prioritizzi le funzioni sbagliate, il resto del processo, per quanto rigoroso, si spreca su qualcosa che non conta.