Applicazione Bancaria Vulnerabile 🏦
Un'applicazione web deliberatamente vulnerabile per esercitarsi nel testing della sicurezza applicativa di Web, API e LLM, nella revisione sicura del codice e nell'implementazione della sicurezza nelle pipeline CI/CD.
⚠️ AVVISO: Questa applicazione è intenzionalmente vulnerabile e dovrebbe essere utilizzata solo per scopi educativi in ambienti isolati.

Panoramica
Questo progetto è una semplice applicazione bancaria con molteplici vulnerabilità di sicurezza integrate. È progettato per aiutare ingegneri della sicurezza, sviluppatori, stagisti, analisti QA e professionisti DevSecOps a conoscere:
- Vulnerabilità comuni di applicazioni web e API
- Vulnerabilità AI/LLM
- Pratiche di codifica sicura
- Automazione dei test di sicurezza
- Implementazione DevSecOps
Funzionalità e Vulnerabilità
Funzionalità Bancarie Principali
- 🔐 Autenticazione e Autorizzazione Utente
- 💰 Gestione del Saldo del Conto
- 💸 Trasferimenti di Denaro
- 📝 Richieste di Prestito
- 👤 Caricamento dell'Immagine del Profilo
- 📊 Cronologia delle Transazioni
- 📈 Dashboard di Analisi delle Transazioni (basata su GraphQL)
- 🔑 Sistema di Reset della Password (PIN a 3 cifre)
- 💳 Gestione delle Carte Virtuali Multi-Valuta
- 💱 Ricarica delle Carte Virtuali dal Saldo Principale in USD con conversione di valuta integrata (
USD, GBP, NGN, JPY, EUR, QAR, BTC, ETH)
- 🛒 API Pubblica di Pagamento per Commercianti per integrazioni ecommerce/demo intenzionalmente vulnerabili
- 📱 Sistema di Pagamento Bollette
- 🤖 Agente di Supporto Clienti AI (LLM reale con API DeepSeek / Modalità Mock)

Vulnerabilità Implementate
-
Autenticazione e Autorizzazione
- SQL Injection nel login
- Implementazione JWT debole
- Autorizzazione a livello di oggetto non corretta (BOLA)
- Autorizzazione a livello di proprietà dell'oggetto non corretta (BOPLA)
- Mass Assignment ed Esposizione Eccessiva di Dati
- Meccanismo di reset della password debole (PIN a 3 cifre)
- Token memorizzato in localStorage
- Nessuna invalidazione del token lato server
- Nessuna scadenza della sessione
-
Sicurezza dei Dati
- Divulgazione di informazioni
- Esposizione di dati sensibili
- Archiviazione delle password in chiaro
- Punti di SQL injection
- Esposizione di informazioni di debug
- Messaggi di errore dettagliati esposti
-
Vulnerabilità delle Transazioni
- Nessuna validazione dell'importo
- Possibili trasferimenti con importi negativi
- Nessun limite di transazione
- Race condition nei trasferimenti e negli aggiornamenti del saldo
- Divulgazione di informazioni nella cronologia delle transazioni
- Nessuna validazione sui conti del destinatario
-
Operazioni sui File
- Caricamento di file senza restrizioni
- Vulnerabilità di path traversal
- Nessuna validazione del tipo di file
- Directory traversal
- Nessun limite alla dimensione dei file
- Denominazione dei file non sicura
- Server-Side Request Forgery (SSRF) tramite importazione dell'immagine del profilo basata su URL
-
Gestione della Sessione
- Vulnerabilità dei token
- Nessuna scadenza della sessione
- Chiavi segrete deboli
- Esposizione dei token negli URL
-
Difetti Lato Client e Server
- Cross Site Scripting (XSS)
- Cross Site Request Forgery (CSRF)
- Riferimenti diretti a oggetti non sicuri
- Nessun rate limiting
-
Vulnerabilità delle Carte Virtuali
- Mass Assignment negli aggiornamenti dei limiti delle carte
- Mass Assignment nella gestione del tasso di cambio per la ricarica delle carte
- Generazione prevedibile del numero della carta
- Archiviazione in chiaro dei dettagli della carta
- Nessuna validazione sui limiti delle carte
- BOLA nelle operazioni sulle carte
- Race condition negli aggiornamenti del saldo
- Divulgazione di informazioni sui dettagli della carta
- Nessuna verifica delle transazioni
- Mancanza di monitoraggio dell'attività della carta
- Conversione di valuta controllata dal client durante la ricarica della carta
-
Vulnerabilità del Pagamento Bollette
- Nessuna validazione sugli importi di pagamento
- SQL injection nelle query degli emittenti di bollette
- Divulgazione di informazioni nella cronologia dei pagamenti
- Numeri di riferimento prevedibili
- Esposizione della cronologia delle transazioni
- Nessuna validazione sui conti degli emittenti di bollette
- Race condition nell'elaborazione dei pagamenti
- BOLA nell'accesso alla cronologia dei pagamenti
- Limiti di pagamento mancanti
-
Vulnerabilità dell'API di Pagamento per Commercianti
- Password dei commercianti e chiavi API in chiaro
- Chiavi API restituite nelle risposte di registrazione e login
- Numero carta/CVV in chiaro accettati dalle API di pagamento per commercianti
- Ricerche di commercianti e carte soggette a SQL injection
- Mancanza di idempotenza, protezione dal replay, limiti di pagamento e rate limiting
- Lacune nell'autorizzazione a livello di oggetto nella ricerca dei pagamenti del commerciante
- Motivi dettagliati di rifiuto del pagamento ed esposizione di dati di debug
- Generazione prevedibile del codice di autorizzazione
-
Vulnerabilità del Supporto Clienti AI
- Prompt Injection (CWE-77)
- Divulgazione di informazioni basata su AI (CWE-200)
- Autorizzazione non corretta nel contesto AI (CWE-862)
- Esposizione di informazioni del sistema AI (CWE-209)
- Validazione insufficiente degli input per i prompt AI (CWE-20)
- Accesso diretto al database tramite manipolazione dell'AI
- Attacchi di override del ruolo dell'AI
- Vulnerabilità di Context Injection
- Accesso non autorizzato ai dati assistito dall'AI
- Prompt di sistema e configurazioni AI esposti
-
Vulnerabilità GraphQL
- Introspection dello schema abilitata sull'endpoint di analisi delle transazioni
- Autenticazione JWT debole ereditata da
/graphql
- SQL injection nella costruzione delle query dei resolver GraphQL
- Controlli di profondità/complessità GraphQL mancanti
- Divulgazione degli errori GraphQL grezzi
- Esposizione delle analisi delle transazioni tramite query con ambito admin
Installazione e Configurazione 🚀
Prerequisiti
- Docker e Docker Compose (per la configurazione containerizzata)
- PostgreSQL (se si esegue in locale)
- Python 3.9 o superiore (per la configurazione locale)
- Git
Opzione 1: Utilizzo di Docker (Consigliato)
Utilizzo di Docker Compose (Il più semplice)
- Clona il repository:
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
- Avvia l'applicazione:
docker-compose up -d --build
L'applicazione sarà disponibile all'indirizzo http://localhost:5000
Comportamento di recupero del container
La configurazione Docker include alcune salvaguardie operative che consentono all'app di riprendersi senza intervento manuale via SSH:
web e db usano restart: unless-stopped, quindi Docker li riavvia automaticamente se il processo termina.
db espone un health check e web attende che Postgres sia pronto prima di avviarsi.
web esegue il server di sviluppo Flask con debug=True (intenzionale — preserva gli scenari di addestramento che hanno come target il debugger Werkzeug).
web espone GET /healthz così che il container possa segnalare se l'app e il database sono effettivamente utilizzabili.