Go 1.26.1 repairs certificate constraints and filesystem metadata isolation
Five security fixes address certificate verification, HTML refresh URLs, URL parsing, and os.Root metadata. Their preconditions matter when assessing exposure and writing regression tests.
The March 5 Go 1.26.1 release fixes security defects in certificate verification, template escaping, URL parsing, and filesystem access. Its announcement lists five security fixes and a corresponding Go 1.25.8 release. The two certificate defects affect Go 1.26 specifically. That distinction matters when deciding what an upgrade changes for an existing application.
I like Go partly because its ordinary code makes policy decisions visible. Security maintenance still requires reading the implementation's assumptions at the point where one subsystem trusts another. This release offers several examples of checks that look complete when viewed locally but fail when combined with a particular input or a concurrent filesystem change. I would use those conditions to define regression tests and upgrade priorities.
A trusted issuer can still issue an unacceptable certificate
The email-constraint defect, CVE-2026-27137, occurs when a certificate contains multiple full email-address constraints with identical local parts and different domains. Verification considers only the last constraint. An address that the constraints should exclude, or do not permit, can consequently appear in a chain returned by Certificate.Verify.
The issue explicitly limits the scenario to chains that reach a trusted root. Constraint checking happens after chain building. Exploitation therefore requires a trusted certificate authority to issue a certificate containing the relevant unacceptable address. This is not a report that an arbitrary self-signed certificate can become trusted. It is a failure to enforce restrictions within an otherwise trusted chain.
For a hypothetical test fixture, I would choose several full addresses sharing a local part, with different domain constraints. The expected result should depend on the complete constraint set. I would then vary their order, because an implementation that silently keeps only the last entry could pass a single-address test. That test design follows the reported condition without assuming a particular internal data structure caused it.
The second certificate defect, CVE-2026-27138, can panic during name-constraint checking. It requires an empty DNS name in one certificate and excluded name constraints in another. Programs can encounter it through direct certificate verification or TLS. Here too, the chain must reach a trusted root, and a trusted authority must issue the malformed certificate. The issue identifies this as another Go 1.26-only problem.
I would assess certificate validation on two separate questions. One asks whether the implementation accepts a chain that violates policy. Another asks whether it returns a controlled failure for malformed input. Acceptance and availability need separate assertions. A test suite that only confirms rejection of a familiar invalid certificate would not establish either property for these specific combinations.
Template escaping depends on the surrounding attribute
The template issue, CVE-2026-27142, concerns actions that insert URLs into a meta element's content attribute. Those URLs did not receive the required escaping. A meta element with http-equiv set to refresh can therefore permit cross-site scripting through the inserted value.
I would review templates that generate refresh destinations as a distinct case. A value's security meaning depends on the surrounding markup, and a content attribute can carry a URL even though its name does not say so. The report is specific to this context. It does not establish that every template action or every content attribute has the same defect.
The fix adds htmlmetacontenturlescape as a GODEBUG setting. Setting it to zero disables escaping for the affected URL actions following url=. I would treat such a compatibility option as a deployment decision that needs an owner and an explanation. If an application depends on the previous output, I would examine what that dependency means before disabling a security correction. A configuration switch can restore old behavior without resolving the reason the old behavior was unsafe.
URL parsing must reject an invalid authority
The URL parser fix, CVE-2026-25679, makes net/url.Parse reject IPv6 literals that do not begin the host subcomponent. Previously, it could accept an invalid authority by effectively ignoring preceding garbage. The change tightens what counts as a valid parsed input.
This would lead me to review code that authorizes a destination after parsing it. I would want tests to assert rejection of malformed authority text as well as correct handling of accepted addresses. The application should not depend on an invalid string reaching a particular normalized representation. That is a recommendation about using the fixed parser, rather than a claim that every caller had an exploitable authorization bypass.
I also prefer keeping the original input available in a failing test case. Otherwise a test may preserve only the parsed result and lose the condition that made the input ambiguous. For this defect, the position of the IPv6 literal within the host text is the relevant distinction. A test containing only a normal bracketed literal would exercise the valid path and miss the repair.
A root boundary also applies to metadata
The filesystem issue, CVE-2026-27139, concerns directory listings within os.Root on Unix. File.ReadDir or File.Readdir could produce file information populated through lstat. If another actor replaced a component of the full path with a symlink, metadata lookup could reach outside the root. The announcement states that the fix uses fstatat.
The impact is metadata disclosure. An attacker could probe file existence or obtain information such as size. The report explicitly excludes reading or writing file contents outside the root through this defect. I would retain that limit in an incident assessment, since confusing metadata access with arbitrary file access would give operators the wrong problem to investigate.
For a system that promises root confinement, I would nevertheless include metadata in the contract. Directory enumeration often leads to a later information lookup, and the filesystem can change between those operations. My regression test would arrange that replacement and then inspect the information returned. A normal listing of an unchanged directory cannot demonstrate the same isolation property.
These fixes give an upgrade review concrete acceptance conditions. I would check the certificate constraint combinations and the affected template context wherever the application uses them. For root-confined file processing, I would also check metadata access during path replacement. Each test would record the specific boundary it verifies so that future maintenance preserves the reason for the assertion.