Application bancaire vulnérable 🏦
Une application web volontairement vulnérable pour s'entraîner aux tests de sécurité applicative des applications Web, des API et des LLM, à la revue de code sécurisé et à l'implémentation de la sécurité dans les pipelines CI/CD.
⚠️ AVERTISSEMENT : cette application est volontairement vulnérable et ne doit être utilisée qu'à des fins éducatives dans des environnements isolés.

Aperçu
Ce projet est une application bancaire simple intégrant de multiples vulnérabilités de sécurité. Il est conçu pour aider les ingénieurs sécurité, développeurs, stagiaires, analystes QA et praticiens DevSecOps à apprendre :
- Les vulnérabilités courantes des applications Web et des API
- Les vulnérabilités IA/LLM
- Les bonnes pratiques de codage sécurisé
- L'automatisation des tests de sécurité
- La mise en œuvre de DevSecOps
Fonctionnalités et vulnérabilités
Fonctionnalités bancaires principales
- 🔐 Authentification et autorisation des utilisateurs
- 💰 Gestion du solde des comptes
- 💸 Transferts d'argent
- 📝 Demandes de prêt
- 👤 Téléversement de photo de profil
- 📊 Historique des transactions
- 📈 Tableau de bord d'analyse des transactions (basé sur GraphQL)
- 🔑 Système de réinitialisation de mot de passe (PIN à 3 chiffres)
- 💳 Gestion des cartes virtuelles multi-devises
- 💱 Approvisionnement de carte virtuelle depuis le solde USD principal avec conversion de devise intégrée (
USD, GBP, NGN, JPY, EUR, QAR, BTC, ETH)
- 🛒 API publique de paiement marchand pour des intégrations e-commerce/démo volontairement vulnérables
- 📱 Système de paiement de factures
- 🤖 Agent de support client IA (véritable LLM avec l'API DeepSeek / mode simulé)

Vulnérabilités implémentées
-
Authentification et autorisation
- Injection SQL dans la connexion
- Implémentation JWT faible
- Autorisation au niveau objet cassée (BOLA)
- Autorisation au niveau propriété d'objet cassée (BOPLA)
- Affectation massive et exposition excessive de données
- Mécanisme de réinitialisation de mot de passe faible (PIN à 3 chiffres)
- Jeton stocké dans le localStorage
- Absence d'invalidation du jeton côté serveur
- Absence d'expiration de session
-
Sécurité des données
- Divulgation d'informations
- Exposition de données sensibles
- Stockage des mots de passe en clair
- Points d'injection SQL
- Exposition d'informations de débogage
- Messages d'erreur détaillés exposés
-
Vulnérabilités des transactions
- Absence de validation des montants
- Transferts de montants négatifs possibles
- Absence de limites de transaction
- Conditions de course dans les transferts et les mises à jour de solde
- Divulgation d'informations de l'historique des transactions
- Absence de validation des comptes bénéficiaires
-
Opérations sur les fichiers
- Téléversement de fichiers sans restriction
- Vulnérabilités de traversée de chemin
- Absence de validation du type de fichier
- Traversée de répertoire
- Absence de limites de taille de fichier
- Nommage de fichiers non sécurisé
- Falsification de requête côté serveur (SSRF) via l'import d'image de profil par URL
-
Gestion de session
- Vulnérabilités de jeton
- Absence d'expiration de session
- Clés secrètes faibles
- Exposition de jetons dans les URL
-
Failles côté client et côté serveur
- Script intersites (XSS)
- Falsification de requête intersites (CSRF)
- Références directes d'objets non sécurisées
- Absence de limitation de débit
-
Vulnérabilités des cartes virtuelles
- Affectation massive dans les mises à jour de limite de carte
- Affectation massive dans le traitement du taux de change lors de l'approvisionnement de carte
- Génération de numéros de carte prévisible
- Stockage en clair des détails de carte
- Absence de validation des limites de carte
- BOLA dans les opérations de carte
- Conditions de course dans les mises à jour de solde
- Divulgation d'informations sur les détails de carte
- Absence de vérification des transactions
- Absence de surveillance de l'activité de la carte
- Conversion de devise contrôlée par le client lors de l'approvisionnement de carte
-
Vulnérabilités de paiement de factures
- Absence de validation des montants de paiement
- Injection SQL dans les requêtes d'émetteurs de factures
- Divulgation d'informations dans l'historique des paiements
- Numéros de référence prévisibles
- Exposition de l'historique des transactions
- Absence de validation des comptes des émetteurs de factures
- Conditions de course dans le traitement des paiements
- BOLA dans l'accès à l'historique des paiements
- Limites de paiement manquantes
-
Vulnérabilités de l'API de paiement marchand
- Mots de passe marchands et clés API en clair
- Clés API renvoyées dans les réponses d'inscription et de connexion
- Numéro de carte brut/CVV acceptés par les API de paiement marchand
- Recherches marchand et carte sujettes à l'injection SQL
- Absence d'idempotence, de protection contre la relecture, de limites de paiement et de limitation de débit
- Failles d'autorisation au niveau objet dans la recherche de paiement marchand
- Raisons de refus de paiement détaillées et exposition de données de débogage
- Génération de codes d'autorisation prévisible
-
Vulnérabilités du support client IA
- Injection de prompt (CWE-77)
- Divulgation d'informations basée sur l'IA (CWE-200)
- Autorisation cassée dans le contexte IA (CWE-862)
- Exposition d'informations du système IA (CWE-209)
- Validation d'entrée insuffisante pour les invites IA (CWE-20)
- Accès direct à la base de données via la manipulation de l'IA
- Attaques de remplacement de rôle IA
- Vulnérabilités d'injection de contexte
- Accès non autorisé aux données assisté par l'IA
- Invites et configurations du système IA exposées
- Vulnérabilités GraphQL
- Introspection de schéma activée sur le point de terminaison d'analyse des transactions
- Authentification basée sur JWT faible héritée par
/graphql
- Injection SQL dans la construction de requêtes du résolveur GraphQL
- Contrôles de profondeur/complexité GraphQL manquants
- Divulgation brute des erreurs GraphQL
- Exposition des analyses de transactions via des requêtes réservées à l'administrateur
Installation et configuration 🚀
Prérequis
- Docker et Docker Compose (pour une installation conteneurisée)
- PostgreSQL (si exécution locale)
- Python 3.9 ou supérieur (pour une installation locale)
- Git
Option 1 : Utilisation de Docker (recommandée)
Avec Docker Compose (le plus simple)
- Clonez le dépôt :
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
- Démarrez l'application :
docker-compose up -d --build
L'application sera disponible à l'adresse http://localhost:5000