65 lines
3.0 KiB
Markdown
65 lines
3.0 KiB
Markdown
# 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
|