5
✓ Cumple
3
⚠ En riesgo
4
✗ Pendiente
12
Requisitos total
🏗️ Arquitectura de Tokenización (SAQ A-EP)
Cliente
Ingresa tarjeta
Stripe.js
CardElement
CardElement
Token en el browser
Stripe Servers
(PCI Level 1)
(PCI Level 1)
Procesa CHD
FastAPI Backend
PayFlow
PayFlow
Recibe solo token
PostgreSQL
stripe_customer_id
stripe_customer_id
Almacena token ✓
✓ Arquitectura correcta: el PAN nunca toca los servidores de PayFlow
📋 Los 12 Requisitos PCI DSS v4.0 — Estado Actual
Req 1 · Red
OK
Controles de seguridad de red
AWS VPC con grupos de seguridad correctamente configurados. El endpoint /api/payments está restringido. Firewall activo con reglas revisadas.
Req 2 · Configuración
OK
Configuraciones seguras
Imágenes Docker sin credenciales por defecto. Variables de entorno via AWS Secrets Manager. Servicios no necesarios deshabilitados.
Req 3 · Almacenamiento
OK
Proteger datos almacenados
Solo se almacena stripe_customer_id, last4 y brand — nunca PAN completo ni CVV. Tokenización correcta via Stripe Vault.
Req 4 · Tránsito
Revisar
Proteger CHD en tránsito
TLS 1.3 activo en producción ✓. PENDIENTE: verificar que ningún endpoint interno usa HTTP. Revisar conexión DB: ¿SSL activo en PostgreSQL?
Req 5 · Malware
Pendiente
Proteger sistemas de malware
No hay solución EDR/antivirus en los contenedores de producción. No se realizan escaneos periódicos. Acción inmediata requerida.
Req 6 · Desarrollo
Crítico
Sistemas y software seguros
🚨 CRÍTICO: logs de desarrollo incluyen card_exp en algunos endpoints. Ningún CVE scan activo en dependencias (pip/npm). Sin revisión de código seguro.
Req 7 · Acceso
OK
Restricción de acceso por rol
RBAC implementado. Solo roles billing_admin y finance_manager acceden a registros de pago. Principio de mínimo privilegio aplicado.
Req 8 · Autenticación
Crítico
Identificar usuarios y autenticar
🚨 CRÍTICO: MFA habilitado solo para CEO. Resto del equipo accede con contraseñas simples. PCI DSS v4.0 requiere MFA para TODO acceso al CDE.
Req 9 · Físico
N/A parcial
Restringir acceso físico
Infraestructura en AWS (física gestionada por AWS) ✓. Sin hardware propio con CHD. Verificar acceso físico a portátiles del equipo con acceso a consola AWS.
Req 10 · Logs
Crítico
Registrar y monitorizar accesos
🚨 CRÍTICO: logs antiguos con PANs parciales detectados. Sin log de auditoría estructurado para accesos a datos de tarjeta. Retención de 12 meses no configurada.
Req 11 · Vulnerabilidades
En riesgo
Pruebas de seguridad
Ningún escaneo de vulnerabilidades realizado. Sin pentest anual. Necesario programar ASV scan trimestral y pentest antes del QSA.
Req 12 · Políticas
Pendiente
Política de seguridad de la información
Sin política de seguridad documentada. Sin plan de respuesta a incidentes. Sin evaluación anual de riesgos. Formación en seguridad no realizada.
💻 Correcciones de Código — Puntos Críticos
logs_fix.py
mask_pan.py
mfa_middleware.py
audit_log.py
# ❌ ANTES — Req 6: card_exp aparece en logs (VIOLACIÓN CRÍTICA PCI DSS) import logging def create_subscription(customer_id: str, card_exp: str, plan: str): logging.info(f"Creando suscripción para {customer_id} con tarjeta exp {card_exp}") # ❌ SAD en logs ... # ✅ DESPUÉS — Solo información no sensible en logs def create_subscription(customer_id: str, card_exp: str, plan: str): logging.info(f"Creando suscripción plan={plan} customer={customer_id[:8]}...") # ✅ Sin CHD ... # ✅ Req 3: Enmascarar PAN si alguna vez es necesario mostrarlo def mask_pan(pan: str) -> str: """PCI DSS Req 3.3.1 — mostrar solo primeros 6 y últimos 4.""" if len(pan) < 13: raise ValueError("PAN inválido") return pan[:6] + "*" * (len(pan) - 10) + pan[-4:] # 4111111111111111 → 411111******1111 # ✅ Req 8: Forzar MFA en todo acceso al CDE (FastAPI middleware) from fastapi import Request, HTTPException async def require_mfa(request: Request): user = request.state.user if not user.mfa_verified: raise HTTPException(403, "MFA requerido para acceder al entorno CDE") return user # ✅ Req 10: Log de auditoría estructurado — NUNCA el PAN completo import json from datetime import datetime, timezone def audit_chd_access(user_id: str, action: str, last4: str, amount: float = None): entry = { "ts": datetime.now(timezone.utc).isoformat(), "user_id": user_id, "action": action, # "view" | "charge" | "refund" "card_last4": last4, # ✅ Solo últimos 4 "amount_eur": amount, "event_type": "chd_access" } audit_logger.info(json.dumps(entry)) # → CloudWatch Logs con retención 12m
🚨 Plan de Acción Priorizado — 3 semanas antes del QSA
CRÍTICO
Semana 1
Semana 1
Req 8 — Activar MFA para todos los accesos al CDE
MFA habilitado solo en cuenta CEO. PCI DSS v4.0 (req 8.4.2) exige MFA para CUALQUIER acceso no console al CDE: todos los empleados con acceso a consola AWS, BD, o panel de pagos.
→ Activar AWS IAM MFA + TOTP en la app para roles billing_admin y finance_manager
⏱ Prioridad 1
≤ 48 horas
≤ 48 horas
CRÍTICO
Semana 1
Semana 1
Req 6 + 10 — Purgar logs con card_exp y limpiar logs históricos
Logs de desarrollo incluyen card_exp (SAD). Logs históricos con PANs parciales. Cualquier SAD almacenado post-autorización es una violación directa PCI DSS req 3.2.1.
→ grep -r "card_exp\|pan\|cvv" en todos los logs → eliminar + fix en código + CloudWatch log group rotation
⏱ Prioridad 2
≤ 72 horas
≤ 72 horas
ALTO
Semana 2
Semana 2
Req 10 — Implementar audit log estructurado con retención 12 meses
Sin registro de auditoría de accesos a datos de titulares. PCI DSS req 10.2 exige log de cada acceso a CHD, cambios de privilegios, y fallos de autenticación.
→ Integrar audit_chd_access() en todos los endpoints de pagos + CloudWatch Logs retention 365 días
⏱ Semana 2
ALTO
Semana 2
Semana 2
Req 12 — Redactar política de seguridad de la información
Sin política documentada. El QSA solicitará ver la política en la auditoría. Mínimo: política de uso aceptable, gestión de accesos, retención de datos, respuesta a incidentes.
→ Redactar 4 políticas mínimas + plan de respuesta a brechas de tarjetas
⏱ Semana 2
MEDIO
Semana 3
Semana 3
Req 11 — Programar escaneo ASV trimestral + pentest anual
Ningún escaneo de vulnerabilidades realizado. PCI DSS req 11.3 exige escaneos trimestrales con Approved Scanning Vendor y pentest anual.
→ Contratar Qualys/Rapid7 para ASV scan + nmap interno + OWASP ZAP sobre /checkout
⏱ Semana 3
☑️ Checklist de Auditoría — Para entregar al QSA
✓
SAQ tipo A-EP seleccionado y justificado
✓
Acuerdo con procesador (Stripe BAA) firmado
✓
CDE documentado: ningún PAN en servidores
✓
TLS 1.2+ en todos los endpoints externos
✓
Tokenización activa — solo token en PostgreSQL
✓
RBAC documentado y evidencia de roles
✗
MFA para TODOS los accesos al CDE
✗
Logs históricos con CHD eliminados
✗
Audit log estructurado activo (retención 12m)
✗
Política de seguridad de la información
✗
Escaneo ASV trimestral programado
~
Revisión SSL/TLS conexión interna PostgreSQL
✗
Plan de respuesta a incidentes (brechas CHD)
✗
Formación en seguridad al equipo documentada
~
EDR/antivirus en contenedores de producción
✗
Pentest anual planificado