go-tuf affected by client DoS via malformed server response
Description
go-tuf is a Go implementation of The Update Framework (TUF). Starting in version 2.0.0 and prior to version 2.3.1, if the TUF repository (or any of its mirrors) returns invalid TUF metadata JSON (valid JSON but not well formed TUF metadata), the client will panic during parsing, causing a denial of service. The panic happens before any signature is validated. This means that a compromised repository/mirror/cache can DoS clients without having access to any signing key. Version 2.3.1 fixes the issue. No known workarounds are available.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/theupdateframework/go-tuf/v2Go | < 2.3.1 | 2.3.1 |
Affected products
1- Range: v2.0.0, v2.0.1, v2.0.2, …
Patches
173345ab6b0ebPerform type assertion (#710)
2 files changed · +18 −2
internal/testutils/signer/signer.go+9 −1 modified@@ -187,7 +187,15 @@ func getTUFMDRole(p string) (string, error) { if err := json.Unmarshal(mdBytes, &m); err != nil { return "", fmt.Errorf("failed to parse TUF metadata: %w", err) } - signedType := m["signed"].(map[string]any)["_type"].(string) + signed, ok := m["signed"].(map[string]any) + if !ok { + return "", fmt.Errorf("metadata 'signed' field is missing or not an object") + } + signedType, ok := signed["_type"].(string) + if !ok { + return "", fmt.Errorf("no _type found in signed") + } + switch signedType { case metadata.ROOT: fallthrough
metadata/metadata.go+9 −1 modified@@ -900,7 +900,15 @@ func checkType[T Roles](data []byte) error { if err := json.Unmarshal(data, &m); err != nil { return err } - signedType := m["signed"].(map[string]any)["_type"].(string) + signed, ok := m["signed"].(map[string]any) + if !ok { + return &ErrValue{Msg: "metadata 'signed' field is missing or not an object"} + } + signedType, ok := signed["_type"].(string) + if !ok { + return &ErrValue{Msg: "no _type found in signed"} + } + switch i.(type) { case *RootType: if ROOT != signedType {
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-846p-jg2w-w324ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2026-23991ghsaADVISORY
- github.com/theupdateframework/go-tuf/commit/73345ab6b0eb7e59d525dac17a428f043074cef6ghsax_refsource_MISCWEB
- github.com/theupdateframework/go-tuf/releases/tag/v2.3.1ghsax_refsource_MISCWEB
- github.com/theupdateframework/go-tuf/security/advisories/GHSA-846p-jg2w-w324ghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.