Skip to content

SOP-005: Solicitud de excepción temporal de MFA ​

CampoValor
IDSOP-005
Versión1.0
Fecha de emisión2026-06-16
PropietarioCTO + CISO
PCI DSSReq 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 ​

EscenarioAplica
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 ​

CampoObligatorioNotas
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 ​

SolicitanteAprobadores requeridos
Cualquier usuario merchantCTO + Tech Lead
Tech Lead / Backend DevCTO + CISO
CTOCISO + 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:

  1. Busca registros mfa_disabled con expires_at < now() en mfa_verification_events
  2. Re-ejecuta enableMfa() para el usuario (genera nuevo secret) O marca la cuenta como must_re_enroll = true (el dashboard lo fuerza al siguiente login)
  3. 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 role fintrix
  • UPDATE / DELETE: DENIED a app role; solo doadmin puede 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 ​

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS