Files
Groene AI b906bc5c09 Enforce single-component matching for SSL certificate wildcards
A '*' in an ssl_certificate user subject was constrained only by an
equal-slash-count check ("'*' must not represent a '/' in URI"). For CN
and "DNS:" SAN subjects there are no slashes, so the check was always
0 == 0 and did nothing. A user identified by '*.corp.example.com' was
therefore matched by any subject ending in '.corp.example.com',
including multi-label names like 'evil.deep.corp.example.com'. An
attacker able to obtain a CA-signed certificate for a deeper subdomain
could authenticate as the wildcard user.

Per RFC 6125 6.4.3 a wildcard must match exactly one component.
Generalize the separator to be type-aware: '.' for CN and "DNS:" SANs
(DNS label separator), '/' for "URI:" SANs (path separator, preserving
the previous behavior exactly). The matched span between the fixed
prefix and suffix must not contain the separator.

The candidate length is checked before computing the matched span so
its length cannot underflow when the prefix and suffix overlap on a
short candidate (e.g. pattern 'a*a', candidate 'a'), which also removes
a pre-existing overlap false positive. For URI SANs, "matched span has
no '/'" is equivalent to the previous equal-slash-count guard, so
existing URI wildcard behavior is unchanged.

Add integration tests covering DNS and CN wildcards (single-label
positive, multi-label bypass rejected) and a URI SAN whose matched
segment contains a dot (non-regression).
2026-06-25 12:29:07 +00:00

28 lines
1.7 KiB
Plaintext

-----BEGIN CERTIFICATE REQUEST-----
MIIErDCCApQCAQAwZzELMAkGA1UEBhMCUlUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEgMB4GA1UEAwwXc2lu
Z2xlLmNvcnAuZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
AoICAQC9M7f687WVgH4rCzH1vJRguEp7p/+PNOuqhSLo+bBK15fObcj3Wi29nY9i
lkK6I2+1IgY96dSWEwQV8DWyZiFdDIHN4HTntDhL5MbK8BfVg/3g2nAw1iSPBqC7
bf4CnbeozK4pRNNWPe1UeDQ/XPc3YeMffGWbMev9aJ1QpIVK9GZYA4Fkc1Mk7p5j
isFeABiLyD4IHFFvBUtHycp03h+jTy+NETrHEU0WyGm7RMuzwDB1bUYtK7r2l7mX
VVfHp/l8/MANM+BbBEP2lHVbPGUxL5CTayUXyNtvDKmiTlaUVmi+LWKUl4Dit8kk
9fDncTVVWuLttBRI5WJz+XOogCY9ndm21hEgXwlWlbYotbscjKyP9B9YLGakfsPS
4PJbKgaF9Pqz0+681UllmQiG3XhrOjTM7usSoNV3khF9U0zfhrXwuGehJYZMaQmv
AZiKrZx1jDXIHcthnCzhzxYSHSqLHpNDkCmyLVEzWZZ0DKGCEfLsK1TCLcoM8/jM
uiuZhhWAjbINrpBD3SSJsWUX6bxctEjJsrhlt4Z75gdD4ucMMOP6X5p4hXUFPlzb
bvBftgms+7tlHBXN8wD1XUskeYyyYnwKuN1WEMAt2K8EEWfIvY7A/0yh9JvEq2WD
hB/Oz256hB+4m+I05X/+/KBErPNRT0x7q69+XugtYR5HPuVyrQIDAQABoAAwDQYJ
KoZIhvcNAQELBQADggIBALrGmCMA+lkZG6x7nbQcjanQZgWBMeMZ1M3XVfzFfA+m
+eEnDEOx4pUdYLhSn2TbjPIMzNYkspU3ohmVMZSTdN8r7o1IfuKESDv6CLhskGvy
GaKi2cp9OA8iug0XEOd7IuMJ42PbXbORPNkzAPqZoS/bChzUdtE2r06SiBgrWmgy
n62ZeiRIskyJv10Nmehp+KxZGjVze/PYteXKiC2lqUZGuMiBDcX1gZ/BEUa+Th7u
LhuR99V954KD4XgzQPXWZt1gM10li+iGLoXkvsRAPu4yuCZ+3CreEMh4z1nWh1IW
uMF10n0Ee6zUyBuggJcvOEsPoi1QYWSmS/Qixwa/AJbWIvz5FOHkUwgLuXAdRdAi
+HzIQdbS59sHYA96Gk5rarw4GVl5IKLIWq9gRhzUbLUiMxam1KDoAQOhv7OGhSHx
Wa/FJYgovTi6dk41ZF9EW/G8O2OvRKc9bLjulmwvIrkgrHUOxJsyWtX3/PDI6Mm3
+VgSAF6KoKTOdkcboHBLPECx1KdKJWhw7dpdmlptRG6tHDjXPPyzwaRrQc8ktNZO
QC+B9ivSNaQHlqaEKheRWpVmASTzSd2lUd4I25JAtQo77myUUxHIYjar6lvNUT0s
3vFGRrhAUH4TA81cgdRpjwhED8MfVxXKyhYlSCsGCEH8Lx88TSjajqXB7bnydhCa
-----END CERTIFICATE REQUEST-----