Skip to content

Commit fc69bbe

Browse files
authored
chore(deps): bump x/net to v0.57.0, raise Go floor to 1.25.12, add govulncheck CI (#105)
* fix(sandbox): gate implicit Dockerfile.odek builds behind operator approval A Dockerfile.odek in the working directory was built automatically with no approval gate, while the analogous sandbox_image/sandbox_env project-config knobs correctly require explicit operator approval. docker build executes the repo-controlled Dockerfile's RUN instructions outside the sandbox threat model (default capabilities, entire working directory readable as build context), so merely running odek inside a malicious repository - including odek serve, which sandboxes by default - granted host-adjacent code execution and workspace exfiltration. Changes: - approveProjectSandbox now also requires approval for an implicit Dockerfile.odek build (sandbox active, no explicit image, file present). The approval is keyed on the Dockerfile content hash, so editing the file invalidates a prior "trust this project" approval. The prompt warns that building runs repo-controlled code with the whole working directory as build context. - setupSandbox enforces the approval non-interactively at build time (env bypass, persisted trust, or in-process session approval), closing the gap where a Dockerfile appears or changes after startup - e.g. a serve-mode sandbox created per WebSocket connection, or a session continuation that re-enables the sandbox. - continueCmd now calls approveProjectSandbox like every other command; previously odek continue applied project sandbox overrides without any approval at all. - docker build runs with --network=none by default so RUN steps cannot fetch attacker payloads or exfiltrate build-context data over the network; ODEK_SANDBOX_BUILD_NETWORK=1 (operator-only) opts back in for legitimate networked builds such as RUN apk add. Regression tests cover the requirement detection, non-TTY fail-closed behavior, env bypass, once-vs-trust semantics, content-change invalidation at both gates, build-time enforcement, and the --network=none default. Docs updated: SANDBOXING.md, SECURITY.md (new section 18b), CONFIG.md, AGENTS.md. * chore(deps): bump x/net to v0.57.0, raise Go floor to 1.25.12, add govulncheck CI Addresses two dependency-floor findings: 5. golang.org/x/net v0.54.0 carried ~7 published advisories (fixed in v0.55.0/v0.56.0). None were reachable through odek's call graph, but the constraint permitted the vulnerable version. Bumped to v0.57.0 (with x/term v0.45.0 and x/sys v0.47.0 as required companions) and added a govulncheck job to CI so future advisories fail the build. 6. go.mod declared go 1.25.0; scanning with early 1.25.x toolchains traces 22 reachable stdlib CVEs (crypto/tls, crypto/x509, net/http, net/url, net, os, encoding/pem, encoding/asn1), fixed across Go 1.25.2-1.25.12. Raised the go directive to 1.25.12 (verified as the latest 1.25.x patch via go.dev/dl) and stated the minimum build toolchain in the README, docs/DEVELOPMENT.md, and the test/release workflows. Verified: govulncheck reports zero reachable module vulnerabilities after the bump; the single remaining local stdlib report (GO-2026-5856) is fixed in exactly 1.25.12 per the vuln DB and only appears because the local scanning toolchain (go1.26.4) is one patch behind. Full test suite, vet, and golangci-lint pass with the bumped dependencies.
1 parent 489f1f2 commit fc69bbe

6 files changed

Lines changed: 34 additions & 12 deletions

File tree

.github/workflows/release.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ jobs:
1616

1717
- uses: actions/setup-go@v5
1818
with:
19+
# Minimum supported build toolchain is Go 1.25.12 (go.mod floor);
20+
# "1.25" resolves to the latest 1.25.x patch release.
1921
go-version: "1.25"
2022

2123
- name: build

.github/workflows/test.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ jobs:
1414

1515
- uses: actions/setup-go@v5
1616
with:
17+
# Minimum supported build toolchain is Go 1.25.12 (go.mod floor);
18+
# "1.25" resolves to the latest 1.25.x patch release.
1719
go-version: "1.25"
1820

1921
- name: build
@@ -42,3 +44,19 @@ jobs:
4244
with:
4345
version: v2.12.2
4446
args: --timeout=10m
47+
48+
vuln:
49+
runs-on: ubuntu-latest
50+
steps:
51+
- uses: actions/checkout@v4
52+
53+
- uses: actions/setup-go@v5
54+
with:
55+
# Latest stable toolchain: stdlib advisories are assessed against
56+
# the newest patch release, and module advisories (e.g. x/net) are
57+
# toolchain-independent. The go.mod floor (go 1.25.12) pins the
58+
# minimum toolchain for downstream builders.
59+
go-version: "stable"
60+
61+
- name: govulncheck
62+
run: go run golang.org/x/vuln/cmd/govulncheck@latest ./...

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
One binary. One loop. Zero frameworks. ReAct (Reasoning + Acting) — think, therefore act.
66

77
```bash
8-
# Install
8+
# Install (requires Go ≥ 1.25.12 — see "Build requirements" below)
99
go install github.com/BackendStack21/odek/cmd/odek@latest
1010

1111
# Use (set ODEK_API_KEY, DEEPSEEK_API_KEY, or OPENAI_API_KEY)
@@ -14,6 +14,8 @@ odek run "How many lines in go.mod?"
1414
# → 3 lines
1515
```
1616

17+
**Build requirements:** Go **1.25.12 or newer**. The `go` directive in `go.mod` pins this floor because earlier 1.25.x toolchains ship reachable standard-library CVEs; CI additionally runs `govulncheck` on every push/PR so new advisories fail the build.
18+
1719
---
1820

1921
## Why odek

docs/DEVELOPMENT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ no maintained changelog file — create a release/tag and GitHub produces the no
88

99
## Prerequisites
1010

11-
- Go 1.25+ (matches `go.mod`; CI builds with the same toolchain)
11+
- Go 1.25.12+ (matches `go.mod`; CI builds with the same toolchain line and runs `govulncheck` on every push/PR)
1212
- Docker (for sandbox integration tests only)
1313

1414
## Building

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
module github.com/BackendStack21/odek
22

3-
go 1.25.0
3+
go 1.25.12
44

55
require (
66
github.com/BackendStack21/go-mcp v1.1.0
77
github.com/BackendStack21/go-vector v1.3.0
8-
golang.org/x/net v0.54.0
9-
golang.org/x/term v0.43.0
8+
golang.org/x/net v0.57.0
9+
golang.org/x/term v0.45.0
1010
)
1111

12-
require golang.org/x/sys v0.44.0
12+
require golang.org/x/sys v0.47.0

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ github.com/BackendStack21/go-mcp v1.1.0 h1:NQStOkqUWjzzzmySnfFHvPKhbKr92iBuPJjkN
22
github.com/BackendStack21/go-mcp v1.1.0/go.mod h1:RKFw6nrl6ySQqqrR8KtG7HYZ/heyyjT8SjiEtlbTMY8=
33
github.com/BackendStack21/go-vector v1.3.0 h1:VT1cwPAUzkg3Rt0fXA+jTzW472jgObqs85/TcPs4N7Q=
44
github.com/BackendStack21/go-vector v1.3.0/go.mod h1:TkxZEqKGeN38QNWUoQt4xJcf6n2kI1pY7nu6ibXK1Yo=
5-
golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
6-
golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
7-
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
8-
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
9-
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
10-
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
5+
golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
6+
golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
7+
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
8+
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
9+
golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0=
10+
golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=

0 commit comments

Comments
 (0)