Skip to content

Commit 8c2bdb1

Browse files
ZhiXiao-LinRoy Lin
andauthored
chore(release): v2.3.0 — audit closure (security + hardening) (#118)
Bump workspace 2.2.0 -> 2.3.0 (all 9 a3s-* crates inherit; Cargo.lock synced). Closes the 35-finding adversarial audit plus new finds: both criticals and every security / data-loss / DoS / resource-leak / hang finding fixed across the CRI server, the cgroup resource-limit cluster, TEE/attestation, the TTY (securityContext) path, cross-process state locking, and CLI robustness. The headline isolation + resource-enforcement fixes were validated on real microVMs (measured CPU throttling, in-guest cgroup limits, and TTY confinement: CapEff->0, seccomp filter mode, pids.max). No breaking API changes; resource limits and TTY security controls that were silently ignored are now enforced. See CHANGELOG [2.3.0] for the full list. Co-authored-by: Roy Lin <roylin@a3s.box>
1 parent c6972af commit 8c2bdb1

3 files changed

Lines changed: 64 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,60 @@ All notable changes to A3S Box will be documented in this file.
44

55
## [Unreleased]
66

7+
## [2.3.0] — 2026-06-16
8+
9+
A security and hardening release closing a 35-finding adversarial audit (plus
10+
new finds): both criticals and every security / data-loss / DoS / resource-leak
11+
/ hang finding is fixed. The headline isolation and resource-enforcement fixes
12+
were validated on real microVMs (measured CPU throttling, in-guest cgroup
13+
limits, and TTY confinement), not just CI. No breaking API changes; behavior
14+
changes are noted below (resource limits and TTY security controls that were
15+
silently ignored are now actually enforced).
16+
17+
### Security
18+
19+
- **TTY containers were unconfined** — a CRI `tty: true` workload ran through the
20+
PTY path, which applied **none** of the pod's securityContext: full
21+
capabilities, no seccomp filter, `no_new_privs` unset, no cgroup, and no
22+
masked/readonly path restrictions. The PTY path now performs the **same**
23+
confinement + container setup as the exec path (seccomp, capability drop/keep,
24+
no_new_privs, supplemental groups, per-container cgroup, `/proc`+`/dev`, and
25+
MaskedPaths/ReadonlyPaths/readOnlyRootFilesystem). Real-VM verified.
26+
- **TEE/attestation** — RA-TLS now verifies the TLS CertificateVerify signature
27+
(proof-of-possession), defeating captured-certificate replay; sealed-storage
28+
rollback protection binds the version into the AEAD so a forged version fails
29+
authentication; an empty SNP certificate chain fails closed; container env
30+
secrets are no longer written to debug logs.
31+
- **OCI build** — COPY/ADD source and destination paths are contained against
32+
traversal escapes; ADD-from-URL is bounded.
33+
34+
### Fixed
35+
36+
- **Resource limits (cgroup) now actually enforced**`--cpu-quota`/`--cpu-period`/
37+
`--cpu-shares`, `--pids-limit`, `--memory-reservation`, and `--memory-swap` are
38+
plumbed to and applied by the in-guest per-container cgroup on the run, CRI,
39+
deferred-main (warm-pool), and TTY paths; the dead/redundant host-side cgroup
40+
path (which never enforced anything and leaked an empty cgroup) was removed;
41+
`container update` no longer writes to the root cgroup when the per-container
42+
slice can't be resolved.
43+
- **CRI lifecycle**`StartContainer` claims the Created→Running transition
44+
before spawning the workload (no concurrent double-spawn); `RunPodSandbox`
45+
tears down the booted microVM + network if the request is cancelled before the
46+
sandbox is registered (was an orphaned-VM leak); mountinfo octal escapes are
47+
decoded before unmount (prevented host-data-loss `remove_dir_all`); a wedged
48+
guest can no longer hang the host exec/stop path.
49+
- **Cross-process data-loss races** — IP allocation, volumes, the image index,
50+
and `credentials.json` are guarded by cross-process locks with load-fresh RMW,
51+
closing duplicate-IP / lost-pull / lost-login / lost-volume races.
52+
- **Resource leaks** — a failed VM stop, a box `rm` mid-restart, and a partial
53+
`create`/`snapshot restore` no longer leak the VM / overlay / box directory;
54+
the host per-box cgroup dir is reclaimed on teardown.
55+
- **Robustness** — checked integer math in the CLI size/memory parsers (no panic
56+
on a fat-fingered flag); atomic + idempotent layer/rootfs cache writes (no
57+
concurrent-build corruption); bounded `console.log` for every log driver
58+
(no disk-fill); snapshot metadata tolerates missing fields and surfaces a
59+
warning instead of silently dropping a snapshot.
60+
761
## [2.2.0] — 2026-06-15
862

963
A correctness and hardening release: 24 fixes across the CLI state machine,

src/Cargo.lock

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ resolver = "2"
2222
h2 = { path = "third_party/h2" }
2323

2424
[workspace.package]
25-
version = "2.2.0"
25+
version = "2.3.0"
2626
edition = "2021"
2727
authors = ["A3S Lab Team"]
2828
license = "MIT"

0 commit comments

Comments
 (0)