Security

WAF, auth policies, bundle signing, and encryption in the Zentinel Control Plane.

Web Application Firewall

~60 built-in rules based on the OWASP Core Rule Set (CRS).

Rule Categories

CategoryRule IDsDescription
SQL InjectionCRS-942xxxlibinjection, tautologies, union-based, blind
XSSCRS-941xxxScript tags, event handlers, JS URIs, DOM vectors
Local File InclusionCRS-930xxxPath traversal, OS file access, null bytes
Remote File InclusionCRS-931xxxURL params, PHP wrappers, off-domain refs
Remote Code ExecutionCRS-932xxxCommand injection, PowerShell, Shellshock
Scanner DetectionCRS-913xxxVulnerability scanners, bot detection
Protocol ViolationsCRS-920xxxInvalid HTTP, smuggling, URI length
Data Leak PreventionCRS-950xxxCredit cards, SSNs, SQL errors

WAF Policies

Group rules with configuration: mode (block/detect_only/challenge), sensitivity (low-paranoid), default action, enabled categories, body/header/URI size limits.

Per-rule overrides supported (e.g., disable a false-positive rule).

WAF Analytics

  • Event tracking: every blocked/logged request recorded
  • 14-day statistical baselines (computed hourly)
  • Z-score anomaly detection (>2.5σ) for spikes, new vectors, IP bursts

Auth Policies

Authentication policies for services, enforced by the proxy at request time:

TypeDescription
jwtJWT validation — issuer, audience, algorithms, JWKS URL
api_keyAPI key from headers or query params
basicHTTP Basic Authentication
oauth2Token introspection
oidcOpenID Connect with discovery
compositeCombine policies with AND/OR logic

Bundle Signing

Ed25519 cryptographic signing for integrity and authenticity:

  1. Generate key pair
  2. Compiler signs bundle archive during compilation
  3. Nodes/operators verify against public key
  4. Key ID in signature enables rotation

Verify via API:

curl http://localhost:4000/api/v1/projects/my-project/bundles/:id/verify \
  -H "Authorization: Bearer $API_KEY"

Encryption at Rest

All sensitive data encrypted with AES-256-GCM:

DataAAD
TLS private keys"zentinel-cert-key"
Signing keys"ZentinelCp.Auth.Encryption"
Secret values"zentinel-secret"
ACME account keys"zentinel-cert-key"

Key derived from secret_key_base via SHA256. Each value has unique 12-byte IV + 16-byte auth tag.