Tema
SOP-005: Solicitud de excepción temporal de MFA
| Campo | Valor |
|---|---|
| ID | SOP-005 |
| Versión | 1.0 |
| Fecha de emisión | 2026-06-16 |
| Propietario | CTO + CISO |
| PCI DSS | Req 8.5.1.b — "MFA cannot be bypassed by any user including administrators, unless specifically documented and authorized by management on an exception basis, for a limited time period" |
1. Propósito
Definir el proceso formal y time-bounded para autorizar el bypass temporal del segundo factor MFA en el dashboard Fintrixs Pay y otros sistemas en alcance PCI DSS v4.0.
Este SOP es la única vía válida para deshabilitar MFA en un sistema crítico. Cualquier bypass que no siga este proceso constituye un incidente de seguridad reportable.
2. Cuándo aplica
| Escenario | Aplica |
|---|---|
| Pérdida del dispositivo authenticator del CTO | ✓ |
| Maintenance/break-glass requerido por DR (Disaster Recovery) | ✓ |
| Diagnóstico de incidente de seguridad activo | ✓ |
| Migración de authenticator app del usuario | ✗ — flujo regular /auth/mfa/disable |
| Usuario olvidó su código TOTP pero tiene backup codes | ✗ — usa backup codes |
| Conveniencia o velocidad operacional | ✗ — denegar |
3. Procedimiento
3.1 Form A — Solicitud
| Campo | Obligatorio | Notas |
|---|---|---|
| Solicitante (nombre + role) | ✓ | |
| Sistema afectado | ✓ | dashboard / kubectl / DO console / etc. |
| Cuenta a impactar | ✓ | UUID o email |
| Justificación de negocio | ✓ | min 50 chars; "incidente activo X", "DR drill Y" |
| Ventana solicitada | ✓ | ≤ 4 horas absolutas |
| Compensating controls durante la ventana | ✓ | "doble checkout", "screen recording", "kept on call CTO" |
| Plan de re-enrollment del MFA tras la ventana | ✓ | "new authenticator app added", "backup codes regenerated" |
3.2 Aprobación
| Solicitante | Aprobadores requeridos |
|---|---|
| Cualquier usuario merchant | CTO + Tech Lead |
| Tech Lead / Backend Dev | CTO + CISO |
| CTO | CISO + un testigo externo (auditor, board member) |
3.3 Issue de la excepción técnica
Una vez aprobada, el admin con permiso mfa:override ejecuta:
sql
-- Disable MFA temporalmente con expiración automática
UPDATE iam_core.user_mfa
SET is_enabled = false,
updated_at = now()
WHERE user_id = '<uuid del usuario afectado>';
INSERT INTO iam_core.mfa_verification_events
(user_id, event, metadata)
VALUES
('<uuid>', 'mfa_disabled',
jsonb_build_object(
'sop_id', 'SOP-005',
'request_ref', 'EX-2026-XXXX',
'approved_by', '[email protected] + ciso@...',
'expires_at', '<iso8601 = max NOW() + 4 hours>',
'reason', '<resumen de la justificación>',
'reenrollment_plan', '<descripción>'
));3.4 Auto-expiración
Un cron job (iam_mfa_exception_expirer.sh, hourly) que corre en el cluster prod automáticamente:
- Busca registros
mfa_disabledconexpires_at < now()enmfa_verification_events - Re-ejecuta
enableMfa()para el usuario (genera nuevo secret) O marca la cuenta comomust_re_enroll = true(el dashboard lo fuerza al siguiente login) - Audita el cierre como
mfa_exception_expired
3.5 Audit log inmutable
Todas las entradas en iam_core.mfa_verification_events son append-only por convención. La política de la tabla:
INSERT: permitido a app rolefintrixUPDATE/DELETE: DENIED a app role; solodoadminpuede limpiar registros > 7 años (PCI 10.5.1 retention)
4. Excepciones nunca permitidas
Las siguientes son denegadas automáticamente y constituyen incidente de seguridad si se intentan:
- Deshabilitar MFA permanentemente para una cuenta in-scope sin removerla
- Usar la SOP-005 como vía recurrente para un mismo usuario (>1 vez/mes)
- Aprobar excepción para una cuenta con
must_change_password = true(Q53) - Deshabilitar MFA para más de 1 usuario simultáneamente
5. Reporte trimestral
El CISO genera un reporte trimestral con TODAS las excepciones invocadas (SELECT … FROM mfa_verification_events WHERE event='mfa_disabled' AND metadata->>'sop_id'='SOP-005') y se lo entrega al board. Cero excepciones es el target esperado.
6. Referencia cruzada
- POL-003 — Logical Access & Authentication §5
- EVD-Q54 — Remote Access + MFA
- EVD-Q56 — MFA Configured Securely
- PCI DSS v4.0 Req 8.5.1.b
