Skip to content

fix(deps): security sweep — grpc x3 advisories + otel family lockstep (dependabot #89/#90/#91/#88) - #885

Open
Amperstrand wants to merge 1 commit into
mainfrom
deps/security-sweep-grpc-otel
Open

Amperstrand wants to merge 1 commit into
mainfrom
deps/security-sweep-grpc-otel

Conversation

@Amperstrand

@Amperstrand Amperstrand commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

What

Clears all four open dependabot alerts on :

No gonuts-fork pins touched — this PR does not interact with the one-pin-everywhere protocol (#798).

Verification (pinned toolchain go 1.26.8, GOTOOLCHAIN=local)

  • scripts/token-recovery: build + vet clean (carries no test files).
  • src: build + vet clean; root suite green (23 s, -tags testenv).
  • Full-tree make go-battery running — results will be posted on this PR.

Risk

Low. Both bumps are indirect/runtime dependencies with no API surface changes at call sites; token-recovery is an offline operator tool (no router deployment path), and src's grpc/otel ride the telemetry exporter chain, not the payment paths. The otel alignment fixes a latent version-skew rather than introducing one.

@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Full-tree make go-battery result: 16 modules green, zero failures (final tally line: go-battery: 16 modules green; deps-branch tree, pinned go 1.26.8). Verification complete — this PR is ready to merge. The dependabot alerts (#89/#90/#91/#88) close automatically when this lands on the default branch.

@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Nominated to the v0.6.0 release scope (#909). If the scope holds, this is on the critical path for final — review priority requested. Deferred PRs: no action needed; the scope issue lists you for 0.6.1+.

@Amperstrand Amperstrand left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Batch-2 (orchestrator sprint): clears all four remaining dependabot alerts (the repo's LAST open security alerts). The otel family-lockstep fix (stranded v1.30 → uniform v1.47) is the right resolution, not just version-bumping. Merge-ready — release-blocker class (security).

@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Verification run (agent lane, 2026-10-13): worktree @ b700f41, baseline main @ 27baf22.

  • make go-battery (16 modules): GREEN 16/16 — zero functional regressions.
  • tests/contract/check-deps-sync.py: FAIL — drift introduced by this PR (baseline: 136 shared deps in sync):
    • grpc-gateway/v2: root v2.30.0 vs tollwallet v2.29.0
    • golang.org/x/mod / x/sync / x/tools: root v0.41.0 / v0.23.0 / v0.49.0 vs cli+merchant+tollwallet v0.24.0 / v0.20.0 / v0.33.0

Pattern: the sweep bumped root + src + scripts/token-recovery but not the nested cli/merchant/tollwallet go.mod files (tollwallet also kept grpc-gateway v2.29.0). release-check runs this gate — it blocks as-is. Fix: apply the same bumps across the nested modules (per-module go get + go mod tidy).

token-recovery: grpc v1.82.1 -> v1.83.1 clears the two high advisories
(xDS DoS crash, HTTP/2 DATA-frame OOM) and the medium xDS RBAC bypass
(dependabot #89/#90/#91).

src: the OpenTelemetry graph resolved a stale mixed family — otlptracegrpc
stranded at v1.30 against everything else at v1.47 (otel requires family
lockstep) — which is the graph dependabot flagged for the otlptrace
URL-leak advisory (#88). Aligned uniform at v1.47.0; the same resolution
swept src's grpc to v1.83.2.

Verified per-module with the pinned toolchain (go 1.26.8): build, vet,
and tests green (token-recovery carries no test files; src root suite
23 s). Full-tree battery follows on the PR.
@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Rebased onto current main (was CONFLICTING in src/go.mod): union resolution — main's go.opentelemetry.io/auto/sdk v1.2.1 + this PR's otlptracegrpc v1.47.0 indirect; go mod tidy reconciled the graph and its results are folded into the rebased commit (b89a473). Verification: root module go build ./... + go vet ./... clean; token-recovery script module vets clean (no test files). GitHub mergeable should flip to MERGEABLE. Evidence review from state comment 6 on #965 stands (advisory list unchanged).

@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Local CI gate — PR #885: fix(deps): security sweep — grpc x3 advisories + otel family lockstep (dependabot #89/#90/#91/#88)

Run of scripts/pr-verify.sh (the local CI gate: GitHub Actions is
org-blocked and the ngit lane fires only on maintainer mirror pushes,
so a PR ref gets no CI runs — this comment is the offline verification
evidence, produced on the pinned head SHA).

  • Head: deps/security-sweep-grpc-otel @ b89a473980
  • Base: main @ dcbf015f99
  • Gate: pr-verify 5a703563168f on ai-legion, started 2026-10-18 17:40 UTC, wall 395s
  • Logs: /tmp/tollgate-pr-verify/885-20261018T173340Z (on the verifying host)
Leg Result Detail
hygiene PASS no conflict markers in the tracked tree (0s)
contract-fences FAIL red: doc-facts contract dependency sync — see contract-fences.log; 12 checks green; 1 skipped (absent from tree: entry-UI marker path fence) (8s)
packaging-sequential PASS 13 suites (7s)
shell-suites PASS 17 suites (uci-defaults) (44s)
packaging-concurrent PASS 13 suites, all at once (3s)
go-battery FAIL 18 modules — see go-battery.log (333s)

Verdict: 2 leg(s) RED — 4 green.

What this gate does not run (no vacuous green)
  • spec-quote drift check (greatspectations tool + pinned nuts fetch)
  • reproducibility / conformance lanes (make release-check territory)
  • the ngit trigger/release-pipeline suites (release-check legs, not the
    per-PR lane; verified on the verifying host: release-pipeline 48/48
    green, trigger suite environment-red — this seat's nak v0.16.2 does
    not accept nsec-string args to key public, identical on main)
  • router-visible behaviour (PRTA / bench — unit green ≠ router works)
failing-leg log tails
contract-fences — tail

🔴 google.golang.org/genproto/googleapis/rpc — 2 versions:
   root: v0.0.0-20260928230214-8a89bd6388cc
   tollwallet: v0.0.0-20260720211330-0afa2a65878a

🔴 google.golang.org/grpc — 2 versions:
   root: v1.83.2
   tollwallet: v1.82.1

Fix: update all go.mod files to the same version.
     Run 'go mod tidy' in each sub-module after updating.
== gonuts pin fence (offline identity)
ok   an aligned tree (block + single-line carriers) passes
ok   a block-form carrier on a different version
ok   a single-line carrier left behind (the token-recovery shape)
ok   a go.sum that never recorded the truth version (half-update)
ok   a self-consistent pseudo-version integration pin passes OFFLINE (the --latest leg is the release gate for it)
ok   a manifest without the .gonuts key
ok   a tree whose manifest names a pin no carrier has

7 cases, 0 failed
== gonuts pin carriers
  manifest pin (packaging/build-inputs.json .gonuts.version): v0.13.0
  carriers discovered by glob: 5 module(s)
✅ one pin, everywhere: github.com/OpenTollGate/gonuts-tollgate v0.13.0 across 5 carrier(s).
== mirror/relay sync
ok    BLOSSOM_SERVERS: 13 copies identical (https://blossom.primal.net https://blossom.psbt.me https://blossom2.orangesync.tech https://drive.cashu.email)
ok    relay list: 13 copies identical (wss://relay.damus.io wss://nos.lol wss://nostr.mom wss://relay1.orangesync.tech wss://relay2.orangesync.tech)
== stale import paths
✅ All 287 Go source files use correct import paths.
go-battery — tail
=== module: src
ok  	github.com/OpenTollGate/tollgate-module-basic-go	14.159s
?   	github.com/OpenTollGate/tollgate-module-basic-go/cmd/tg-vendor-ie-demo	[no test files]
=== module: src/cli
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/cli	1.552s
=== module: src/cmd/tollgate-cli
ok  	tollgate-cli	2.061s
=== module: src/cmd/tollgate-cvm
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/cmd/tollgate-cvm	1.358s
=== module: src/config_manager
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/config_manager	1.385s
=== module: src/identity
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/identity	3.642s
=== module: src/lightning
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/lightning	1.008s
=== module: src/merchant
ok  	github.com/OpenTollGate/tollgate-module-basic-go/src/merchant	281.954s
=== module: src/merchant_types
/root/go/pkg/mod/github.com/nbd-wtf/go-nostr@v0.51.12/nip19/nip19.go:9:2: missing go.sum entry for module providing package github.com/btcsuite/btcd/btcutil/bech32 (imported by github.com/nbd-wtf/go-nostr/nip19); to add:
	go get github.com/nbd-wtf/go-nostr/nip19@v0.51.12
make: *** [Makefile:7: go-battery] Error 1

@Amperstrand

Copy link
Copy Markdown
Collaborator Author

Evidence review — verified, with the fence red attributed

Verified at head: both touched graphs build clean (token-recovery + src). The deps-sync fence red at head is main's standing 8-class drift, not this PR — proven by running the fence on plain origin/main (same DEPENDENCY DRIFT banner; that's #1034's open work). No gonuts pins touched, so the one-pin protocol is unaffected (correctly stated). The otel fix is the quiet win: the stranded v1.30 otlptracegrpc inside a v1.47 family was a latent bug independent of the advisory (otel requires family lockstep) — the bump fixes both at once, and one grpc bump clears three advisories. Mechanically ready; human gate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant