Skip to content

deps: clear x/text DoS advisory and unstale the vm-compat Go pin - #478

Merged
palango merged 2 commits into
philippe/audit-a-go-1.26.4-bumpfrom
palango/audit-a-fixups
Jul 31, 2026
Merged

deps: clear x/text DoS advisory and unstale the vm-compat Go pin#478
palango merged 2 commits into
philippe/audit-a-go-1.26.4-bumpfrom
palango/audit-a-fixups

Conversation

@palango

@palango palango commented Jul 30, 2026

Copy link
Copy Markdown

Two follow-ups for #476, based directly on its head so it fast-forwards.

1. golang.org/x/text v0.36.0 → v0.40.0

The toolchain bump landed x/text on v0.36.0, which is affected by GO-2026-5970: norm.Iter enters an infinite loop on invalid UTF-8. govulncheck reports it as symbol-reachable (norm.Form.Properties) in the op-node and op-batcher binaries — the same unbounded-loop DoS class Issue A set out to remove, so it seemed wrong to leave it behind in the PR that closes the others.

Fixed in v0.39.0; this takes the latest v0.40.0. MVS pulls the sibling golang.org/x/* modules up with it, which also moves x/net v0.53.0 → v0.56.0 and so clears GO-2026-5026 (idna.ToASCII, likewise symbol-reachable).

Go itself is left at 1.26.4. Bumping to 1.26.5 (upstream develop is already there) would additionally clear GO-2026-5856, but that is a bigger change than this PR wants to carry — worth doing separately.

2. vm-compat Go pin

op-program/Dockerfile.vmcompat and the two op-program/justfile recipes still pinned golang:1.24.10-alpine3.21 while the root go.mod now requires go >= 1.26. That image sets GOTOOLCHAIN=local, so its go mod download fails — the identical breakage already fixed for Dockerfile.repro in d95c361. Upstream deleted op-program from the monorepo, so its toolchain bump never had to touch these.

Not a CI break: analyze-op-program-client and op-program-compat are commented out on this fork. It only affects just run-vm-compat / just regenerate-vm-compat-baseline locally. The commented-out "next" build stays on 1.25.4 — its TODO(#18334) is about vm-compat's own go1.25 support, not the toolchain.

Verified

Run against this branch with Go 1.26.4:

go build ./...                                              exit 0, no output
go vet (op-node, op-batcher, op-service, op-chain-ops,
        op-proposer, op-challenger)                         exit 0, no output
go mod tidy -diff                                           exit 0, empty
go test -short ./op-service/... ./op-node/rollup/derive/...  exit 0, 0 failures
govulncheck -mode=binary (op-node)                          11 -> 9 reachable

Tests cover the packages that actually touch the bumped modules: op-service/client (the RPC dialer on the L1 path), op-service/sources, op-service/txmgr, and op-node/rollup/derive (Espresso batch authentication).

After the change, GO-2026-5970 no longer appears, and neither do GO-2026-4870 / 4918 / 5037. The nine that remain are pre-existing and outside Issue A: quic-go x3, webtransport-go x3, pion/dtls (no fix available), otel baggage, and GO-2026-5856 (needs Go 1.26.5).

Note on the fix narrative in #476

Minor correction for the record: in the pre-bump scan, x/net's GO-2026-4918 entry has zero vulnerable symbols — module-level only. The symbols actually found are in stdlib net/http, which vendors its own http2 as net/http/internal/http2, and nothing in the repo imports golang.org/x/net/http2 directly. So the toolchain bump is what closes the live HTTP/2 path; the x/net bump is defence-in-depth. Worth knowing so nobody later concludes that keeping x/net current is sufficient on its own.

palango added 2 commits July 30, 2026 14:36
x/text v0.36.0, which the toolchain bump landed on, is affected by
GO-2026-5970: norm.Iter enters an infinite loop on invalid UTF-8.
govulncheck reports it as symbol-reachable (norm.Form.Properties) in the
op-node and op-batcher binaries, so it is the same unbounded-loop DoS
class this branch set out to remove.

Fixed in v0.39.0; this takes the latest v0.40.0. MVS pulls the sibling
golang.org/x/* modules up with it, which also moves x/net past
GO-2026-5026 (idna.ToASCII, likewise symbol-reachable).
The vm-compat builder was still on golang:1.24.10-alpine3.21 while the
root go.mod now requires go >= 1.26. That image sets GOTOOLCHAIN=local,
so its 'go mod download' fails — the same breakage already fixed for
Dockerfile.repro. Upstream deleted op-program from the monorepo, so its
toolchain bump never covered these pins.

The commented-out "next" build stays on 1.25.4 with its TODO(ethereum-optimism#18334),
since that line is about vm-compat's own go1.25 support.
@palango
palango requested a review from philippecamacho July 30, 2026 13:05

@philippecamacho philippecamacho left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks for catching these version mismatches.

@palango
palango merged commit 6e0f651 into celo-rebase-18 Jul 31, 2026
38 checks passed
@palango
palango deleted the palango/audit-a-fixups branch July 31, 2026 08:25
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.

2 participants