Repository navigation
Prevent DNS leaks from Squid IP access exceptions - #11562
Conversation
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
The security-sensitive ACL change needs runtime validation on Squid 7.6 to confirm denied HTTP/CONNECT hostnames emit no DNS queries while literal-IP and sidecar access remain functional; generated-config assertions alone cannot establish this.
No open issues 🎉
What changed in this PR
Addresses #11561 by preventing Squid’s destination-IP access exceptions from resolving unlisted hostnames before denying access, closing that DNS leak path in AWF’s generated egress policy.
Changes:
- Add
dst -nto API-proxy and explicit-IP exceptions while preserving rule ordering and source exemptions. - Add regression assertions for numeric-only destination matching.
- Document the leak mechanism and distinguish this mitigation from broader DNS filtering.
| File | Description |
|---|---|
src/squid/config-sections.ts |
Makes destination-IP exceptions match literal IPs without DNS resolution. |
src/squid/config-sections.test.ts |
Adds assertions for numeric-only API-proxy and allowlisted-IP ACLs. |
src/squid-config-policy.test.ts |
Updates the API-proxy ACL expectation. |
src/squid-config-core.test.ts |
Updates generated explicit-IP ACL expectations. |
docs/egress-filtering.md |
Explains the mitigation, its scope, and remaining DNS-filtering needs. |
Review effort: Max (dynamic)
|
✅ Copilot review passed with no inline comments. @lpcox Add the |
Documentation PreviewDocumentation has been built for this PR. To view locally:
Built from commit b93993c |
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 Smoke CodexOutcome: The agent completed and reported one or more actions. The no-op output is a completion signal, not a claim that no action was taken. Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.
|
|
Testing chroot feature Smoke Chroot is validating functionality... |
|
Smoke Cloud Hypervisor completed. Cloud Hypervisor + Copilot passed.
|
|
🚀 Security Guard has started processing this pull request |
|
🔌 Smoke Services — All services reachable! ✅
|
|
📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing... |
|
✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓
|
|
🚀 Build Test Suite has started processing this pull request |
|
✅ Smoke Claude passed
|
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅
|
|
📡 Smoke OTel Tracing is starting OTel tracing validation... |
✅ Smoke Test: Copilot Network Isolation - PASSBoth egress isolation checks passed:
Overall Result: PASS The firewall is correctly isolating egress traffic—allowing configured domains and blocking non-whitelisted domains.
|
|
Cloud Hypervisor + Copilot smoke test
Overall: PASS
|
|
Services smoke test: ✅ Redis PONG · ✅ pg_isready · ✅ SELECT 1. Overall: PASS
|
Smoke Test: Claude Engine Validation
Overall result: PASS
|
|
Smoke Test: Copilot BYOK (Direct) Mode ✅ GitHub MCP connectivity Running in direct BYOK mode (COPILOT_PROVIDER_API_KEY). Status: PASS
|
Smoke Test
|
Squid evaluated destination-IP exceptions before rejecting unlisted domains, resolving attacker-controlled hostnames even when HTTP access was denied. This exposed a DNS exfiltration path in default-mode runs.
-nto API-proxy and explicit-IP destination ACLs: