CVE-2026-32285: The jsonparser Advisory That Required No Patch
Status: Closed without a code change
GitHub issue: pgsty/minio#26
Security maintenance is not always a sequence of “find a vulnerability, then ship a patch.” The initial assessment of CVE-2026-32285 was that the repository might still carry a vulnerable jsonparser; replacing the dependency or maintaining another fork was even considered. Checking the resolved module version and actual reachability changed the conclusion: the tree already used v1.1.2, which contained the fix, and govulncheck found no reachable vulnerable symbol.
The right final action was not to manufacture an upgrade. It was to record the evidence and close the issue.
What was wrong with the initial assumption
The issue was first understood as “this dependency has no fixed version.” Acting on that premise without verification could have produced several changes that looked proactive but made the project worse:
- changing the dependency graph for no security benefit;
- introducing compatibility regressions in the name of a nonexistent fix;
- adding another fork that would need long-term maintenance;
- implying that previous SILO releases were demonstrably exposed when that had not been established.
Security work cannot be measured by whether it produces a diff. Leaving correct code unchanged is itself a security decision, and it needs evidence.
Investigation
The investigation narrowed the question through four layers of evidence:
- Confirm the version actually selected in the current
go.modandgo.sumgraph. - Check the upstream release and establish that
v1.1.2already contained the relevant fix. - Run and inspect
govulncheck; it reported no reachable vulnerable symbol. - Attribute the discrepancy in the issue to stale advisory or vulnerability-database information, not to a vulnerability still present in the source tree.
Four claims must remain separate: a version was once listed as affected, a package is imported, a vulnerable symbol is reachable in the program, and remote input can actually exploit that path. None of them proves the others.
Why there was no “just in case” upgrade
If the selected version already includes the fix, bumping to an arbitrary newer version does not make the system safer. It only expands the change surface and makes later regressions harder to attribute. That is especially risky in a large Go module graph.
The final decision was therefore to:
- avoid committing a fictitious fix;
- preserve the version and reachability evidence in the issue;
- keep version gates and
govulncheckin place to detect a future dependency rollback; - treat “no change required now” as a dated conclusion, not a permanent exemption.
Verification boundary
This incident established that the checkout examined on 2026-04-15 did not require a code change for CVE-2026-32285. It does not establish that every future branch, module graph, or release will remain unaffected. A dependency downgrade or a change in module selection requires the version and reachability checks to be repeated.
This article records the investigation and the basis for closure. The original govulncheck was not rerun while preparing this chronicle.
The principle this incident left behind
The objective of security maintenance is an accurate risk conclusion, not a patch for every issue. For a dependency CVE, ask in order: which version is actually selected, whether the vulnerable code enters the program, whether the symbol is reachable, and whether a deployed entry point makes it exploitable. Only when those answers require a source change should the investigation produce a diff.