v1.7.14: LLM/SIEM domain allowlists, SRI hashes, auth misconfig warning, Azure Key Vault integration
This commit is contained in:
64
RELEASE_NOTES_v1.7.14.md
Normal file
64
RELEASE_NOTES_v1.7.14.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# 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-secret` → `CLIENT_SECRET`
|
||||
- `aoc-llm-api-key` → `LLM_API_KEY`
|
||||
- `aoc-mongo-uri` → `MONGO_URI`
|
||||
- `aoc-webhook-client-secret` → `WEBHOOK_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
|
||||
Reference in New Issue
Block a user