3.0 KiB
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/askendpoint rejectsLLM_BASE_URLdomains 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_URLwith 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
integrityhashes to both CDN scripts in the frontend:- Alpine.js 3.15.11:
sha384-WPtu0YHhJ3arcykfnv1JgUffWDSKRnqnDeTpJUbOc2os2moEmLkIdaeR0trPN4be - MSAL.js 2.37.0:
sha384-DUSOaqAzlZRiZxkDi8hL7hXJDZ+X39ZOAYV9ZDx44gUv9pozmcunJH02tjSFLPnW
- Alpine.js 3.15.11:
- 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
WARNINGifAUTH_ENABLED=truebut neitherAUTH_ALLOWED_ROLESnorAUTH_ALLOWED_GROUPSis 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_NAMEis set, AOC fetches these secrets from Key Vault at startup:aoc-client-secret→CLIENT_SECRETaoc-llm-api-key→LLM_API_KEYaoc-mongo-uri→MONGO_URIaoc-webhook-client-secret→WEBHOOK_CLIENT_SECRET
- Falls back silently to
.env/ environment variables when Key Vault is not configured - Dependencies:
azure-identityandazure-keyvault-secrets(commented out inrequirements.txt— uncomment when using Key Vault) - Impact: Eliminates long-lived secrets from
.envfiles 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