Files
aoc/RELEASE_NOTES_v1.7.14.md
Tomas Kracmar 8d951fc335
All checks were successful
CI / lint-and-test (push) Successful in 22s
Release / build-and-push (push) Successful in 1m7s
v1.7.14: LLM/SIEM domain allowlists, SRI hashes, auth misconfig warning, Azure Key Vault integration
2026-04-27 16:45:06 +02:00

3.0 KiB

AOC v1.7.14 Release Notes

Release Date: 2026-04-27

Security Hardening: Threat Model Remediation

This release addresses the high-severity findings from the v1.7.13 threat model review.

LLM Endpoint Domain Allowlist

  • New config: LLM_ALLOWED_DOMAINS (comma-separated, supports wildcards like *.openai.azure.com)
  • Behavior: When configured, the /api/ask endpoint rejects LLM_BASE_URL domains not in the allowlist
  • Impact: Prevents audit data exfiltration via a compromised or attacker-controlled LLM endpoint

SIEM Webhook SSRF Guard

  • New config: SIEM_ALLOWED_DOMAINS (comma-separated)
  • Behavior: The SIEM forwarder now validates SIEM_WEBHOOK_URL with the same SSRF checks as the LLM endpoint (HTTPS-only, blocks private IPs, enforces domain allowlist)
  • Impact: Prevents real-time audit data exfiltration via a malicious SIEM webhook URL

CDN Subresource Integrity (SRI)

  • Added integrity hashes to both CDN scripts in the frontend:
    • Alpine.js 3.15.11: sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be
    • MSAL.js 2.37.0: sha384-DUSOaqAzlZRiZxkDi8hL7hXJDZ+X39ZOAYV9ZDx44gUv9pozmcunJH02tjSFLPnW
  • Impact: Browser refuses to execute CDN scripts if the content doesn't match the hash, preventing supply chain compromise

Auth Misconfiguration Warning

  • At startup, AOC now logs a WARNING if AUTH_ENABLED=true but neither AUTH_ALLOWED_ROLES nor AUTH_ALLOWED_GROUPS is configured
  • Impact: Operators are alerted when the app is accidentally left open to all Entra users

Azure Key Vault Integration (Optional)

  • New module: backend/secrets_manager.py
  • New config: AZURE_KEY_VAULT_NAME
  • Behavior: If AZURE_KEY_VAULT_NAME is set, AOC fetches these secrets from Key Vault at startup:
    • aoc-client-secretCLIENT_SECRET
    • aoc-llm-api-keyLLM_API_KEY
    • aoc-mongo-uriMONGO_URI
    • aoc-webhook-client-secretWEBHOOK_CLIENT_SECRET
  • Falls back silently to .env / environment variables when Key Vault is not configured
  • Dependencies: azure-identity and azure-keyvault-secrets (commented out in requirements.txt — uncomment when using Key Vault)
  • Impact: Eliminates long-lived secrets from .env files and Docker images

Files Changed

File Change
backend/config.py Added LLM_ALLOWED_DOMAINS, SIEM_ALLOWED_DOMAINS, AZURE_KEY_VAULT_NAME
backend/routes/ask.py Domain allowlist enforcement for LLM URL
backend/siem.py SSRF guard + domain allowlist for SIEM webhook
backend/frontend/index.html SRI hashes for Alpine.js and MSAL.js
backend/main.py Startup warning for auth misconfiguration
backend/secrets_manager.py New — Azure Key Vault integration
backend/requirements.txt Added optional Azure Key Vault packages
.env.example Documented new settings
VERSION Bumped to 1.7.14
THREAT_MODEL_v1.7.13.md Threat model documentation

Test Results

  • 80/80 pytest tests passing
  • Ruff lint/format clean