Test matrix
This page summarizes SECURITY_TEST_MATRIX.md.
“Pass” means the invariant held on the listed kernels and environments; it is
not a proof against unknown kernel defects.
Environments
Section titled “Environments”| Environment | Coverage |
|---|---|
| GitHub-hosted x86_64 VM (Ubuntu 24.04, rootful privileged Docker) | Full sandbox suite and five-round adversarial repetition on every push and pull request |
| GitHub-hosted ARM64 VM (Ubuntu 24.04, rootful privileged Docker) | The same suite and repetition |
| Production image (linux/amd64) | Smoke test and the language toolchain test on every push and pull request |
| Kernels | Suites pass on Linux 6.6, 6.12 and 6.16; 5.8 is the minimum supported |
| Local development | Only inside a disposable KVM guest (scripts/vm.sh) |
Attack families covered
Section titled “Attack families covered”| Family | Probes |
|---|---|
| Submitted paths | Absolute paths, .., symlinks, /proc magic links, cross-mount hard links, directories, FIFOs, sockets, devices, parallel symlink swaps, RENAME_EXCHANGE swaps during directory creation |
| Root and mounts | Old root absent, private propagation, read-only toolchains, empty /sys, subset=pid procfs, no cgroup filesystem, nodev,nosuid tmpfs |
| Identity | Request-owned user namespace, distinct identities for concurrent requests, UID/GID map checks, setuid/setgid/setgroups, map rewriting, chroot, hostname, capability and ambient-capability regain |
| Process visibility | Per-task PID namespace, parallel tasks unable to see or signal each other, protected PID 1, denied /proc/1/root, orphan and double-fork reaping |
| File descriptors | Only stdin, stdout and stderr survive exec |
| Syscalls | Every denied syscall invoked under each of the four profiles, including with a SIGSYS handler installed; socket-family rules; ENOSYS for unlisted calls under v2 |
| Network | Interfaces, IPv4/IPv6 routes, external connects, resolver files, native socket denial, unique namespace per runtime |
| Memory and processes | Real OOM kills, own versus ancestor OOM, per-request cgroup sizing, no swap, fork exhaustion, peaks, cleanup |
| Timeouts | Atomic cgroup.kill, descendants holding stdout open, request deadline confined to its own request, later steps reported not_started |
| CPU and rlimits | cpu.max throttling, RLIMIT_CPU, EMFILE, EFBIG, stack overflow, no core files |
| Output | stdout and stderr floods, binary output, truncation flags, per-request budget, concurrent stdin and stdout, large parallel results |
| Lifecycle | Timeout, signals, output and policy kills, setup failure, API cancellation, shutdown during multi-step requests, disconnecting clients, cgroup and root cleanup |
Deliberately not tested
Section titled “Deliberately not tested”Privileged containers share the test machine’s kernel, so these are excluded from the suites:
- kernel exploits, public or private;
- deliberate kernel panics, hung tasks or host-wide OOM;
- speculative execution, cache timing, Rowhammer and other physical side channels;
- malicious firmware, DMA, device passthrough and hypervisor attacks;
- Docker daemon, runc or host-root compromise proofs of concept.
Testing them needs disposable VMs with crash detection, and Faber has no microVM backend yet, so passing the suite says nothing about protection from host-kernel compromise. See the isolation tier.