#469

Browser-driven phases fail on AppArmor Linux hosts: Chromium sandbox denied in worker (no way to pass apparmor=unconfined / --no-sandbox)

OpenMarcos7PYopened 1mo ago

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-default profile loaded)
  • Unprivileged user namespaces: enabled (kernel.unprivileged_userns_clone = 1, max_user_namespaces = 62792)
  • Provider: openai-codex via 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 FAILED

Root 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 run uses --shm-size 2gb --security-opt seccomp=unconfined but keeps the default docker-default AppArmor 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-default on 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)

  1. Add an option/env to launch the worker with --security-opt apparmor=unconfined (parallel to the existing seccomp=unconfined), or
  2. Launch Chromium/Firefox through playwright-cli with the sandbox disabled (chromiumSandbox: false / --no-sandbox) — or expose an env var to opt into it, or
  3. 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

0

No activity yet.