Skip to content

EVD-MFA-AUTHENTICATION — Evidencia de Autenticacion Multifactor

CampoValor
OrganizacionFintrixs SAS
EntornoDigitalOcean Managed Kubernetes (DOKS)
Fecha de evidencia2026-04-03
Proxima revision2026-10-03
ResponsableEquipo de Seguridad / Infraestructura
ClasificacionConfidencial — Solo para auditoria PCI DSS

Q54 — Acceso remoto con MFA

Politica de acceso remoto

Todo acceso remoto a los sistemas de Fintrixs (CDE y sistemas conectados) requiere autenticacion multifactor (MFA) sin excepciones.

Metodos de acceso remoto

Metodo de accesoMFA requeridoTipo de MFADetalle
DigitalOcean ConsoleSiTOTP (Google Authenticator / Authy)2FA obligatorio en la cuenta DO de cada miembro del equipo
kubectl (Kubernetes)SiTOTP via DigitalOceanEl kubeconfig se obtiene via doctl, que requiere sesion DO autenticada con 2FA
SSH a nodos (emergencia)SiLlave SSH + TOTP en DO ConsoleAcceso a nodos solo via consola DO (con 2FA) o VPN con MFA
VPN (WireGuard)SiCertificado + TOTPAcceso a red de management (monitoring, admin tools)
PostgreSQL (managed)SiCredenciales + 2FA en DO ConsoleLas credenciales se obtienen desde la consola DO (que requiere 2FA)
Dashboard administrativoSiJWT RS256 + TOTP in-appMFA TOTP integrado en el flujo de login de auth-service

Lista de usuarios con acceso remoto

Tipo de accesoGestion de usuariosRevision
DigitalOcean ConsoleLista controlada en la cuenta de equipo DO; cada usuario con 2FATrimestral
kubectlSolo miembros del equipo con acceso a DO; kubeconfig efimeroTrimestral
SSHLlaves publicas gestionadas via Terraform; lista en authorized_keysSemestral
VPNCertificados WireGuard emitidos individualmente; revocacion inmediata al offboardingContinua
Dashboard adminUsuarios en iam_core.iam_users con rol admin o super_adminSemestral (Q1031)

Flujo de acceso remoto con MFA


Q56 — Metodos de autenticacion por plataforma

Tabla de autenticacion por plataforma

PlataformaFactor 1 (algo que se sabe)Factor 2 (algo que se tiene)Metodo MFABypass permitido
Kubernetes (kubectl)Token OIDC (via DO)TOTP en DigitalOcean ConsoleGoogle Authenticator / AuthyNo
PostgreSQL (managed)Password (doadmin / fintrix)Certificado SSL + 2FA en DO ConsoleSSL client cert + TOTP en DONo
SSH a nodosLlave privada RSA/Ed25519Acceso via DO Console (2FA)Llave SSH + TOTPNo
Kong Admin APIN/A (red interna)Acceso solo via kubectl port-forwardHereda MFA de kubectlNo
Dashboard (frontend)Password (PBKDF2-SHA256)TOTP in-app (6 digitos, 30s)FintrixPay Authenticator (otpauth)No para acceso CDE
DigitalOcean ConsolePassword de cuenta DOTOTPGoogle Authenticator / AuthyNo
Grafana / PrometheusVia kubectl port-forwardHereda MFA de kubectlTOTP en DONo

Configuracion de MFA en el dashboard (auth-service)

Protocolo TOTP implementado

ParametroValor
AlgoritmoTOTP (RFC 6238)
Digitos6
Periodo30 segundos
EmisorFintrixPay
HashSHA-1 (estandar TOTP)
Secreto20 bytes aleatorios, codificado en Base32
URI otpauthotpauth://totp/FintrixPay:<email>?secret=<base32>&issuer=FintrixPay&digits=6&period=30
Codigos de respaldo8 codigos de un solo uso (4 bytes hex cada uno)

Proteccion anti-replay

ControlImplementacion
Ventana de validacionCodigo TOTP valido solo durante su periodo de 30 segundos
Token MFA temporalJWT con purpose: 'mfa_challenge', expiracion de 5 minutos
Un solo uso del mfaTokenTras validar el codigo TOTP, se emite un JWT de sesion; el mfaToken queda invalidado por expiracion
Formato de codigoRegex /^\d{6}$/ — solo 6 digitos; cualquier otro formato es rechazado

Flujo completo de MFA en login

Flujo de configuracion inicial de MFA

Factores de autenticacion (dos factores distintos)

FactorTipoDetalle
Factor 1 — Algo que el usuario sabeKnowledgePassword (PBKDF2-SHA256 con 210,000 iteraciones)
Factor 2 — Algo que el usuario tienePossessionDispositivo con app autenticadora (Google Authenticator, Authy, 1Password)

Nota PCI DSS: Los dos factores son de categorias distintas (knowledge + possession), cumpliendo con el requisito de autenticacion multifactor con al menos dos factores independientes.


Q233 — 2FA obligatorio para todo acceso al CDE

Definicion del CDE (Cardholder Data Environment)

Los siguientes componentes conforman el CDE de Fintrixs:

ComponenteTipoDatos sensibles
card-vault-serviceMicroservicio NestJSPAN cifrado (AES-256), datos de tarjeta
tokenization-serviceMicroservicio NestJSPAN en transito (tokenizacion)
auth-serviceMicroservicio NestJSCredenciales de usuarios con acceso al CDE
vault_dbPostgreSQL managedAlmacenamiento cifrado de datos de tarjeta
auth_dbPostgreSQL managedCredenciales y configuracion de auth
Kong GatewayAPI GatewayPunto de entrada al CDE (proxy TLS)
CDE Node PoolKubernetes nodesNodos fisicos dedicados con taint pci-scope=true

Matriz de acceso al CDE con 2FA

Via de acceso2FA obligatorioMecanismoAplica a
kubectl al namespace cdeSiTOTP en DigitalOcean + K8s RBACIngenieros de infraestructura
PostgreSQL vault_db / auth_dbSiSSL cert + TOTP en DO ConsoleDBA (solo emergencias)
API de card-vault-serviceSiSolo accesible desde tokenization-service (no hay acceso humano directo)Ningun usuario humano
API de tokenization-serviceSiSolo via Kong (HTTPS) + JWT con MFAMicroservicios autorizados
Logs del CDESikubectl logs + TOTP en DOIngenieros de seguridad
SSH a nodos CDESiLlave SSH + TOTP en DO ConsoleSolo emergencia con aprobacion
Dashboard admin (datos tokenizados)SiJWT RS256 + TOTP in-appUsuarios admin

Diagrama de acceso al CDE con 2FA

Controles que impiden bypass de 2FA

ControlImplementacionEvidencia
No hay acceso directo a la consolaLos nodos K8s de DigitalOcean no tienen IP publica; acceso solo via doctl (con 2FA)Cloud Firewall rules
NetworkPolicy deny-all en namespace CDENingun pod fuera del CDE puede comunicarse con pods del CDE sin regla explicitabackend/infra/kubernetes/network-policies.yaml
Kong como unico ingressTodo trafico HTTP al CDE pasa por Kong; Kong solo es accesible desde el Load Balancerbackend/infra/kong/kong.yaml
JWT con validacion de MFAEl checkMfaAndRespond() intercepta el login y devuelve challenge si MFA esta habilitadobackend/apps/auth-service/src/auth/auth.service.ts
Kubernetes RBACRoles separados para namespace cde vs app; solo roles cde-admin pueden interactuar con pods CDEK8s RBAC manifests
Audit loggingTodo acceso al CDE (kubectl, psql, API) genera registros de auditoriaPrometheus metrics + admin-audit-service

Acceso de base de datos al CDE

Base de datosMetodo de autenticacion2FA
vault_db (Managed PostgreSQL)Password + SSL client certificateSi — credenciales accesibles solo via DO Console (2FA)
auth_db (Managed PostgreSQL)Password + SSL client certificateSi — credenciales accesibles solo via DO Console (2FA)
App databases (no-CDE)Password + SSLSi — misma politica aplicada uniformemente

Acceso de consola (sin 2FA)

EscenarioPermitido?Detalle
Acceso directo a consola de nodo sin MFANoNo hay IP publica en nodos; no hay SSH directo sin pasar por DO Console (2FA)
kubectl exec sin MFANokubeconfig requiere token DO obtenido con 2FA
psql sin MFANoCredenciales solo disponibles en DO Console (2FA) o Kubernetes Secrets (kubectl con 2FA)

Resumen de cumplimiento MFA

Requisito PCI DSSEstadoEvidencia
Q54 — MFA para acceso remotoCumpleTOTP en DO Console para todo acceso remoto
Q56 — Metodos de auth por plataformaCumpleTabla detallada con factores por plataforma
Q56 — Anti-replay en MFACumpleToken MFA temporal (5min), codigo TOTP por ventana de 30s
Q56 — Sin bypass de MFACumpleNo hay ruta de acceso al CDE que evite 2FA
Q56 — Dos factores distintosCumpleKnowledge (password) + Possession (TOTP app)
Q233 — 2FA en todo acceso CDECumpleTodas las vias de acceso al CDE requieren 2FA

Historial de revisiones

FechaRevisorCambios
2026-04-03Equipo de SeguridadDocumento inicial — cobertura Q54, Q56, Q233

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