🔐
CULTIVA IA
Legal & Compliance

Informe de Cumplimiento PCI DSS v4.0

PayFlow SaaS · Fecha: 16 jun 2026 · Auditor: CULTIVA IA · Reunión QSA en 3 semanas

SAQ Aplicable
A-EP
E-commerce con
Stripe Elements JS
5
✓ Cumple
3
⚠ En riesgo
4
✗ Pendiente
12
Requisitos total
Nivel de cumplimiento actual 41.7% — Necesita acción urgente antes del QSA
■ 5 OK ■ 3 En riesgo ■ 4 Pendientes
🏗️ Arquitectura de Tokenización (SAQ A-EP)
👤 Cliente
Ingresa tarjeta
→
💳 Stripe.js
CardElement
Token en el browser
→
🏦 Stripe Servers
(PCI Level 1)
Procesa CHD
→
🖥️ FastAPI Backend
PayFlow
Recibe solo token
→
🗄️ PostgreSQL
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
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
CRÍTICO
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
ALTO
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
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
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