Vulnerable Bank Application 🏦
Una aplicación web deliberadamente vulnerable para practicar pruebas de seguridad de aplicaciones en Web, APIs y LLMs, revisión de código seguro e implementación de seguridad en pipelines de CI/CD.
⚠️ ADVERTENCIA: Esta aplicación es intencionalmente vulnerable y solo debe utilizarse con fines educativos en entornos aislados.

Descripción general
Este proyecto es una aplicación bancaria sencilla con múltiples vulnerabilidades de seguridad integradas. Está diseñado para ayudar a ingenieros de seguridad, desarrolladores, becarios, analistas de QA y profesionales de DevSecOps a aprender sobre:
- Vulnerabilidades comunes en aplicaciones web y APIs
- Vulnerabilidades de IA/LLM
- Prácticas de codificación segura
- Automatización de pruebas de seguridad
- Implementación de DevSecOps
Funcionalidades y vulnerabilidades
Funcionalidades bancarias principales
- 🔐 Autenticación y autorización de usuarios
- 💰 Gestión de saldo de cuentas
- 💸 Transferencias de dinero
- 📝 Solicitudes de préstamos
- 👤 Subida de foto de perfil
- 📊 Historial de transacciones
- 📈 Panel de análisis de transacciones (respaldado por GraphQL)
- 🔑 Sistema de restablecimiento de contraseña (PIN de 3 dígitos)
- 💳 Gestión de tarjetas virtuales multidivisa
- 💱 Carga de tarjetas virtuales desde el saldo principal en USD con conversión de divisas integrada (
USD, GBP, NGN, JPY, EUR, QAR, BTC, ETH)
- 🛒 API pública de pagos para comercios para integraciones demo/ecommerce intencionalmente vulnerables
- 📱 Sistema de pago de facturas
- 🤖 Agente de atención al cliente con IA (LLM real con API de DeepSeek / Modo simulado)

Vulnerabilidades implementadas
-
Autenticación y autorización
- Inyección SQL en el inicio de sesión
- Implementación JWT débil
- Autorización rota a nivel de objeto (BOLA)
- Autorización rota a nivel de propiedades de objeto (BOPLA)
- Asignación masiva y exposición excesiva de datos
- Mecanismo débil de restablecimiento de contraseña (PIN de 3 dígitos)
- Token almacenado en localStorage
- Sin invalidación de tokens en el servidor
- Sin caducidad de sesión
-
Seguridad de datos
- Divulgación de información
- Exposición de datos sensibles
- Almacenamiento de contraseñas en texto plano
- Puntos de inyección SQL
- Exposición de información de depuración
- Mensajes de error detallados expuestos
-
Vulnerabilidades de transacciones
- Sin validación de importes
- Transferencias de importe negativo posibles
- Sin límites de transacción
- Condiciones de carrera en transferencias y actualizaciones de saldo
- Divulgación de información en el historial de transacciones
- Sin validación de cuentas de destinatario
-
Operaciones con archivos
- Subida de archivos sin restricciones
- Vulnerabilidades de path traversal
- Sin validación de tipo de archivo
- Directory traversal
- Sin límites de tamaño de archivo
- Nombrado inseguro de archivos
- Server-Side Request Forgery (SSRF) mediante importación de imagen de perfil basada en URL
-
Gestión de sesiones
- Vulnerabilidades de tokens
- Sin caducidad de sesión
- Claves secretas débiles
- Exposición de tokens en URLs
-
Fallos en cliente y servidor
- Cross Site Scripting (XSS)
- Cross Site Request Forgery (CSRF)
- Referencias directas inseguras a objetos
- Sin limitación de velocidad (rate limiting)
-
Vulnerabilidades de tarjetas virtuales
- Asignación masiva en actualizaciones de límite de tarjeta
- Asignación masiva en el manejo del tipo de cambio al cargar tarjetas
- Generación predecible de números de tarjeta
- Almacenamiento en texto plano de los datos de la tarjeta
- Sin validación de límites de tarjeta
- BOLA en operaciones con tarjetas
- Condiciones de carrera en actualizaciones de saldo
- Divulgación de información de los datos de la tarjeta
- Sin verificación de transacciones
- Falta de monitoreo de actividad de tarjetas
- Conversión de divisas controlada por el cliente durante la carga de tarjetas
-
Vulnerabilidades de pago de facturas
- Sin validación de importes de pago
- Inyección SQL en consultas de proveedores
- Divulgación de información en el historial de pagos
- Números de referencia predecibles
- Exposición del historial de transacciones
- Sin validación de cuentas de proveedor
- Condiciones de carrera en el procesamiento de pagos
- BOLA en el acceso al historial de pagos
- Límites de pago inexistentes
-
Vulnerabilidades de la API de pagos para comercios
- Contraseñas de comercio y claves API en texto plano
- Claves API devueltas en las respuestas de registro e inicio de sesión
- Número de tarjeta/CVV en bruto aceptado por las APIs de pago para comercios
- Búsquedas de comercios y tarjetas propensas a inyección SQL
- Falta de idempotencia, protección contra replay, límites de pago y limitación de velocidad
- Brechas de autorización a nivel de objeto en la consulta de pagos de comercios
- Razones detalladas de rechazo de pago y exposición de datos de depuración
- Generación predecible de códigos de autorización
-
Vulnerabilidades del agente de atención al cliente con IA
- Inyección de prompts (CWE-77)
- Divulgación de información basada en IA (CWE-200)
- Autorización rota en el contexto de IA (CWE-862)
- Exposición de información del sistema de IA (CWE-209)
- Validación insuficiente de entradas para prompts de IA (CWE-20)
- Acceso directo a la base de datos mediante manipulación de la IA
- Ataques de anulación de rol de la IA
- Vulnerabilidades de inyección de contexto
- Acceso no autorizado a datos asistido por IA
- Prompts de sistema y configuraciones de IA expuestos
-
Vulnerabilidades de GraphQL
- Introspección de esquema habilitada en el endpoint de análisis de transacciones
- Autenticación JWT débil heredada por
/graphql
- Inyección SQL en la construcción de consultas del resolver de GraphQL
- Controles de profundidad/complejidad de GraphQL inexistentes
- Divulgación de errores GraphQL en bruto
- Exposición del análisis de transacciones a través de consultas con ámbito de administrador
Instalación y configuración 🚀
Requisitos previos
- Docker y Docker Compose (para la configuración en contenedores)
- PostgreSQL (si se ejecuta localmente)
- Python 3.9 o superior (para la configuración local)
- Git
Opción 1: Usando Docker (Recomendado)
- Clona el repositorio:
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
- Inicia la aplicación:
docker-compose up -d --build
La aplicación estará disponible en http://localhost:5000