Repository navigation
[Security Review] Daily Security Review 2026-10-01 #9313
Replies: 3 comments
|
🔮 The ancient spirits stir. The smoke test agent passed through this chamber, and the omens read PASS. Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "clients2.google.com"See Network Configuration for more information.
|
|
Thanks for the detailed review! The defense-in-depth approach here is solid, especially the combination of seccomp default-deny and capability drops. A few thoughts from my side:
Overall, the architecture looks robust for the threat model. Keeping the seccomp profile strict while allowing necessary procfs mounts is a good balance. Great work documenting the STRIDE analysis too. |
|
This discussion was automatically closed because it expired on 2026-10-08T12:40:28.063Z.
|
Uh oh!
There was an error while loading. Please reload this page.
📊 Executive Summary
Review of gh-aw-firewall at HEAD (2026-10-01). Posture is solid: defense in depth (Squid L7 ACL, iptables DNAT/egress rules, seccomp default-deny,
no-new-privileges, capability drops, credential isolation via API proxy). No new critical/high exploitable issues found. Limited-depth review (key files only);npm auditcould not run (registry TLS error in sandbox).🔍 Findings from Firewall Escape Test
The pre-fetched
/tmp/gh-aw/escape-test-summary.txtcontains only the Secret Digger (Copilot) run log tail: the agent refused the task (noop), threat detection raised awarning(threat_detected), and a tracking issue (#6205) was created. No escape success or concrete vulnerability was reported. The log carries no attempt-level data, so the review is mostly code-based.🛡️ Architecture Security Analysis
Network –
src/host-iptables.tsis now a thin re-export ofhost-iptables-rules/-network/-cleanup; in-container rules are incontainers/agent/setup-iptables.sh(540 lines).src/compose-network.ts:36also supports an iptables-free mode (no NET_ADMIN).Container –
src/services/agent-service.ts:60-80:cap_add: SYS_CHROOT, SYS_ADMIN(dropped later via capsh in entrypoint);cap_drop: NET_RAW, SYS_PTRACE, SYS_MODULE, SYS_RAWIO, MKNOD;no-new-privileges:true; custom seccomp (defaultAction: SCMP_ACT_ERRNO,seccomp-profile.json:2);apparmor:unconfined(required for procfs mount). Helper services usecap_drop: ['ALL'](service-security.ts:45,agent-service.ts:352).Domain validation –
src/domain-patterns.ts(137 lines) validates and throws on invalid patterns (line ~76).Input validation – no
shell: true/exec(usages found insrc/*.ts(non-test), viagrep -n "shell: true\|exec(" src/*.ts./tmp(rw)apparmor:unconfinedAWF_SKIP_CAP_DROPenv removes all cap_drop (incl. ALL on helpers)🎯 Attack Surface Map
📋 Evidence Collection
Commands
grep -n "cap_drop\|cap_add\|no-new-privileges\|seccomp" src/services/*.ts→ agent-service.ts:60-80, service-security.ts:45-46grep -n defaultAction containers/agent/seccomp-profile.json→2: "defaultAction": "SCMP_ACT_ERRNO"sed -n 100,135p src/capability-filter.ts→ AWF_SKIP_CAP_DROP returns[]; unknown caps preservednpm audit→ failed (self-signed certificate on registry; not evaluated)✅ Recommendations
AWF_SKIP_CAP_DROPis honored (capability-filter.ts:109) and consider restricting it to CI contexts. Keep the pre-capsh SYS_ADMIN window minimal and test-covered.npm auditin CI with a trusted registry and archive the result; have the escape-test summary include attempt-level results for better cross-reference; consider splittingentrypoint.shfor auditability.📈 Security Metrics
All reactions