v1.0.0-rc.1
Pre-releasesockguard is a default-deny Docker socket proxy written in Go. It filters every request by HTTP method, path, and request body — so a compromised API consumer can't escalate through the socket.
sockguard v1.0.0-rc.1 — release candidate 1
⚠️ Pre-release. First v1.0 release candidate. It carries the breaking renames the v1.x line is built on — read the section below before upgrading. For production use the stablev1.0.0.
⚠️ Breaking changes
YAML schema renames — update configs and env var names before upgrading:
listen.tls.allowed_common_names→listen.tls.common_names(and the matchingallowed_dns_names,allowed_ip_addresses,allowed_uri_sans,allowed_public_key_sha256_pinslose theirallowed_prefix — same five renames apply toadmin.listen.tls.*).request_body.plugin.allow_ipc_host→allow_host_ipc;allow_pid_host→allow_host_pid.request_body.container_update.allow_devices→allow_all_devices.admin.max_body_bytes→admin.max_request_bytes.reload.debounce_ms/reload.poll_interval_ms(integer ms) →reload.debounce/reload.poll_interval(Go duration strings, e.g."250ms").
CLI flag rename: --deny-response-verbosity → --deny-verbosity.
Prometheus metric renames — update dashboards and alerts:
- Counter
sockguard_throttle_total→sockguard_throttle_requests_total; labelreason→reason_code. - The
rulelabel is dropped fromsockguard_http_denied_requests_total(its value was a zero-based ordinal that shifted on any rule edit). The rule index still appears in the structured audit log (matched_rule) and access log (rule).
🔒 Security
Dependency hardening — bumped eight indirect dependencies to close 11 OSSF Scorecard / OSV-Scanner findings. govulncheck now reports zero reachable and zero unreachable-but-imported vulnerabilities for the proxy binary. Notable: go-tuf/v2 (path-traversal + delegation-threshold + DoS fixes), sigstore/rekor (SSRF + nil-deref fixes), golang.org/x/net (HTTP/2 infinite loop), google.golang.org/grpc (authorization bypass).
Filter inspector hardening:
POST /containers/createnow always deniesHostConfig.VolumesFrom,UTSMode=host, a non-emptyCgroupParent,GroupAdd, andExtraHosts— five namespace-escape / privilege-escalation fields that were previously uninspected. No policy can opt out.POST /containers/{id}/execandPOST /swarm/unlockare now fail-closed when the request body can't be decoded.- Filter middleware applies a 30 s read deadline to the request body before inspection, so a slowloris-style stalled body can't pin an inspector worker.
Ownership & client-ACL hardening:
- The owner-label filter on list endpoints now replaces the entire
labelfilter rather than appending — closing a cross-tenant bypass where a client could OR inlabel=com.sockguard.owner=victimto widen the visible set. - Profile-lookup caches are now bounded (1024 entries, LRU); container-label resolution re-checks the container is still live before caching.
🔄 Changed
- New
RELEASING.mddocuments the end-to-end release process. serve --helpnow enumerates configuration precedence;--confighelp documents the missing-file fallback behavior.
📥 Install
docker pull ghcr.io/codeswhat/sockguard:1.0.0-rc.1📦 ghcr.io/codeswhat/sockguard:1.0.0-rc.1 · 📖 Documentation · 🔎 Full diff
