You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
### Added
11
+
12
+
-**Swarm service create/update now enforces the container-create identity/privilege rails.** Four opt-in `request_body.service` knobs mirror their container-create counterparts onto the swarm `ContainerSpec`, closing a bypass where a service could request a workload posture that `/containers/create` would have denied: `require_non_root_user` (`ContainerSpec.User`), `require_no_new_privileges` (`ContainerSpec.Privileges.NoNewPrivileges`), `require_readonly_rootfs` (`ContainerSpec.ReadOnly`), and `require_drop_all_capabilities` (`ContainerSpec.CapabilityDrop` must include `ALL`). All default off. The root-user check reuses the same numeric-UID parsing as container-create, so zero-padded `"00"`/`"0:0"` forms are rejected. (Swarm has no privileged mode, per-service namespace sharing, or runtime/device selection, so those container-create rails have no service equivalent.)
13
+
10
14
### Security
11
15
12
16
-**Zero-padded numeric UIDs can no longer bypass root-user enforcement.**`require_non_root_user` (container create) and `allow_root_user: false` (exec) compared the user field to the exact string `"0"`, but Docker parses `Config.User` numerically — so `"00"`, `"000"`, or `"0000:5"` all run as root while slipping past the check. Both inspectors now parse the UID and treat any value resolving to 0 as root.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -461,7 +461,7 @@ LinuxServer's socket-proxy env surface is already Tecnativa-compatible for the b
461
461
462
462
| Tier | Theme |
463
463
|---|---|
464
-
| Security hardening (v1.x) | Continued mutation-test hardening of the rule-evaluation core and config validators; swarm `ContainerSpec.User` / `Privileges` enforcement parity with container create; `HostConfig.SecurityOpt` `label=`/`systempaths=` policy evaluation (currently passed through) |
464
+
| Security hardening (v1.x) | Continued mutation-test hardening of the rule-evaluation core and config validators; swarm `ContainerSpec` seccomp/AppArmor mode enforcement parity (the `Privileges.NoNewPrivileges`, `User`, `ReadOnly`, and `CapabilityDrop` rails already mirror container-create); `HostConfig.SecurityOpt` `label=`/`systempaths=` policy evaluation (currently passed through) |
465
465
| Policy refinement (v1.x) | Multiple frontend listeners on the main proxy, named rule path aliases |
466
466
| Internals (v1.x) | Code-review backlog: collapse the config → filter-options → policy translation layers behind a single source of truth (generated Viper defaults); allocation-free rate-limit bucket state (packed `atomic.Uint64`); profiling-gated JSON redaction fast path; clear per-profile in-flight gauges when a hot reload removes the profile |
0 commit comments