]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.26] crypto/x509: fix name constraint checking panic
authorRoland Shoemaker <bracewell@google.com>
Wed, 11 Feb 2026 22:49:13 +0000 (14:49 -0800)
committerGopher Robot <gobot@golang.org>
Fri, 6 Mar 2026 00:12:58 +0000 (16:12 -0800)
Apparently we allow empty dNSName SANs (e.g. a domain name of ""), which
causes the excluded domain name wildcard checking to panic, because we
assume names are always non-empty. RFC 5280 appears to say the empty
string should not be accepted, although confusingly refers to this as
" " (a single space). We should probably not allow that when creating
certificates, and possibly when creating them as well (1.27 I guess).

Thanks to Jakub Ciolek for reporting this issue.

Updates #77953
Fixes #77974
Fixes CVE-2026-27138

Change-Id: I4fb213a5450470969a7436cba09b71fd1755a6af
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/3420
Reviewed-by: Neal Patel <nealpatel@google.com>
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/3621
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/752083
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Bypass: Gopher Robot <gobot@golang.org>
Auto-Submit: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/crypto/x509/constraints.go
src/crypto/x509/name_constraints_test.go

index 3c260a9b96fc3d92ac233aa49babf354ee45896a..83bfbcb2ef2e7fd640e7f995d7dc5d042cb4c309 100644 (file)
@@ -375,7 +375,7 @@ func (dnc *dnsConstraints) query(s string) (string, bool) {
                return constraint, true
        }
 
-       if !dnc.permitted && s[0] == '*' {
+       if !dnc.permitted && len(s) > 0 && s[0] == '*' {
                trimmed := trimFirstLabel(s)
                if constraint, found := dnc.parentConstraints[trimmed]; found {
                        return constraint, true
index b325c8edb9c52cfbc116f52e3cebff4a216d65db..3e205e5caf44e964d2aa3534422755672aab9927 100644 (file)
@@ -1645,6 +1645,17 @@ var nameConstraintsTests = []nameConstraintsTest{
                        sans: []string{"email:a@ExAmple.com"},
                },
        },
+       {
+               name: "excluded constraint, empty DNS san",
+               roots: []constraintsSpec{
+                       {
+                               bad: []string{"dns:example.com"},
+                       },
+               },
+               leaf: leafSpec{
+                       sans: []string{"dns:"},
+               },
+       },
 }
 
 func makeConstraintsCACert(constraints constraintsSpec, name string, key *ecdsa.PrivateKey, parent *Certificate, parentKey *ecdsa.PrivateKey) (*Certificate, error) {