Go toolchain: v1.12.x archive to v1.13.0
This document records which Go toolchain built each published v1.12.x release, the Go standard
library advisories those binaries carry, what v1.13.0 ships instead, and why an operator on the
older line should move. It is a companion to 2026-08-dependency-modernization.md, which covers the
toolchain and module changes in the source, and to 2026-09-release-pipeline.md, which measures the
same published archives for platform floors and provenance. 2026-03-security-audit.md and
2026-08-security-followup.md cover the CVE remediation in the client’s own code.
Baseline: the four releases v1.12.20 through v1.12.23, published from etclabscore/core-geth,
measured by downloading every archive and reading the build information recorded in each binary
rather than the configuration that built it. The Linux x86_64 archive of each earlier stable
v1.12.x release was measured the same way.
Agentic auditing methods and tooling: the strongest available Claude models at each stage of the work, February through September 2026
Work carried out by: White B0x
Work funded by: Ethereum Classic DAO
Last edited: October 12, 2026
In short
Upgrade to the latest v1.13 release. Each
release from v1.12.20 to v1.12.23 was built by two Go toolchains, Go 1.21 and Go 1.22, both out of support
before those releases shipped. Across all its archives each of those releases carries 75 Go standard library
advisories, 59 of them with the vulnerable code present in the binary; per archive the figure runs from 67 to
73, with 54 to 58 in the binary. Because both Go majors left support in 2024 and 2025, that count only rises as
the Go team publishes more advisories, and none of the fixes will ever reach those binaries. The v1.13 line is
built on Go 1.26, which is in support and receives those fixes: v1.13.0 shipped on go1.26.8 and carried none
when it was released, and v1.13.1 is built on go1.26.9, which carries the October 2026 Go security releases.
The upgrade from go1.21.13 to go1.26.9 clears 105 Go standard library and toolchain advisories recorded in the
Go vulnerability database. The v1.13.0 release has about six months of testing on Ethereum Classic
mainnet and Mordor behind it and a month in production since release, with no critical issue found.
Why the toolchain needed a pass of its own
The Go standard library is compiled into every binary, crypto/tls and net/http included. A Go
security release therefore reaches an operator only through a client release built with it, and a
binary keeps its toolchain’s advisories for as long as it runs.
The build configuration names a Go version, and the binary records the one that actually built it.
go version -m reads that record from a downloaded file without running it. Read from the
go-version setting in the release workflow, the v1.12.x releases were built with Go 1.21. Their
binaries record two toolchains, and the difference decides which advisories each archive carries.
Finding: each release from v1.12.20 to v1.12.23 was built by two toolchains
Every archive of v1.12.20 to v1.12.23 and of v1.13.0, read from the binaries:
| Release | Published | linux |
osx |
osx-arm64 |
win64 |
arm, arm5, arm6, arm7, arm64 |
|---|---|---|---|---|---|---|
v1.12.20 |
2024-06-10 | go1.21.10 | go1.21.10 | not published | go1.22.1 | go1.22.1 |
v1.12.21 |
2026-03-18 | go1.21.13 | go1.21.13 | not published | go1.21.13 | go1.22.1 |
v1.12.22 |
2026-03-28 | go1.21.13 | go1.21.13 | not published | go1.21.13 | go1.22.1 |
v1.12.23 |
2026-08-14 | go1.21.13 | go1.21.13 | not published | go1.21.13 | go1.22.1 |
v1.13.0 |
2026-09-14 | go1.26.8 | go1.26.8 | go1.26.8 | go1.26.8 | go1.26.8 |
21 of the 32 v1.12.x archives were built with go1.22.1, every Arm archive among them. The
other 11 were built with Go 1.21. In these four releases the osx archive is an Apple Silicon build,
which release artifacts
covers; v1.13.0 publishes the two architectures under separate names.
The split follows two build paths in the release configuration, and the pins were the same at all
four release commits. The release workflow installed Go with go-version: '1.21' and built the Linux
x86_64, macOS and, from v1.12.21, Windows archives with it. The Arm archives were built with
build/ci.go install -dlgo, which downloads the Go version pinned in build/checksums.txt: 1.22.1.
The v1.12.20 Windows archive came from AppVeyor, which also used -dlgo.
Every v1.13.0 node archive, and geth in the two core-geth-docker image tarballs attached to the
release, was built with go1.26.8.
Both older majors are out of support. Go’s release policy: “Each major Go release is supported until there are two newer major releases.”
| Go major | First release | Support ended | Archives built with it, v1.12.20 to v1.13.0 |
|---|---|---|---|
| Go 1.21 | 2023-08-08 | 2024-08-13, when go1.23.0 was released | 11 |
| Go 1.22 | 2024-02-06 | 2025-02-11, when go1.24.0 was released | 21 |
| Go 1.26 | 2026-02-10 | Supported until go1.28.0 is released | 9 |
The 2026 releases shipped after both majors had left support. The toolchains on each release date:
| Release | Archives | Go | Major supported that day | Newest patch of that major that day | Security releases of that major the archives lacked that day |
|---|---|---|---|---|---|
v1.12.20 (2024-06-10) |
linux, osx |
go1.21.10 | yes | go1.21.11 | 1 (go1.21.11) |
v1.12.20 (2024-06-10) |
win64, Arm archives |
go1.22.1 | yes | go1.22.4 | 3 (go1.22.2, go1.22.3, go1.22.4) |
v1.12.21 (2026-03-18) |
linux, osx, win64 |
go1.21.13 | no | go1.21.13 | 0 |
v1.12.21 (2026-03-18) |
Arm archives | go1.22.1 | no | go1.22.12 | 7 |
v1.12.22 (2026-03-28) |
linux, osx, win64 |
go1.21.13 | no | go1.21.13 | 0 |
v1.12.22 (2026-03-28) |
Arm archives | go1.22.1 | no | go1.22.12 | 7 |
v1.12.23 (2026-08-14) |
linux, osx, win64 |
go1.21.13 | no | go1.21.13 | 0 |
v1.12.23 (2026-08-14) |
Arm archives | go1.22.1 | no | go1.22.12 | 7 |
v1.13.0 (2026-09-14) |
all archives | go1.26.8 | yes | go1.26.8 | 0 |
Their Go 1.21 archives carry go1.21.13, the last Go 1.21 release, so nothing newer exists on that
branch: every fix published after August 2024 shipped only in newer Go majors. Their Arm archives
carry go1.22.1, which was missing seven later security releases on its own branch, and Go 1.22 had no
release after February 2025. v1.12.20, published while both majors were still supported, already
shipped behind the newest patch of each.
The earlier releases are on unsupported majors as well. The Linux x86_64 archive of every stable
release from v1.12.0 to v1.12.19 was measured too. Across those and the 32 above, the 50
v1.12.x archives measured were built with eight Go majors, from Go 1.13 to Go 1.22, and none of
them is supported today. Two of those releases shipped on a major that had already left support:
v1.12.2 (go1.13.4) and v1.12.10 (go1.18.10).
Finding: the v1.12.20 to v1.12.23 binaries carry Go standard library advisories
The Go vulnerability database lists 75 standard library advisories that apply to at least one
archive of v1.12.20 to v1.12.23, read with govulncheck against the database snapshot recorded
under Verification. That figure was 62 when this audit first measured it against the
September 15, 2026 database; the October 2026 Go security batch, published October 8, 2026, added 13 more. The
binaries have not changed, so the rise is new advisories reaching an unchanged, out-of-support
toolchain, and it continues. Two levels matter:
- Module level: the toolchain version is in the advisory’s affected range, for the archive’s operating system and architecture.
- Symbol level: a function the advisory lists as vulnerable is present in the binary.
Presence is not proof of reachability. Whether the client can reach the vulnerable code was not assessed for any advisory on this page.
| Release (published) | Go | Module level | …already published that day | Symbol level | …already published that day |
|---|---|---|---|---|---|
v1.12.20 (2024-06-10) |
go1.21.10, go1.22.1 | 75 | 4 | 59 | 3 |
v1.12.21 (2026-03-18) |
go1.21.13, go1.22.1 | 75 | 36 | 59 | 29 |
v1.12.22 (2026-03-28) |
go1.21.13, go1.22.1 | 75 | 36 | 59 | 29 |
v1.12.23 (2026-08-14) |
go1.21.13, go1.22.1 | 75 | 62 | 59 | 48 |
v1.13.0 (2026-09-14) |
go1.26.8 | 0 at release, 12 now | - | 0 at release, 9 now | - |
v1.13.1 |
go1.26.9 | 0 | - | 0 | - |
Counts are distinct advisories across all archives of a release, read against the current database
recorded under Verification. “Already published that day” counts those whose
database entry was published on or before the release date. 62 of the 75 had been published when
v1.12.23 shipped; the other 13 are the October 2026 Go batch, published October 8, 2026. The v1.12.20
count is lower in that column only because most were published after it, and its binaries carry all
75 regardless.
The two v1.13 rows read differently, and the difference is the point. v1.13.0 was built with
go1.26.8 and carried none of these when it was released, measured against the database as it stood the
day after. The same October batch that added 13 advisories to the v1.12.x binaries also reaches
go1.26.8 at module level, because its fix is in go1.26.9, so a scan today reports 12 against the
published v1.13.0, 9 of them with the code in the binary. The v1.12.x binaries will never receive
those fixes, because Go 1.21 and Go 1.22 are out of support. v1.13.1 is built with go1.26.9, which
carries them, and reports none. A supported toolchain takes each Go security release on its next build,
and Core-Geth’s weekly govulncheck workflow is what surfaces the gap in between. This
is the supported-Go path working as intended, not a defect in v1.13.
Per archive, in v1.12.23:
v1.12.23 archive |
Go | Module level | Symbol level |
|---|---|---|---|
linux |
go1.21.13 | 68 | 54 |
osx |
go1.21.13 | 67 | 54 |
win64 |
go1.21.13 | 69 | 55 |
arm, arm5, arm6, arm7, arm64 |
go1.22.1 | 73 | 58 |
The linux figures were re-measured against the current database. The osx, win64 and arm
figures add the October 2026 advisories to the per-archive counts this audit measured against the
September 15, 2026 database: 12 that apply to every archive by toolchain version, 11 of them with the
vulnerable code in the binary, and one more at module level on win64 only (GO-2026-6604,
os.Root.Mkdir following junctions out of the root on Windows, whose symbol cannot be present in a
go1.21.13 binary because os.Root postdates Go 1.24). The toolchains and the symbol surface of these
packages are the same source across architectures, so the additions do not depend on re-reading each
binary; see Verification.
From v1.12.21 on, the go1.22.1 archives carry five advisories the Go 1.21 archives of the same
release do not. Two were never in a Go 1.21 archive, and go1.21.13 includes the fixes for the other
three, which go1.22.1 predates:
| GO ID | Summary (verbatim) | First fixed in | Only in the go1.22.1 archives of |
|---|---|---|---|
| GO-2024-2687 | HTTP/2 CONTINUATION flood in net/http | go1.22.2 | v1.12.20 to v1.12.23 |
| GO-2024-2824 | Malformed DNS message can cause infinite loop in net | go1.22.3 | v1.12.20 to v1.12.23 |
| GO-2024-2887 | Unexpected behavior from Is methods for IPv4-mapped IPv6 addresses in net/netip | go1.21.11, go1.22.4 | v1.12.21 to v1.12.23 |
| GO-2024-2888 | Mishandling of corrupt central directory record in archive/zip | go1.21.11, go1.22.4 | v1.12.21 to v1.12.23 |
| GO-2024-2963 | Denial of service due to improper 100-continue handling in net/http | go1.21.12, go1.22.5 | v1.12.21 to v1.12.23 |
Three depend on the operating system: GO-2025-3750 and GO-2026-6604 apply only to Windows, and GO-2026-4864 only to Linux.
What these advisories are, and which packages a node exposes
The Go vulnerability database assigns no severity to these entries, and this page adds none of its own. A count on its own invites the reply that the advisories are a scanner artifact with no bearing on a node, so this section says what they are and where they sit. Every one is a fix the Go team shipped in a numbered security release, and the CVEs carry CVSS scores in the National Vulnerability Database.
The largest groups are in the standard-library packages this client serves to the network. Of the
68 on the Linux archive: 16 are in net/http (counting net/http/internal and the x/net/idna entry
it pulls in), 8 in crypto/x509, 7 in crypto/tls, 4 in net/url, 3 in net/textproto, 2 in net
and 2 in encoding/asn1. This client runs net/http servers for its JSON-RPC, WebSocket, GraphQL,
metrics and pprof endpoints (node/endpoints.go, node/rpcstack.go), uses crypto/tls and
crypto/x509 with encoding/asn1 and encoding/pem for TLS and certificate handling, and resolves
its DNS-based peer-discovery lists through net. Many are denial-of-service class and reachable
without authentication: the HTTP/2 CONTINUATION flood (GO-2024-2687), request smuggling through
invalid chunked data (GO-2025-3563), cookie-parsing memory exhaustion (GO-2025-4012), the HTTP/2
SETTINGS_MAX_FRAME_SIZE infinite loop (GO-2026-4918), the unauthenticated TLS 1.3 KeyUpdate
connection-retention DoS (GO-2026-4870), a crash on a long DNS CNAME response (GO-2026-4981), and the
October 2026 HTTP/2 batch (flow-control, Trailer and HPACK-race defects in the server).
The rest are in the standard library but concern inputs a node does not take from untrusted peers in
normal operation, and are listed for completeness rather than as node exposures: html/template
(HTML template injection and cross-site scripting, where this client serves JSON rather than rendering
templates), go/parser, go/build/constraint and encoding/gob (stack exhaustion parsing sources a
node does not accept over the network), and archive/tar, archive/zip, net/mail and mime.
Reachability of a specific crafted input was not tested for any advisory here, which
Verification records among what was not measured. The grouping above is by the package
a node links and exposes, not a proof of exploitability. Two things do not depend on it. The fixes exist, and the v1.12.x toolchains will
never receive them, because Go 1.21 and Go 1.22 left support in 2024 and 2025. The total was 62 a month
ago and is 75 now, and it only grows.
All 75 standard library advisories
First fixed in is the first Go release carrying the fix after the shipped patch. A version on the shipped major’s own branch means a patch release of that major fixed it; two versions mean Go 1.21 and Go 1.22 each had one; a newer major means neither did. Highest level is the highest found in any archive, where package means the affected package is compiled in but none of its listed vulnerable functions was found.
| # | GO ID | CVE | Package | Summary (verbatim) | Published | First fixed in | Highest level | Symbol level in |
|---|---|---|---|---|---|---|---|---|
| 1 | GO-2024-2687 | CVE-2023-45288 | net/http |
HTTP/2 CONTINUATION flood in net/http | 2024-04-03 | go1.22.2 | symbol | v1.12.20: win64 and Arm archives; v1.12.21 to v1.12.23: Arm archives |
| 2 | GO-2024-2824 | CVE-2024-24788 | net |
Malformed DNS message can cause infinite loop in net | 2024-05-07 | go1.22.3 | symbol | v1.12.20: win64 and Arm archives; v1.12.21 to v1.12.23: Arm archives |
| 3 | GO-2024-2887 | CVE-2024-24790 | net/netip |
Unexpected behavior from Is methods for IPv4-mapped IPv6 addresses in net/netip | 2024-06-04 | go1.21.11, go1.22.4 | symbol | v1.12.20: all archives; v1.12.21 to v1.12.23: Arm archives |
| 4 | GO-2024-2888 | CVE-2024-24789 | archive/zip |
Mishandling of corrupt central directory record in archive/zip | 2024-06-04 | go1.21.11, go1.22.4 | module | none |
| 5 | GO-2024-2963 | CVE-2024-24791 | net/http |
Denial of service due to improper 100-continue handling in net/http | 2024-07-02 | go1.21.12, go1.22.5 | symbol | v1.12.20: all archives; v1.12.21 to v1.12.23: Arm archives |
| 6 | GO-2024-3105 | CVE-2024-34155 | go/parser |
Stack exhaustion in all Parse functions in go/parser | 2024-09-06 | go1.22.7 | symbol | v1.12.20 to v1.12.23: all archives |
| 7 | GO-2024-3106 | CVE-2024-34156 | encoding/gob |
Stack exhaustion in Decoder.Decode in encoding/gob | 2024-09-06 | go1.22.7 | symbol | v1.12.20 to v1.12.23: all archives |
| 8 | GO-2024-3107 | CVE-2024-34158 | go/build/constraint |
Stack exhaustion in Parse in go/build/constraint | 2024-09-06 | go1.22.7 | symbol | v1.12.20 to v1.12.23: all archives |
| 9 | GO-2025-3373 | CVE-2024-45341 | crypto/x509 |
Usage of IPv6 zone IDs can bypass URI name constraints in crypto/x509 | 2025-01-28 | go1.22.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 10 | GO-2025-3420 | CVE-2024-45336 | net/http |
Sensitive headers incorrectly sent after cross-domain redirect in net/http | 2025-01-28 | go1.22.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 11 | GO-2025-3503 | CVE-2025-22870 | net/http |
HTTP Proxy bypass using IPv6 Zone IDs in golang.org/x/net | 2025-03-12 | go1.23.7 | symbol | v1.12.20 to v1.12.23: all archives |
| 12 | GO-2025-3563 | CVE-2025-22871 | net/http/internal |
Request smuggling due to acceptance of invalid chunked data in net/http | 2025-04-08 | go1.23.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 13 | GO-2025-3751 | CVE-2025-4673 | net/http |
Sensitive headers not cleared on cross-origin redirect in net/http | 2025-06-11 | go1.23.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 14 | GO-2025-3750 | CVE-2025-0913 | os (Windows only), syscall (Windows only) |
Inconsistent handling of O_CREATE|O_EXCL on Unix and Windows in os in syscall | 2025-06-11 | go1.23.10 | symbol | v1.12.20 to v1.12.23: win64 |
| 15 | GO-2025-3849 | CVE-2025-47907 | database/sql |
Incorrect results returned from Rows.Scan in database/sql | 2025-08-07 | go1.23.12 | package | none |
| 16 | GO-2025-3956 | CVE-2025-47906 | os/exec |
Unexpected paths returned from LookPath in os/exec | 2025-09-18 | go1.23.12 | module | none |
| 17 | GO-2025-4006 | CVE-2025-61725 | net/mail |
Excessive CPU consumption in ParseAddress in net/mail | 2025-10-29 | go1.24.8 | module | none |
| 18 | GO-2025-4007 | CVE-2025-58187 | crypto/x509 |
Quadratic complexity when checking name constraints in crypto/x509 | 2025-10-29 | go1.24.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 19 | GO-2025-4008 | CVE-2025-58189 | crypto/tls |
ALPN negotiation error contains attacker controlled information in crypto/tls | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 20 | GO-2025-4009 | CVE-2025-61723 | encoding/pem |
Quadratic complexity when parsing some invalid inputs in encoding/pem | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 21 | GO-2025-4010 | CVE-2025-47912 | net/url |
Insufficient validation of bracketed IPv6 hostnames in net/url | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 22 | GO-2025-4011 | CVE-2025-58185 | encoding/asn1 |
Parsing DER payload can cause memory exhaustion in encoding/asn1 | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 23 | GO-2025-4012 | CVE-2025-58186 | net/http |
Lack of limit when parsing cookies can cause memory exhaustion in net/http | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 24 | GO-2025-4013 | CVE-2025-58188 | crypto/x509 |
Panic when validating certificates with DSA public keys in crypto/x509 | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 25 | GO-2025-4014 | CVE-2025-58183 | archive/tar |
Unbounded allocation when parsing GNU sparse map in archive/tar | 2025-10-29 | go1.24.8 | module | none |
| 26 | GO-2025-4015 | CVE-2025-61724 | net/textproto |
Excessive CPU consumption in Reader.ReadResponse in net/textproto | 2025-10-29 | go1.24.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 27 | GO-2025-4155 | CVE-2025-61729 | crypto/x509 |
Excessive resource consumption when printing error string for host certificate validation in crypto/x509 | 2025-12-02 | go1.24.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 28 | GO-2025-4175 | CVE-2025-61727 | crypto/x509 |
Improper application of excluded DNS name constraints when verifying wildcard names in crypto/x509 | 2025-12-02 | go1.24.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 29 | GO-2026-4340 | CVE-2025-61730 | crypto/tls |
Handshake messages may be processed at the incorrect encryption level in crypto/tls | 2026-01-28 | go1.24.12 | symbol | v1.12.20 to v1.12.23: all archives |
| 30 | GO-2026-4341 | CVE-2025-61726 | net/url |
Memory exhaustion in query parameter parsing in net/url | 2026-01-28 | go1.24.12 | symbol | v1.12.20 to v1.12.23: all archives |
| 31 | GO-2026-4342 | CVE-2025-61728 | archive/zip |
Excessive CPU consumption when building archive index in archive/zip | 2026-01-28 | go1.24.12 | module | none |
| 32 | GO-2026-4403 | CVE-2025-22873 | os |
Improper access to parent directory of root in os | 2026-02-04 | go1.23.9 | package | none |
| 33 | GO-2026-4337 | CVE-2025-68121 | crypto/tls |
Unexpected session resumption in crypto/tls | 2026-02-05 | go1.24.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 34 | GO-2026-4601 | CVE-2026-25679 | net/url |
Incorrect parsing of IPv6 host literals in net/url | 2026-03-06 | go1.25.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 35 | GO-2026-4602 | CVE-2026-27139 | os |
FileInfo can escape from a Root in os | 2026-03-06 | go1.25.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 36 | GO-2026-4603 | CVE-2026-27142 | html/template |
URLs in meta content attribute actions are not escaped in html/template | 2026-03-06 | go1.25.8 | symbol | v1.12.20 to v1.12.23: all archives |
| 37 | GO-2026-4864 | CVE-2026-32282 | internal/syscall/unix (Linux only) |
TOCTOU permits root escape on Linux via Root.Chmod in os in internal/syscall/unix | 2026-04-07 | go1.25.9 | package | none |
| 38 | GO-2026-4865 | CVE-2026-32289 | html/template |
JsBraceDepth Context Tracking Bugs (XSS) in html/template | 2026-04-07 | go1.25.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 39 | GO-2026-4869 | CVE-2026-32288 | archive/tar |
Unbounded allocation for old GNU sparse in archive/tar | 2026-04-07 | go1.25.9 | module | none |
| 40 | GO-2026-4870 | CVE-2026-32283 | crypto/tls |
Unauthenticated TLS 1.3 KeyUpdate record can cause persistent connection retention and DoS in crypto/tls | 2026-04-07 | go1.25.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 41 | GO-2026-4946 | CVE-2026-32281 | crypto/x509 |
Inefficient policy validation in crypto/x509 | 2026-04-07 | go1.25.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 42 | GO-2026-4947 | CVE-2026-32280 | crypto/x509 |
Unexpected work during chain building in crypto/x509 | 2026-04-07 | go1.25.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 43 | GO-2026-4918 | CVE-2026-33814 | net/http |
Infinite loop in HTTP/2 transport when given bad SETTINGS_MAX_FRAME_SIZE in net/http/internal/http2 in golang.org/x/net | 2026-05-07 | go1.25.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 44 | GO-2026-4971 | CVE-2026-39836 | net |
Panic in Dial and LookupPort when handling NUL byte on Windows in net | 2026-05-07 | go1.25.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 45 | GO-2026-4976 | CVE-2026-39825 | net/http/httputil |
ReverseProxy forwards queries with more than urlmaxqueryparams parameters in net/http/httputil | 2026-05-07 | go1.25.10 | module | none |
| 46 | GO-2026-4977 | CVE-2026-42499 | net/mail |
Quadratic string concatenation in consumePhrase in net/mail | 2026-05-07 | go1.25.10 | module | none |
| 47 | GO-2026-4980 | CVE-2026-39826 | html/template |
Escaper bypass leads to XSS in html/template | 2026-05-07 | go1.25.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 48 | GO-2026-4981 | CVE-2026-33811 | net |
Crash when handling long CNAME response in net | 2026-05-07 | go1.25.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 49 | GO-2026-4982 | CVE-2026-39823 | html/template |
Bypass of meta content URL escaping causes XSS in html/template | 2026-05-07 | go1.25.10 | symbol | v1.12.20 to v1.12.23: all archives |
| 50 | GO-2026-4986 | CVE-2026-39820 | net/mail |
Quadratic string concatentation in consumeComment in net/mail | 2026-05-07 | go1.25.10 | module | none |
| 51 | GO-2026-5026 | CVE-2026-39821 | net/http, net/http/internal/http2 |
Invoking failure to reject ASCII-only Punycode-encoded labels in golang.org/x/net/idna | 2026-05-22 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 52 | GO-2026-5037 | CVE-2026-27145 | crypto/x509 |
Inefficient candidate hostname parsing in crypto/x509 | 2026-06-02 | go1.25.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 53 | GO-2026-5038 | CVE-2026-42504 | mime |
Quadratic complexity in WordDecoder.DecodeHeader in mime | 2026-06-02 | go1.25.11 | package | none |
| 54 | GO-2026-5039 | CVE-2026-42507 | net/textproto |
Arbitrary inputs are included in errors without any escaping in net/textproto | 2026-06-02 | go1.25.11 | symbol | v1.12.20 to v1.12.23: all archives |
| 55 | GO-2026-4970 | CVE-2026-39822 | os |
Root escape via symlink plus trailing slash in os | 2026-07-07 | go1.25.12 | package | none |
| 56 | GO-2026-5856 | CVE-2026-42505 | crypto/tls |
Invoking Encrypted Client Hello privacy leak in crypto/tls | 2026-07-07 | go1.25.12 | symbol | v1.12.20 to v1.12.23: all archives |
| 57 | GO-2026-5972 | CVE-2026-33818 | encoding/asn1 |
Enforce maximum recursion depth in encoding/asn1 | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 58 | GO-2026-6088 | CVE-2026-56859 | encoding/xml |
Add recursion depth guard during decode in encoding/xml | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 59 | GO-2026-6089 | CVE-2026-56853 | net/http |
Apply ReadHeaderTimeout when doing unencrypted HTTP/2 check in net/http | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 60 | GO-2026-6090 | CVE-2026-56862 | crypto/tls |
Limit handshake messages we are willing to accept post-handshake in crypto/tls | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 61 | GO-2026-6091 | CVE-2026-56858 | html/template |
Fix Javascript regexp context tracking in html/template | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 62 | GO-2026-6218 | CVE-2026-56860 | net/url |
Avoid quadratic complexity in resolvePath in net/url | 2026-08-13 | go1.25.13 | symbol | v1.12.20 to v1.12.23: all archives |
| 63 | GO-2026-6599 | CVE-2026-94448 | html/template |
Reset context tracking on consecutive template expressions in html/template | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 64 | GO-2026-6600 | CVE-2026-97030 | html/template |
Recognize yield as regexp preceder keyword in html/template | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 65 | GO-2026-6603 | CVE-2026-78659 | net/http |
HTTP/2 server memory exhaustion due to Trailer headers in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 66 | GO-2026-6604 | CVE-2026-56857 | os (Windows only) |
os.Root.Mkdir(All) following a junction out of the root on Windows | 2026-10-08 | go1.26.9 | module | none |
| 67 | GO-2026-6605 | CVE-2026-56866 | net/http |
HTTP/1 client connection desynchronization after CONNECT rejection in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 68 | GO-2026-6607 | CVE-2026-97031 | crypto/tls |
Reject malformed ECH outer extension references in crypto/tls | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 69 | GO-2026-6608 | CVE-2026-94440 | mime/multipart, net/textproto |
Memory limit bypass when parsing MIME headers in net/textproto, mime/multipart | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 70 | GO-2026-6609 | CVE-2026-78667 | net/http |
Lack of limit on size of parsed Range headers in net/http | 2026-10-08 | go1.26.9 | module | none |
| 71 | GO-2026-6610 | CVE-2026-78660 | net/http |
HTTP/2 transport accepts malformed framing-related headers in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 72 | GO-2026-6611 | CVE-2026-78669 | net/http |
Excessive CPU consumption from repeated initial window changes in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 73 | GO-2026-6612 | CVE-2026-78663 | net/http |
Double flow control refund on HTTP/2 server streams in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 74 | GO-2026-6613 | CVE-2026-94439 | net/http |
HTTP/1 server connection desynchronization after 2xx CONNECT response in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
| 75 | GO-2026-6617 | CVE-2026-97032 | net/http |
HTTP/2 server crash due to HPACK encoder race in net/http | 2026-10-08 | go1.26.9 | symbol | v1.12.20 to v1.12.23: all archives |
Finding: the v1.12.x source does not build on a supported Go
Rebuilding a v1.12.x release with a supported Go would take the standard library fixes if the
source built. It does not. At the v1.12.23 release commit, built with go1.26.6 using the build tags
and C flags recorded in the published v1.12.23 binary, the build stops at two independent
blockers, in this order.
blst v0.3.11 does not compile from Go 1.24. The release build sets the ckzg tag, as
make geth and make all do, and the KZG binding it enables imports blst. The build fails in
blst’s Go bindings with cannot define new methods on non-local type SecretKey, and the same error
for Fp12, P1Affine and P2Affine. From the Go 1.24 release notes:
The compiler already disallowed defining new methods with receiver types that were cgo-generated, but it was possible to circumvent that restriction via an alias type. Go 1.24 now always reports an error if a receiver denotes a cgo-generated type, whether directly or indirectly (through an alias type).
Upstream go-ethereum moved to blst v0.3.14, whose release carries a fix for Go 1.24, in
#31165, first released in go-ethereum v1.15.1.
fjl/memsize does not link from Go 1.23. Without the ckzg tag the build reaches the linker and
stops at link: github.com/fjl/memsize: invalid reference to runtime.stopTheWorld. memsize backs the
/memsize/ page of the pprof debug server and refers to runtime internals through //go:linkname.
From the Go 1.23 release notes:
The linker now disallows using a //go:linkname directive to refer to internal symbols in the standard library (including the runtime) that are not marked with //go:linkname on their definitions.
Upstream go-ethereum removed memsize ahead of Go 1.23, in #30253: “Removing because memsize will very likely be broken by Go 1.23”. That change was first released in go-ethereum v1.14.8.
Removing memsize alone does not produce a build. With the ckzg tag the release configuration
sets, the blst compile error comes first on any Go from 1.24. Leaving the tag out as well does
produce one, and operators have run v1.12.23 built that way on a current Go.
A toolchain swap alone also keeps Go 1.21’s defaults. The go 1.21 directive in go.mod keeps
Go 1.21’s compatibility settings when a newer Go builds the module. All 21 go1.22.1 archives record
them:
DefaultGODEBUG=httplaxcontentlength=1,httpmuxgo121=1,tls10server=1,tlsrsakex=1,tlsunsafeekm=1
On a Go from 1.24 on, the same directive switches off two denial-of-service fixes. Go added
httpcookiemaxnum, a limit on the cookies net/http parses, and urlmaxqueryparams, a limit on the
query parameters net/url parses, as the fixes for GO-2025-4012 and GO-2026-4341. Its compatibility
table gives a module declaring a Go older than 1.24 the value 0 for both, which, in the words of
Go’s GODEBUG history, accepts “an indefinite number of cookies” and
“disables the limit”. go1.26.6 and go1.27.1 carry the same entries. So a v1.12.23 rebuilt on a
current Go reports a Go version whose standard library carries those fixes, with both limits off.
Setting GODEBUG=httpcookiemaxnum=3000,urlmaxqueryparams=10000 at run time turns them back on.
The previous repository records both blockers. In etclabscore/core-geth:
- #680, an issue opened 2025-04-30, reports
that
v1.12.20does not compile with go1.24.0, and its build log shows theblstv0.3.11 errors above. It was closed on June 29, 2025 with the reply “Go 1.24 is not supported, please try Go 1.21”. - #683, a pull request titled “Support go 1.24
compiler” and opened June 30, 2025, changes
go.mod,internal/debug/flags.go, the workflows and the Dockerfiles. Its description says it fixes #680 and #665, an earlier pull request that removes memsize. It was closed without being merged on February 6, 2026. - #690, an issue opened 2025-11-10, reports the
AppVeyor build failing inside
blstv0.3.11’s header with'bool' cannot be defined via 'typedef', and #691, a pull request opened the same day, upgradesblstingo.modto address it. That failure comes from the C compiler rather than from Go: it is the C23 finding in release artifacts. - #701, a pull request opened 2026-09-15, removes
memsize and its debug endpoint, citing the link error above. On its own that change does not clear
the
blsterror.
v1.13.0 carries blst v0.3.17, no memsize, and go 1.26.0 in go.mod. Its binaries record no
DefaultGODEBUG override.
Finding: third-party module advisories were cleared alongside
The same scans cover the modules compiled into each binary. In v1.12.23, govulncheck matches 47
advisories against third-party modules at module level, 9 of them at symbol level. 44 are absent from
v1.13.0, 3 remain, and none is new. The main module, github.com/ethereum/go-ethereum, is not
counted here; the scanner section covers it.
| Module | v1.12.23 |
v1.13.0 |
Cleared | Cleared, symbol level in v1.12.23 |
Still matched in v1.13.0 |
|---|---|---|---|---|---|
github.com/consensys/gnark-crypto |
v0.12.1 | v0.21.0 | 1 | 1 | 0 |
github.com/golang-jwt/jwt/v4 |
v4.5.0 | v4.5.2 | 2 | 2 | 0 |
github.com/gorilla/websocket |
v1.5.0 | v1.5.3 | 1 | 1 | 0 |
github.com/tidwall/gjson |
v1.6.0 | v1.19.0 | 4 | 4 | 0 |
golang.org/x/crypto |
v0.17.0 | v0.55.0 | 19 | 0 | 3 |
golang.org/x/net |
v0.18.0 | v0.58.0 | 14 | 0 | 0 |
golang.org/x/sys |
v0.16.0 | v0.47.0 | 1 | 0 | 0 |
golang.org/x/text |
v0.14.0 | v0.41.0 | 1 | 1 | 0 |
google.golang.org/protobuf |
v1.31.0 | v1.33.0 | 1 | 0 | 0 |
| Total | 44 | 9 | 3 |
The three that remain are golang.org/x/crypto advisories, described in the scanner section. Four of
the 44 also cover the standard library and appear in the list of 75 above.
Dependency and toolchain modernization records the module
changes themselves.
All 44 cleared advisories
Symbol level refers to the module named in the row.
| # | GO ID | Aliases | Module | Summary (verbatim) | First fixed version | Published | Symbol level in v1.12.23 |
|---|---|---|---|---|---|---|---|
| 1 | GO-2025-4087 | GHSA-fj2x-735w-74vq | github.com/consensys/gnark-crypto |
Unchecked memory allocation during vector deserialization in github.com/consensys/gnark-crypto | 0.18.1 | 2025-11-05 | all archives |
| 2 | GO-2024-3250 | CVE-2024-51744, GHSA-29wx-vh33-7x7r | github.com/golang-jwt/jwt/v4 |
Improper error handling in ParseWithClaims and bad documentation may cause dangerous situations in github.com/golang-jwt/jwt | 4.5.1 | 2024-11-12 | all archives |
| 3 | GO-2025-3553 | CVE-2025-30204, GHSA-mh63-6h87-95cp | github.com/golang-jwt/jwt/v4 |
Excessive memory allocation during header parsing in github.com/golang-jwt/jwt | 4.5.2 | 2025-03-26 | all archives |
| 4 | GO-2026-6278 | GHSA-w67g-5rqw-f597 | github.com/gorilla/websocket |
Gorilla WebSocket Uses Cryptographically Weak PRNG for WebSocket Mask Key in github.com/gorilla/websocket | 1.5.3 | 2026-08-25 | all archives |
| 5 | GO-2021-0054 | CVE-2020-36067, GHSA-p64j-r5f4-pwwx | github.com/tidwall/gjson |
Panic due to improper input validation in ForEach in github.com/tidwall/gjson | 1.6.6 | 2021-04-14 | all archives |
| 6 | GO-2021-0059 | CVE-2020-35380, GHSA-w942-gw6m-p62c | github.com/tidwall/gjson |
Panic due to improper input validation in Get in github.com/tidwall/gjson | 1.6.4 | 2021-04-14 | all archives |
| 7 | GO-2021-0265 | CVE-2021-42248, CVE-2021-42836, GHSA-c9gm-7rfj-8w5h, GHSA-ppj4-34rq-v8j9 | github.com/tidwall/gjson |
Denial of service via maliciously crafted path in github.com/tidwall/gjson | 1.9.3 | 2022-08-15 | all archives |
| 8 | GO-2022-0957 | CVE-2020-36066, GHSA-wjm3-fq3r-5x46 | github.com/tidwall/gjson |
Denial of service via maliciously crafted JSON in github.com/tidwall/gjson | 1.6.5 | 2022-08-25 | all archives |
| 9 | GO-2024-3321 | CVE-2024-45337, GHSA-v778-237x-gjrc | golang.org/x/crypto |
Misuse of connection.serverAuthenticate may cause authorization bypass in golang.org/x/crypto | 0.31.0 | 2024-12-11 | no |
| 10 | GO-2025-3487 | CVE-2025-22869 | golang.org/x/crypto |
Potential denial of service in golang.org/x/crypto | 0.35.0 | 2025-02-26 | no |
| 11 | GO-2025-4116 | CVE-2025-47913 | golang.org/x/crypto |
Potential denial of service in golang.org/x/crypto/ssh/agent | 0.43.0 | 2025-11-13 | no |
| 12 | GO-2025-4134 | CVE-2025-58181, GHSA-j5w8-q4qc-rx2x | golang.org/x/crypto |
Unbounded memory consumption in golang.org/x/crypto/ssh | 0.45.0 | 2025-11-19 | no |
| 13 | GO-2025-4135 | CVE-2025-47914, GHSA-f6x5-jh6r-wrfv | golang.org/x/crypto |
Malformed constraint may cause denial of service in golang.org/x/crypto/ssh/agent | 0.45.0 | 2025-11-19 | no |
| 14 | GO-2026-5005 | CVE-2026-39833, GHSA-jppx-rxg9-jmrx | golang.org/x/crypto |
Invoking key constraints not enforced in golang.org/x/crypto/ssh/agent | 0.52.0 | 2026-05-22 | no |
| 15 | GO-2026-5006 | CVE-2026-39832, GHSA-f5wc-c3c7-36mc | golang.org/x/crypto |
Invoking agent constraints dropped when forwarding keys in golang.org/x/crypto/ssh/agent | 0.52.0 | 2026-05-22 | no |
| 16 | GO-2026-5013 | CVE-2026-46597 | golang.org/x/crypto |
Invoking byte arithmetic causes underflow and panic in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 17 | GO-2026-5014 | CVE-2026-39828 | golang.org/x/crypto |
Invoking bypass of certificate restrictions in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 18 | GO-2026-5015 | CVE-2026-39835 | golang.org/x/crypto |
Invoking server panic during CheckHostKey/Authenticate in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 19 | GO-2026-5016 | CVE-2026-39827 | golang.org/x/crypto |
Invoking memory leak when rejecting channels can lead to DoS in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 20 | GO-2026-5017 | CVE-2026-39830 | golang.org/x/crypto |
Invoking client can cause server deadlock on unexpected responses in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 21 | GO-2026-5018 | CVE-2026-39829 | golang.org/x/crypto |
Invoking pathological RSA/DSA parameters may cause DoS in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 22 | GO-2026-5019 | CVE-2026-39831 | golang.org/x/crypto |
Invoking bypass of FIDO/U2F security keys physical interaction in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 23 | GO-2026-5020 | CVE-2026-39834 | golang.org/x/crypto |
Invoking infinite loop on large channel writes in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 24 | GO-2026-5021 | CVE-2026-42508, GHSA-5cgq-3rg8-m6cv | golang.org/x/crypto |
Invoking auth bypass via unenforced @revoked status in golang.org/x/crypto/ssh/knownhosts | 0.52.0 | 2026-05-22 | no |
| 25 | GO-2026-5023 | CVE-2026-46595 | golang.org/x/crypto |
Invoking VerifiedPublicKeyCallback permissions skip enforcement in golang.org/x/crypto/ssh | 0.52.0 | 2026-05-22 | no |
| 26 | GO-2026-5033 | CVE-2026-46598 | golang.org/x/crypto |
Invoking pathological inputs can lead to client panic in golang.org/x/crypto/ssh/agent | 0.52.0 | 2026-05-22 | no |
| 27 | GO-2026-6303 | CVE-2026-56854 | golang.org/x/crypto |
Source-address critical option not enforced for non-public-key auth callbacks in golang.org/x/crypto/ssh | 0.55.0 | 2026-08-28 | no |
| 28 | GO-2024-2687 | CVE-2023-45288, GHSA-4v7x-pqxf-cx7m | golang.org/x/net |
HTTP/2 CONTINUATION flood in net/http | 0.23.0 | 2024-04-03 | no |
| 29 | GO-2024-3333 | CVE-2024-45338, GHSA-w32m-9786-jp63 | golang.org/x/net |
Non-linear parsing of case-insensitive content in golang.org/x/net/html | 0.33.0 | 2024-12-18 | no |
| 30 | GO-2025-3503 | CVE-2025-22870, GHSA-qxp5-gwg8-xv66 | golang.org/x/net |
HTTP Proxy bypass using IPv6 Zone IDs in golang.org/x/net | 0.36.0 | 2025-03-12 | no |
| 31 | GO-2025-3595 | CVE-2025-22872 | golang.org/x/net |
Incorrect Neutralization of Input During Web Page Generation in x/net in golang.org/x/net | 0.38.0 | 2025-04-16 | no |
| 32 | GO-2026-4440 | CVE-2025-47911 | golang.org/x/net |
Quadratic parsing complexity in golang.org/x/net/html | 0.45.0 | 2026-02-05 | no |
| 33 | GO-2026-4441 | CVE-2025-58190 | golang.org/x/net |
Infinite parsing loop in golang.org/x/net | 0.45.0 | 2026-02-05 | no |
| 34 | GO-2026-4918 | CVE-2026-33814 | golang.org/x/net |
Infinite loop in HTTP/2 transport when given bad SETTINGS_MAX_FRAME_SIZE in net/http/internal/http2 in golang.org/x/net | 0.53.0 | 2026-05-07 | no |
| 35 | GO-2026-5025 | CVE-2026-42506 | golang.org/x/net |
Invoking incorrect handling of namespaced elements in foreign content in golang.org/x/net/html | 0.55.0 | 2026-05-22 | no |
| 36 | GO-2026-5026 | CVE-2026-39821 | golang.org/x/net |
Invoking failure to reject ASCII-only Punycode-encoded labels in golang.org/x/net/idna | 0.55.0 | 2026-05-22 | no |
| 37 | GO-2026-5027 | CVE-2026-42502 | golang.org/x/net |
Invoking incorrect handling of HTML elements in foreign content in golang.org/x/net/html | 0.55.0 | 2026-05-22 | no |
| 38 | GO-2026-5028 | CVE-2026-25680 | golang.org/x/net |
Invoking denial of service when parsing arbitrary HTML in golang.org/x/net/html | 0.55.0 | 2026-05-22 | no |
| 39 | GO-2026-5029 | CVE-2026-25681 | golang.org/x/net |
Invoking incorrect handling of character references in DOCTYPE nodes in golang.org/x/net/html | 0.55.0 | 2026-05-22 | no |
| 40 | GO-2026-5030 | CVE-2026-27136 | golang.org/x/net |
Invoking duplicate attributes can cause XSS in golang.org/x/net/html | 0.55.0 | 2026-05-22 | no |
| 41 | GO-2026-5942 | CVE-2026-46600 | golang.org/x/net |
Parsing an invalid SVCB or HTTPS RR can panic in golang.org/x/net/dns/dnsmessage | 0.56.0 | 2026-07-14 | no |
| 42 | GO-2026-5024 | CVE-2026-39824 | golang.org/x/sys |
Invoking integer overflow in NewNTUnicodeString in golang.org/x/sys/windows | 0.44.0 | 2026-05-22 | no |
| 43 | GO-2026-5970 | CVE-2026-56852 | golang.org/x/text |
Infinite loop on invalid input in golang.org/x/text | 0.39.0 | 2026-07-14 | all archives |
| 44 | GO-2024-2611 | CVE-2024-24786, GHSA-8r3f-844c-mc37 | google.golang.org/protobuf |
Infinite loop in JSON unmarshaling in google.golang.org/protobuf | 1.33.0 | 2024-03-05 | no |
What a vulnerability scanner reports against v1.13.0
Standard library. No Go standard library advisory applied to any of the nine v1.13.0 archives,
or to geth in either core-geth-docker image tarball, even at module level, when they were measured
against the database as it stood on September 15, 2026: go1.26.8 was the newest Go 1.26 release that week and
nothing in the database reached it. The October 2026 batch changed that for the published go1.26.8
binary, as the finding above records: against the current database it matches 12 advisories at module
level, 9 with the code present, every one fixed in go1.26.9. v1.13.1 is built with go1.26.9 and
matches none. The difference between a supported toolchain and an out-of-support one is exactly this:
go1.26.8 receives the fix on the next build, and go1.21.13 and go1.22.1 never will. See
After v1.13.0 for the weekly scan that tracks it.
Three golang.org/x/crypto advisories, at module level only. v1.13.0 ships
golang.org/x/crypto v0.55.0, which is in the affected range of three advisories:
| GO ID | CVE | Packages | Summary (verbatim) | First fixed version | Published |
|---|---|---|---|---|---|
| GO-2026-5932 | none | golang.org/x/crypto/openpgp and 6 subpackages |
The golang.org/x/crypto/openpgp package is unmaintained, unsafe by design, and has known security issues | no fix | 2026-07-07 |
| GO-2026-6354 | CVE-2026-78662 | golang.org/x/crypto/ssh |
Prevent DoS on deadlocked undecided channel in golang.org/x/crypto/ssh | 0.56.0 | 2026-09-02 |
| GO-2026-6355 | CVE-2026-56855 | golang.org/x/crypto/ssh |
Prevent DoS on deadlocked established channel in golang.org/x/crypto/ssh | 0.56.0 | 2026-09-02 |
The affected packages are not compiled into any v1.13.0 binary. No golang.org/x/crypto/ssh or
golang.org/x/crypto/openpgp function name occurs in any of them, while other golang.org/x/crypto
functions do.
The two macOS archives show those three at symbol level. govulncheck reads no symbols from the
v1.13.0 osx and osx-arm64 binaries. When it reads none, it handles the binary as stripped and
reports every listed vulnerable symbol of every module-level match, so a scan of either archive lists
symbol-level golang.org/x/crypto/ssh and golang.org/x/crypto/openpgp findings for code the binary
does not contain. Their module-level results are unaffected. The same scanner read symbols from the
v1.12.x macOS archives. The v1.13.0 macOS binaries were linked with -s, which removes the symbols it
looks for; After v1.13.0 gives the detail and the change.
Six go-ethereum advisories, all fixed in v1.13.0. Every v1.13.0 archive matches six
advisories filed against go-ethereum, at symbol level, and the match is structural. The Go module
path is deliberately github.com/ethereum/go-ethereum, which is what makes this client a drop-in
downstream. The scanner compares this client’s version with go-ethereum’s version ranges, and
v1.13.0 sorts below the go-ethereum releases that fixed these, so each one matches whether or not
its fix is present. Matching on symbol names does not settle it either, because a backported fix adds
its guard inside the same function.
Release artifacts
describes how to read such a scan. Each match was confirmed by reading the guard at the v1.13.0
tag:
| GO ID | CVE | Upstream fix govulncheck names | Issue | Guard in v1.13.0 |
|---|---|---|---|---|
| GO-2024-2819 | CVE-2024-32972 | v1.13.15 | A header request could pull unbounded data from disk | ReadHeaderRange in core/rawdb/accessors_chain.go returns on a zero count and caps the freezer read at 2 MB |
| GO-2026-4314 | CVE-2026-22868 | v1.16.8 | KZG proof verification denial of service | core/txpool/validation.go returns ErrKZGVerificationError, and eth/fetcher/tx_fetcher.go disconnects the peer that sent it |
| GO-2026-4315 | CVE-2026-22862 | v1.16.8 | ECIES ciphertext length undercheck | Decrypt in crypto/ecies/ecies.go rejects a ciphertext too short to hold its public key, MAC and one cipher block, before symDecrypt reads it |
| GO-2026-4507 | CVE-2026-26314 | v1.16.9 | secp256k1 coordinates outside the field | IsOnCurve in crypto/secp256k1/curve.go, the return-value checks in secp256k1_ext_scalar_mul in crypto/secp256k1/ext.h, and the non-cgo check in crypto/signature_nocgo.go |
| GO-2026-4508 | CVE-2026-26313 | v1.17.0 | p2p message memory exhaustion | Messages are held as rlp.RawList until validated (eth/protocols/eth/protocol.go, eth/protocols/snap/protocol.go), and responses are checked against their pending request by tracker.Fulfil in both protocols’ handlers |
| GO-2026-4511 | CVE-2026-26315 | v1.16.9 | ECIES public key validation in the RLPx handshake | GenerateShared in crypto/ecies/ecies.go rejects nil or off-curve public keys |
What this means if you are upgrading
- Rebuilding a
v1.12.xrelease on a newer Go takes the standard library fixes, but not all of what upgrading does. The build needs memsize removed and the KZG build tag left out. It still declaresgo 1.21, so two denial-of-service limits stay off unlessGODEBUGsets them, and it keeps the third-party module advisories and everything elsev1.12.23carries.v1.13.0declaresgo 1.26.0and is built with go1.26.8. - Arm builds of
v1.12.xcarry the most. Every Arm archive fromv1.12.20tov1.12.23carries 73 standard library advisories at module level, against the current database. - Go 1.26 is supported until go1.28.0 is released, under the policy above, and go1.26.9 is the
current Go 1.26 security release. A Go security release reaches your node only through a Core-Geth
release built with it, so follow the
ethereumclassic/core-gethrelease line and run the latest.
Verification
Each check below was calibrated so that it could report a negative:
-
The published files. 59 node archives were downloaded: every archive of
v1.12.20tov1.12.23andv1.13.0, and the Linux x86_64 archive of each earlier stablev1.12.xrelease. Each matched its published.sha256, and the 33 from 2026 releases also matched GitHub’s server-side digest, which the older release assets do not carry. Bothv1.13.0core-geth-dockerimage tarballs matched as well. -
The source they came from. Each binary’s recorded
vcs.revisionequals the commit its release tag points to. -
The toolchain. Read from each binary’s build information with
go version -m. No downloaded binary was executed. -
The advisories. The baseline figures of 62 at module level and 48 at symbol level were read with govulncheck v1.7.0 in binary mode, at symbol level and at module level, on all 41 binaries of
v1.12.20tov1.13.0, against one snapshot of the Go vulnerability database for every scan:vuln.go.devas modified 2026-09-15T18:39:25Z, 4,445 entries, SHA-256fe51e51645e6b1e946731cef048339972256c6417de91d4cf3985fc87b4aa89b. -
The October 2026 refresh. The current figures of 75 at module level and 59 at symbol level were read with govulncheck v1.8.0 against
vuln.go.devas modified 2026-10-08T22:31:09Z, 4,613 entries, the October Go security batch included. The Linux x86_64 binary ofv1.12.23was re-scanned directly and reports 68 at module level and 54 at symbol level, up from 56 and 43. The 13 added advisories apply to the other archives by toolchain version and operating system: 12 to every archive at module level, 11 of those with the code in the binary, and GO-2026-6604 at module level onwin64only. Those additions were applied to the per-archive counts the baseline measured, rather than by re-downloading each archive; the toolchains are unchanged and the symbol surface of these packages is the same source across architectures. A go1.26.9 binary, the toolchain ofv1.13.1, reports no standard library advisory against the same database. -
Calibration in both directions. Against the current database every
v1.12.20tov1.12.23archive reports 67 to 73 standard library advisories at module level, and the Linux x86_64 binary 68. A Go binary built with go1.26.6, the last Go 1.26 release before the October batch, reports 12, every one fixed in go1.26.9; one built with go1.26.9 reports none. Against the baseline September 15, 2026 database that same go1.26.6 binary reported none, and a binary built with go1.26.1 reported 28, fixed in go1.26.2 to go1.26.6. -
An independent re-derivation. Each advisory’s version ranges were evaluated directly against each binary’s Go version and module versions, excluding withdrawn entries and applying the same operating system and architecture filter as govulncheck. The result matched govulncheck’s for all 41 binaries, including the first fixed Go version of every standard library match.
-
Whether the scanner read symbols. govulncheck read between 49,101 and 53,753 symbols from 39 of the 41 binaries, and none from the two
v1.13.0macOS binaries described above. The absence ofgolang.org/x/crypto/sshandgolang.org/x/crypto/openpgpfunction names was checked in all 41, against othergolang.org/x/cryptonames present in every one. -
Release-date counts. “Already published that day” uses each advisory’s published date. Counting instead by the release date of the first Go version that fixes it gives the same figure for every archive of every release.
-
The failed build. At the
v1.12.23release commit, with go1.26.6 and modules verified against itsgo.sum, this command exits 1 with theblstcompile error, and the same command without theckzgtag exits 1 at the link step with the memsize error:GOTOOLCHAIN=local CGO_CFLAGS="-O2 -g -D__BLST_PORTABLE__" go build -p 4 -tags urfave_cli_no_docs,ckzg ./cmd/geth
Not measured:
- The
core-geth-alltoolsarchives and image tarballs, so the go1.26.8 result forv1.13.0is established forgethonly. - Container images published to a registry, for any release, including
v1.12.ximages built fromgolang:1.22-alpine. - Archives of
v1.12.0tov1.12.19other than Linux x86_64, and govulncheck on any of them. - Prereleases and drafts.
- Builds on Go 1.23, 1.24, 1.25 or 1.27. The Go release each blocker arrived in comes from Go’s release notes and source, not from building on it.
- Reachability of any advisory from the client’s code paths.
- go-ethereum advisories against the
v1.12.xbinaries. Those record the main module’s version as(devel), which govulncheck never matches, so their absence is not evidence either way. - Why the release workflow’s
go-version: '1.21'produced go1.21.10 on June 10, 2024, when go1.21.11 had been released on June 4, 2024, and how thev1.12.2Linux archive came to be built with go1.13.4. - Issues and pull requests in
etclabscore/core-gethbeyond those listed above, which were found by search and screened by title.
After v1.13.0
Each of these is resolved on main for the next release. None changes what v1.13.0 ships or how it
behaves.
- The toolchain and dependencies for
v1.13.1.v1.13.1moves the build to go1.26.9, which carries the October 2026 Go security batch above, andgolang.org/x/netto v0.60.0, which carries the same HTTP/2 fixes on thex/netside. Thex/netbump resolvesgolang.org/x/cryptoto v0.57.0,golang.org/x/textto v0.42.0,golang.org/x/systo v0.48.0,golang.org/x/modto v0.41.0 andgolang.org/x/syncto v0.23.0, each an upgrade.x/cryptov0.56.0 and later fix GO-2026-6354 and GO-2026-6355 ingolang.org/x/crypto/ssh, andx/modv0.40.0 and later fix GO-2026-6179 and GO-2026-6180 ingolang.org/x/mod/sumdb;v1.13.0compiles none of thosessh,sumdboropenpgppackages into any binary, so they were never a concern for it. GO-2026-5932, ingolang.org/x/crypto/openpgp, has no fixed version and is not compiled into any binary either. A govulncheck scan of av1.13.1build reports no Go standard library advisory. - A weekly scan.
.github/workflows/govulncheck.ymlscansmainevery week, in source mode and against agethbinary built with the release Go version, and keeps one issue current with anything that needs a maintainer. The six go-ethereum advisories above are expected; one of them disappearing is reported too. - The macOS symbol table. The release build linked the macOS binaries with
-s, which removes Go’s symbols from the Mach-O symbol table. govulncheck looks up thego:func.*symbol there and, without it, reports at module level, although the__gopclntabfunction table it reads next is present.build/ci.gonow links them with-w, which strips only the debugging information. A go1.26 macOS test binary linked with-wkeepsgo:func.*and every Go symbol; one linked with-skeeps none.
Disposition of the build finding, September 17, 2026
The finding that the v1.12.x source does not build on a supported Go now has a proposed remedy in the
repository that publishes that line.
Pull request #702 at etclabscore/core-geth, opened
September 17, 2026 and unmerged when this was written, makes the three changes this audit measured as necessary:
it removes github.com/fjl/memsize, whose //go:linkname use Go 1.23 restricted; it moves
github.com/supranational/blst from v0.3.11, which Go 1.24 rejects for a cgo alias receiver, to v0.3.16; and it
raises the go.mod directive from go 1.21 to go 1.24.0. It also moves the # version:golang pin in
build/checksums.txt from 1.22.1 to 1.25.12 and updates golang.org/x/crypto from v0.17.0 to v0.48.0.
Two measurements to repeat rather than assume, if that release ships. Go 1.24 left support on 10 February
2026 and Go 1.25 on August 19, 2026, each when two newer major releases existed, so a binary built from either
would still carry standard library advisories, fewer than Go 1.21 carries. And the advisory count for any such
release has to be measured from its published archives, the way the counts in this document were, rather than
inferred from the go.mod directive: this audit found two toolchains per release where the configuration
implied one.
This paragraph records a disposition, which is what an audit finding is supposed to acquire. It is not a claim about anyone’s reasons.
Supporting this work
The client is maintained by Ethereum Classic’s core developers and open community contributions, in
the ethereumclassic GitHub organization. The Ethereum Classic
DAO is the legal entity standing behind that work, and the floor under it when nobody else is paying.
Mining pools, centralized exchanges, issuers of Ethereum Classic financial products, Etchash mining
hardware manufacturers and large holders all depend on this client. If your operation relies on
Ethereum Classic, please consider sponsoring its maintenance. Support this work says
who maintains and funds it and how to sponsor it.