Browser-driven phases fail on AppArmor Linux hosts: Chromium sandbox denied in worker (no way to pass apparmor=unconfined / --no-sandbox)
Summary
On a Linux host with AppArmor enabled, every phase that drives the browser fails because Chromium cannot initialize its sandbox inside the worker container. auth-validation hits it first and the scan fails at preflight, but this affects any browser-driven phase (dynamic recon, exploitation), not just authenticated scans.
The worker is launched with --security-opt seccomp=unconfined but under the default AppArmor profile (docker-default). There is no flag or env var to relax AppArmor for the worker or to launch Chromium with --no-sandbox, so browser-driven scanning is impossible on these hosts.
Environment
- Shannon: 3.3.0 (npx mode)
- OS: Debian GNU/Linux 13 (trixie)
- Kernel: 6.12.107+deb13-amd64 x86_64
- Docker: 26.1.5
- AppArmor: enabled (
/sys/module/apparmor/parameters/enabled=Y,docker-defaultprofile loaded) - Unprivileged user namespaces: enabled (
kernel.unprivileged_userns_clone = 1,max_user_namespaces = 62792) - Provider:
openai-codexvia Pi OAuth (ready)
What happens
validate-authentication agent log:
[validate-authentication] bash: {"command":"playwright-cli -s=agent1 open http://127.0.0.1:4200/login","timeout":30}
[validate-authentication] bash failed (741ms)
[validate-authentication] bash: {"command":"playwright-cli -s=agent1 open http://127.0.0.1:4200/login --browser=firefox","timeout":30}
[validate-authentication] bash failed (693ms)
[validate-authentication] submit_auth_result: {"login_success":false,"failure_point":"out_of_band",
"failure_detail":"Browser could not launch, so the login form was never reached and no credentials
were submitted. Chromium aborted with sandbox credentials permission denied (13) on both launch attempts."}
[AGENT] validate-authentication: Failed (AUTH_LOGIN_FAILED) (19.0s)
Scan FAILEDRoot cause
- The target and API were fully reachable from inside the worker (verified
200/200), so this is not a network, CORS, or credentials problem. - The worker
docker runuses--shm-size 2gb --security-opt seccomp=unconfinedbut keeps the defaultdocker-defaultAppArmor profile (no--security-opt apparmor=unconfined). - The host has unprivileged userns enabled, so the block is AppArmor confinement of the container, not a host userns sysctl. Under
docker-defaulton this kernel, Chromium cannot create its sandbox user namespace →sandbox credentials permission denied (13).
Impact
Any phase that launches the browser fails on AppArmor-enabled Linux hosts (a very common default on Debian/Ubuntu). auth-validation fails immediately; dynamic recon and exploitation would fail the same way. Only source-analysis phases can run.
Requested fix (any one)
- Add an option/env to launch the worker with
--security-opt apparmor=unconfined(parallel to the existingseccomp=unconfined), or - Launch Chromium/Firefox through
playwright-cliwith the sandbox disabled (chromiumSandbox: false/--no-sandbox) — or expose an env var to opt into it, or - At minimum, document the AppArmor/Chromium-sandbox requirement and a supported workaround, and fail preflight with a clear message instead of
AUTH_LOGIN_FAILED.
Current workaround
None from Shannon's supported surface. Relaxing AppArmor at the host/daemon level works but lowers confinement for all containers, so it is not acceptable for many users.
Activity
0No activity yet.