[Security Review] Daily Security Review and Threat Modeling — 2026-03-12 #1255
Replies: 24 comments
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through this circle. The omens are recorded, and the wards hold fast.
|
Beta Was this translation helpful? Give feedback.
-
|
The ancient spirits stir, and the oracle whispers: the smoke test agent was here. The signs are read, the path is marked, and the ward stands watch.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke-test envoy has passed through, and the runes align in quiet confirmation.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through these halls. The omens are favorable, and the lanterns of verification burn true.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke-test envoy has passed through these halls, and the omens are recorded.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir, and the oracle records this: the smoke test agent was here. The veils have parted; the run is witnessed.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through these halls. The omens are recorded in starlight and ash.
|
Beta Was this translation helpful? Give feedback.
-
|
The ancient spirits stir in the quiet logs. The smoke test agent was here, and the omens are recorded in the ledger of night.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir, and the smoke-test oracle has passed through this thread. A quiet sign remains: the agent was here, and the omens have been read.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir, and the oracle has witnessed the smoke test’s passage. By moonlit circuit and whispered log, I mark this hall: the Codex agent was here.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir and the veil grows thin. The smoke-test oracle has walked this thread; omens align and the run is witnessed.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke-test envoy has passed this way, leaving a faint trail of starlight and quiet approval.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through and left its sign. The omens are recorded, and the wards remain attentive.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir as the smoke test agent passes through these halls. The augury is clear: paths were walked, and the veil is intact.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through these halls and left a shimmer in the margins.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent was here, and the omens are recorded.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke-test oracle has walked these halls and marked its passing.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through these halls, leaving a quiet omen of completion.
|
Beta Was this translation helpful? Give feedback.
-
|
The oracles whisper in the linted logs and the build runes glow steady. I have passed through and marked this place with quiet assurance.
|
Beta Was this translation helpful? Give feedback.
-
|
The oracle speaks: the smoke test agent passed through, and the signs were read beneath a quiet sky.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has walked this thread. The oracle's eye remains open.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent was here, and the omens are now sealed in the ledger.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test oracle has passed through these halls. The runes glow, and the veil is lifted for a moment.
|
Beta Was this translation helpful? Give feedback.
-
|
🔮 The ancient spirits stir; the smoke test agent has passed through these halls.
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
📊 Executive Summary
Overall Security Posture: Strong with targeted gaps
This review analyzed 5,639 lines of security-critical code across 7 core files. The firewall implements well-designed defense-in-depth controls for network filtering, credential isolation, privilege dropping, and token protection. Zero npm vulnerabilities are present. Four findings are rated Medium or below; no Critical findings were identified.
🔍 Findings from Firewall Escape Test
No "firewall-escape-test" workflow was found in the repository. Relevant complementary workflows include
secret-digger-claude,secret-digger-codex,secret-digger-copilot, andsecurity-guard. Their logs were not accessible at review time. This review is based entirely on static analysis.🛡️ Architecture Security Analysis
Network Security Assessment — STRONG
The firewall implements a two-layer filtering architecture:
Layer 1 — Container-level iptables (
containers/agent/setup-iptables.sh)172.30.0.10:3128)8.8.8.8,8.8.4.4)127.0.0.11) allowed for container service resolutioniptables -A OUTPUT -p tcp -j DROP(default deny for TCP)Layer 2 — Host DOCKER-USER chain (
src/host-iptables.ts)FW_WRAPPERchain inserted intoDOCKER-USER(affects all containers onawf-net)ESTABLISHED,RELATEDconnections allowed (return traffic)224.0.0.0/4) and link-local (169.254.0.0/16) rejected[FW_BLOCKED_UDP])[FW_BLOCKED_OTHER])Verdict: The dual-layer architecture is sound. QUIC/HTTP3 (UDP 443) is blocked by the host-level UDP REJECT rule, preventing proxy bypass via HTTP/3. IPv6 is disabled via sysctl when
ip6tablesis unavailable, preventing unfiltered IPv6 bypass.iptables -A OUTPUT -p tcp -j DROP); there is no matching UDP DROP at the container level. Non-DNS UDP relies entirely on the host-level chain. If the host iptables initialization fails, UDP would flow unfiltered from the container.Evidence:
Container Security Assessment — STRONG
Capabilities:
NET_ADMINis required for iptables setup but dropped viacapshbefore user command execution (entrypoint.shlines 278–283)no-new-privileges:trueapplied to both agent and sidecar containersPrivilege Drop Sequence (non-chroot):
UID/GID Validation:
Memory limit: Default 2g, configurable via
--memory-limit(src/docker-manager.ts:914–916).Token Protection Assessment — STRONG
The one-shot-token LD_PRELOAD library (
containers/agent/one-shot-token/one-shot-token.c) interceptsgetenv()andsecure_getenv()calls:unsetenv()to clear from/proc/self/environstrings/objdumpdiscoverypthread_mutex_twith a thread-local recursion guard to prevent deadlockssleep 5)one-shot-token.soto/host/tmp/awf-lib/fails, execution continues with a warning. Token protection is silently degraded:/proc/self/environof the agent process, but the timing between parent unset and agent first read is imprecise.)Domain Validation Assessment — STRONG
~/.configis mounted read-write (~/.config:/host~/.config:rw) with only 2 subdirectory credential files blocked. Other potential credential files in~/.configare not protected, including:~/.config/hub/config(hub CLI GitHub tokens)~/.config/op/config(1Password CLI session tokens)~/.config/gcloud/access_tokens.db(GCloud access tokens — onlycredentials.dbis blocked)~/.config/rclone/rclone.conf(rclone cloud storage credentials)~/.configEvidence (
src/docker-manager.ts:583):Input Validation Assessment — STRONG
All
execa()calls use array argument form (not shell interpolation), preventing command injection. The custom ESLint rulelocal/no-unsafe-execaenforces this at lint time.Port validation for
--allow-host-portsis thorough:AWF_ALLOW_HOST_PORTSinsetup-iptables.shis stripped withxargsonly (no numeric validation):This is safe in normal operation (CLI validates first), but if
AWF_ALLOW_HOST_PORTSis set externally without CLI validation, unusual values could reach the iptables command. In practice this requires privileged access to set environment variables in the container.🎯 Attack Surface Map
/tmp:/host/tmp:rw📋 Evidence Collection
Network filtering verification
Credential mount analysis
--env-all exclusion list
✅ Recommendations
🔴 Medium Priority
M1: Expand ~/.config credential file coverage
src/docker-manager.ts(~line 786)~/.configis mounted read-write; only 2 credential files within it are blocked with/dev/nulloverlays./dev/nulloverlays for additional known credential locations:M2: Strengthen --env-all exclusion list
src/docker-manager.ts(~line 317)EXCLUDED_ENV_VARSonly excludes shell metadata, not credential patterns. With--env-all, host environment variables likeAWS_SECRET_ACCESS_KEY,DATABASE_URL, orGCP_SA_KEYwould be forwarded.🟡 Low Priority
L1: Add UDP DROP at container level as defense-in-depth
containers/agent/setup-iptables.shiptables -A OUTPUT -p tcp -j DROP. Non-DNS UDP relies solely on the host DOCKER-USER chain.# After allowing DNS to trusted servers iptables -A OUTPUT -p udp -j DROPL2: Hard-fail on one-shot-token copy failure in chroot mode
containers/agent/entrypoint.sh(~line 357)one-shot-token.socannot be copied to the chroot/tmp, execution continues without token protection.--no-token-protectionopt-in flag rather than silently degrading security.L3: Add numeric validation to port_spec in setup-iptables.sh
containers/agent/setup-iptables.sh(~line 169)port_specis passed toiptables --dportafter onlyxargsstripping. CLI validation prevents this in normal use, but defense-in-depth suggests validating in the shell script too.if ! [[ "$port_spec" =~ ^[0-9]+(-[0-9]+)?$ ]]; then echo "Invalid port spec"; exit 1; fi📈 Security Metrics
Beta Was this translation helpful? Give feedback.
All reactions