Auditoría de
Plataforma de Pagos.
Una inyección SQL crítica en el flujo de transacciones llevaba 18 meses activa sin ser detectada por ningún scanner automatizado. Permitía eludir la verificación 2FA en pagos superiores a 10.000€ sin dejar rastro en los logs de auditoría.
El punto de partida.
El cliente operaba una plataforma de pagos B2B con más de 4.200 transacciones mensuales y un volumen anual superior a los 12 millones de euros. Habían realizado escaneos automáticos trimestrales con herramientas comerciales y contaban con un equipo interno de desarrollo de 8 personas.
La auditoría fue solicitada por el CTO tras un requisito de due diligence de un fondo de inversión que exigía un informe de seguridad independiente. El objetivo era obtener el sello verde y cerrar la ronda. Lo que encontramos cambió por completo los plazos.
La plataforma procesaba datos de tarjeta bajo esquema PCI DSS SAQ-A-EP. La vulnerabilidad encontrada habría constituido una violación grave de los requisitos 6.4 y 8.3.2, con potencial de sanción de hasta 100.000€/mes y revocación de la capacidad de procesamiento.
Cadena de ataque.
Reproducción técnica del vector de explotación documentado durante la auditoría. Todos los ataques fueron realizados en entorno de staging autorizado.
/api/v2/transactions/verify recibía el transaction_id directamente concatenado en la query SQL sin sanitizar.transaction_id permitía manipular la condición de validación 2FA. Con un payload de 34 caracteres fue posible aprobar transacciones de cualquier importe sin requerir el segundo factor. La consulta modificada no generaba entrada en el log de auditoría.Los 23 hallazgos.
| Ref. | Vulnerabilidad | Vector | CVSS | Estado |
|---|---|---|---|---|
| CVE-FT-01 | SQL Injection en /api/v2/transactions/verify | API · Backend | 9.8 | PARCHEADO |
| CVE-FT-02 | IDOR en historial de transacciones de merchants | API · IDOR | 9.1 | PARCHEADO |
| CVE-FT-03 | Bypass de 2FA en pagos de alto importe | Auth · Lógica | 9.0 | PARCHEADO |
| CVE-FT-04 | Exposición de stack trace en errores 500 | Info Leakage | 7.5 | PARCHEADO |
| CVE-FT-05 | Tokens de sesión sin expiración (JWT) | Auth · Sesiones | 7.2 | PARCHEADO |
| CVE-FT-06 | CSRF en formulario de modificación de IBAN | CSRF | 7.1 | PARCHEADO |
| CVE-FT-07 | Rate limiting ausente en login (fuerza bruta) | Auth · Brute Force | 9.0 | PARCHEADO |
| CVE-FT-08 | CSP ausente — XSS almacenado en panel admin | XSS · Headers | 6.8 | PARCHEADO |
| CVE-FT-09 … 23 | 15 hallazgos adicionales (medio/bajo) | Varios | ≤ 5.9 | PARCHEADOS |
Plan de acción.
Antes y después.
- SQL injection sin detectar durante 18 meses
- 2FA bypassable en pagos de alto importe
- 7 vulnerabilidades críticas CVSS 9.0+
- Sin rate limiting en autenticación
- Tokens JWT sin expiración
- Stack traces expuestos en producción
- Sin cabeceras de seguridad HTTP
- Prepared statements en el 100% de queries
- 2FA server-side inamovible por el cliente
- 23 vulnerabilidades cerradas y verificadas
- Rate limiting + lockout en login
- JWT con expiración 15min + refresh token
- Páginas de error genéricas en producción
- Cabeceras completas + CSP estricto
El cliente cerró la ronda de inversión sin observaciones de seguridad. El re-test post-remediación confirmó el cierre del 100% de los hallazgos. El equipo de desarrollo implementó un pipeline de SAST que ahora analiza cada commit antes del merge a producción.
Encontraron una inyección SQL crítica en nuestro flujo de pagos que llevaba activa 18 meses expuesta. El informe priorizaba por impacto real — nuestro equipo parcheó los 3 fallos críticos en 48 horas. Los scanners automáticos que usábamos no detectaron ninguno. El debrief con el equipo de desarrollo valió tanto como el propio informe.
Los scanners automáticos no detectaron este fallo durante 18 meses. Una auditoría manual lo encontró en 48 horas. Solicita la tuya ahora.