Seguridad, Gestión de Vulnerabilidades y Monitoreo del SENIAT
Este anexo demuestra que la plataforma de imprenta digital de ZENTTO GLOBAL TECHNOLOGY, C.A. cuenta con controles de seguridad operativos y con infraestructura dispuesta para que el SENIAT verifique y monitoree el servicio, en cumplimiento de las condiciones del artículo 25 (alta seguridad, trazabilidad y confidencialidad), de las obligaciones de continuidad del artículo 29 y de las causales de revocación del artículo 34 de la Providencia Administrativa SNAT/2024/000102.
1. Seguridad y respaldos en el backoffice administrativo
El backoffice de la imprenta digital administra las series, el consumo (metering), las
tarifas y los integradores, con acceso restringido por rol. Toda operación sensible queda
trazada en la bitácora de acceso inmutable audit."AccessLog" (tipo de evento,
actor, recurso, IP, agente de usuario y marca temporal). El acceso al backoffice se controla
por rol (ZENTTO_SUPERADMIN, DISTRIBUIDOR) y, para perfiles no
superadministradores, se filtra la información a la cartera de empresas autorizada mediante un
control server-side que impide el acceso a recursos ajenos (anti-IDOR). El estado de los
respaldos y el plan de conservación a 10 años se documentan en el anexo de
respaldo, conservación y retención.
2. Integración y entrega continuas con búsqueda de vulnerabilidades
Ningún cambio llega a producción sin pasar por el pipeline de integración y entrega
continuas. La plataforma se despliega exclusivamente por CI/CD (GitHub Actions); no existen
despliegues manuales. El pipeline del repositorio zentto-imprenta-seniat
(.github/workflows/deploy-dev.yml y deploy-prod.yml) ejecuta, antes
de construir y desplegar:
- Verificación de tipos (
tsc --noEmit) — bloquea el avance si el código no compila con seguridad de tipos. - Pruebas automatizadas (
npm test) — bloquea el avance si las pruebas no pasan. - Construcción de imagen Docker y publicación al registro
ghcr.io. - Despliegue por SSH al servidor, con verificación de salud (
/health/deep) que aborta el despliegue si el servicio no responde.
A nivel del ecosistema, el escaneo de vulnerabilidades se realiza mediante el flujo de
seguridad reutilizable y centralizado de la organización (security.yml), que
incorpora análisis estático del código (SAST), escaneo de dependencias, detección de secretos
y un security gate que bloquea ante vulnerabilidades, con umbral
high en el flujo productivo y critical en el flujo de desarrollo. Este
control común se aplica de forma homogénea a los componentes del ecosistema, incluida la
imprenta digital.
graph LR
PR["Pull request / push"] --> TYPES["Verificación de tipos (tsc)"]
PR --> TEST["Pruebas (npm test)"]
PR --> SEC["Escaneo de seguridad (SAST + dependencias + secretos)"]
SEC --> GATESecurity gate<br/>prod: high · dev: critical
TYPES --> GATE
TEST --> GATE
GATE -->|falla| BLOCK["Despliegue bloqueado"]
GATE -->|pasa| BUILD["Build Docker + deploy CI/CD"]
BUILD --> HC["Verificación de salud (/health/deep)"]
3. Gestión de secretos con HashiCorp Vault
Los secretos de la plataforma se centralizan en HashiCorp Vault (autenticación por AppRole y
motor de secretos KV v2). En el runtime productivo, con VAULT_OVERRIDE=true, la
fuente de verdad de los secretos es Vault y no archivos .env: los secretos se
cargan desde la ruta zentto/data/imprenta-seniat-prod antes de validar la
configuración. No existen credenciales en el código fuente. La integración se implementa en
src/config/vault.ts. En producción, si faltan secretos obligatorios la
configuración falla de forma controlada (fail-fast). Entre los secretos custodiados se
encuentran la contraseña de la base de datos, la clave de cifrado de credenciales y la clave
de consulta del SENIAT (SENIAT_CONSULTA_KEY). Este expediente no contiene
secretos activos.
4. Autenticación de la sesión
La plataforma distingue tres canales de autenticación:
- Navegador (operador): la sesión se transporta en cookie httpOnly
(
__Secure-zentto_token/zentto_token/zentto_access), no accesible desde JavaScript del navegador, lo que reduce la exposición a robo de sesión por ataques XSS. Un token de portador enviado por un navegador es rechazado. - Servidor a servidor / integradores: token de portador
(
Authorization: Bearer); el identificador de empresa se deriva del token. - SENIAT: clave de consulta
X-Seniat-Keysobre las rutas/seniat/*.
La verificación del token de plataforma es dual: RS256 (preferido) contra el
JWKS público del servicio de autenticación (.well-known/jwks.json, con caché del
conjunto de claves) y HS256 (compatibilidad) verificado con secreto local. Se
complementa con endurecimiento de cabeceras (helmet), CORS por lista blanca y
limitación de tasa. Estos controles protegen la integridad e inviolabilidad de la información,
al impedir que un tercero altere o suplante operaciones registradas.
5. Trazabilidad e integridad
La inalterabilidad del registro se sostiene en la cadena de integridad SHA-256 encadenada por
RIF emisor (fiscal."DigitalInvoice", campos "XmlHashSha256" y
"HashAnterior"), verificable en cualquier momento (verifyChainIntegrity),
y en la bitácora de acceso inmutable (audit."AccessLog"), concebida para solo
admitir inserciones. De este modo, cualquier alteración del registro fiscal es detectable y
cada acceso es trazable.
6. Infraestructura de monitoreo para el SENIAT (acceso permanente)
La plataforma dispone de capacidad permanente para que la Administración Tributaria verifique y monitoree la operación, los 365 días del año:
- Clave de consulta y API. El SENIAT accede mediante la cabecera
X-Seniat-Keysobre las rutas/seniat/*(consulta por número de control, listado por RIF y período, y libro de ventas). El acceso es permanente mientras la clave esté vigente. - Registro inmutable consultable. El registro de los números de control asignados y la cadena de integridad pueden consultarse y verificarse en cualquier momento.
- Trazabilidad del acceso. Cada consulta del SENIAT queda registrada en
audit."AccessLog"con tipo de eventoSENIAT_QUERYy actorSENIAT. - Reportes por período. Los libros y listados se generan por período y quedan disponibles para la Administración Tributaria.
graph TD
SENIAT["SENIAT — funcionario autorizado"] -->|X-Seniat-Key| API["API de consulta /seniat/*"]
API --> VER["Verificación de integridad de la cadena"]
API --> REP["Libros y listados por período"]
API --> LED["Registro de números de control"]
VER --> AUD["audit.AccessLog (SENIAT_QUERY)"]
REP --> AUD
LED --> AUD
AUD --> MON["Monitoreo verificable y auditable de extremo a extremo"]
7. Continuidad del servicio (Art. 34)
La continuidad del servicio se sostiene en el contenedor con reinicio automático, la verificación de salud del servicio, el respaldo dedicado a 10 años y el despliegue exclusivo por CI/CD. Estos controles, junto con la gestión de vulnerabilidades y la trazabilidad, previenen las situaciones que el artículo 34 prevé como causales de revocación y garantizan la disponibilidad permanente exigida a la imprenta digital.
ZENTTO GLOBAL TECHNOLOGY, C.A. — RIF J-50849797-0 — Seguridad, CI/CD y monitoreo SENIAT (Art. 25, 29 y 34 SNAT/2024/000102) — v1.0.0.