golang.org/x/crypto 0.48.0 (golang)
pkg:golang/golang.org/x/crypto@0.48.0
# dex-release.dockerfile (79:79)
COPY --from=builder /go/bin/dex /usr/local/bin/dex
Incorrect Implementation of Authentication Algorithm
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 10 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L | | EPSS Score | 0.503% | | EPSS Percentile | 41st percentile |
Description
Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.
Improper Certificate Validation
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.654% | | EPSS Percentile | 50th percentile |
Description
Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.
Integer Overflow or Wraparound
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H | | EPSS Score | 0.637% | | EPSS Percentile | 49th percentile |
Description
When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.
Missing Authorization
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.487% | | EPSS Percentile | 40th percentile |
Description
The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.
Improper Preservation of Permissions
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.716% | | EPSS Percentile | 52nd percentile |
Description
When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.
Missing Authorization
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.487% | | EPSS Percentile | 40th percentile |
Description
The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a "no-touch-required" extension in Permissions.Extensions from PublicKeyCallback.
Improper Restriction of Operations within the Bounds of a Memory Buffer
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H | | EPSS Score | 0.621% | | EPSS Percentile | 48th percentile |
Description
A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.431% | | EPSS Percentile | 35th percentile |
Description
Previously, a channel registered in the mux's chanList is not usable until it is established. A malicious peer was able flood the channel's incomingRequests, deadlocking the entire connection.
Now, we add an atomic established state, set when a channel becomes usable. Until such a time, handlePacket drops every packet other than the open confirmation/failure, without blocking and without tearing down the connection.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.500% | | EPSS Percentile | 41st percentile |
Description
Previously, after a channel has been established, a malicious peer could send crafted messages that would deadlock the entire connection.
Now, we handle all RFC 4254 channel messages; global requests are handled explicitly. Then, treat all other messages as a protocol error and tear the connection down instead of buffering and blocking.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.437% | | EPSS Percentile | 36th percentile |
Description
The source-address critical option in the Permissions returned by an authentication callback was only enforced for the PublicKeyCallback and VerifiedPublicKeyCallback paths, extending the fix for CVE-2026-46595. Permissions returned by the PasswordCallback, KeyboardInteractiveCallback, NoClientAuthCallback, and GSSAPIWithMICConfig.AllowLogin callbacks were not validated against the client's remote address, so a source-address restriction set by those callbacks was silently ignored. The check is now applied to the Permissions returned by any authentication callback.
Incorrect Type Conversion or Cast
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 7.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.620% | | EPSS Percentile | 48th percentile |
Description
An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.
Improper Validation of Specified Quantity in Input
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 7.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.623% | | EPSS Percentile | 48th percentile |
Description
The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.
Improper Enforcement of Message Integrity During Transmission in a Communication Channel
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.281% | | EPSS Percentile | 19th percentile |
Description
An authenticated SSH client that repeatedly opened channels which were rejected by the server caused unbounded memory growth, eventually crashing the server process and affecting all connected users. Rejected channels are now properly removed from the connection's internal state and released for garbage collection.
Improper Preservation of Permissions
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 6.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L | | EPSS Score | 0.539% | | EPSS Percentile | 44th percentile |
Description
When an SSH server authentication callback returned PartialSuccessError with non-nil Permissions, those permissions were silently discarded, potentially dropping certificate restrictions such as force-command after a second factor succeeded. Returning non-nil Permissions with PartialSuccessError now results in a connection error.
Improper Validation of Array Index
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 5.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L | | EPSS Score | 0.515% | | EPSS Percentile | 42nd percentile |
Description
For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire bytes, leading to a panic when used.
Improper Certificate Validation
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 5.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L | | EPSS Score | 0.662% | | EPSS Percentile | 50th percentile |
Description
SSH servers which use CertChecker as a public key callback without setting IsUserAuthority or IsHostAuthority could be caused to panic by a client presenting a certificate. CertChecker now returns an error instead of panicking when these callbacks are nil.

| Affected range | >=0 | | Fixed version | Not Fixed |
Description
The golang.org/x/crypto/openpgp package is unsafe by design, has numerous known security issues, is not maintained, and should not be used.
If you are required to interoperate with OpenPGP systems and need a maintained package, consider github.com/ProtonMail/go-crypto/openpgp which is a maintained fork that aims to be a drop-in replacement for this package.
|
golang.org/x/crypto 0.47.0 (golang)
pkg:golang/golang.org/x/crypto@0.47.0
# dex-release.dockerfile (81:81)
COPY --from=gomplate-builder /go/bin/gomplate /usr/local/bin/gomplate
Incorrect Implementation of Authentication Algorithm
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 10 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L | | EPSS Score | 0.503% | | EPSS Percentile | 41st percentile |
Description
Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.
Improper Certificate Validation
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.654% | | EPSS Percentile | 50th percentile |
Description
Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.
Integer Overflow or Wraparound
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H | | EPSS Score | 0.637% | | EPSS Percentile | 49th percentile |
Description
When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.
Missing Authorization
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.487% | | EPSS Percentile | 40th percentile |
Description
The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.
Improper Preservation of Permissions
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.716% | | EPSS Percentile | 52nd percentile |
Description
When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.
Missing Authorization
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 0.487% | | EPSS Percentile | 40th percentile |
Description
The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a "no-touch-required" extension in Permissions.Extensions from PublicKeyCallback.
Improper Restriction of Operations within the Bounds of a Memory Buffer
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H | | EPSS Score | 0.621% | | EPSS Percentile | 48th percentile |
Description
A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.431% | | EPSS Percentile | 35th percentile |
Description
Previously, a channel registered in the mux's chanList is not usable until it is established. A malicious peer was able flood the channel's incomingRequests, deadlocking the entire connection.
Now, we add an atomic established state, set when a channel becomes usable. Until such a time, handlePacket drops every packet other than the open confirmation/failure, without blocking and without tearing down the connection.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.500% | | EPSS Percentile | 41st percentile |
Description
Previously, after a channel has been established, a malicious peer could send crafted messages that would deadlock the entire connection.
Now, we handle all RFC 4254 channel messages; global requests are handled explicitly. Then, treat all other messages as a protocol error and tear the connection down instead of buffering and blocking.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.437% | | EPSS Percentile | 36th percentile |
Description
The source-address critical option in the Permissions returned by an authentication callback was only enforced for the PublicKeyCallback and VerifiedPublicKeyCallback paths, extending the fix for CVE-2026-46595. Permissions returned by the PasswordCallback, KeyboardInteractiveCallback, NoClientAuthCallback, and GSSAPIWithMICConfig.AllowLogin callbacks were not validated against the client's remote address, so a source-address restriction set by those callbacks was silently ignored. The check is now applied to the Permissions returned by any authentication callback.
Incorrect Type Conversion or Cast
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 7.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.620% | | EPSS Percentile | 48th percentile |
Description
An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.
Improper Validation of Specified Quantity in Input
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 7.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.623% | | EPSS Percentile | 48th percentile |
Description
The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.
Improper Enforcement of Message Integrity During Transmission in a Communication Channel
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.281% | | EPSS Percentile | 19th percentile |
Description
An authenticated SSH client that repeatedly opened channels which were rejected by the server caused unbounded memory growth, eventually crashing the server process and affecting all connected users. Rejected channels are now properly removed from the connection's internal state and released for garbage collection.
Improper Preservation of Permissions
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 6.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L | | EPSS Score | 0.539% | | EPSS Percentile | 44th percentile |
Description
When an SSH server authentication callback returned PartialSuccessError with non-nil Permissions, those permissions were silently discarded, potentially dropping certificate restrictions such as force-command after a second factor succeeded. Returning non-nil Permissions with PartialSuccessError now results in a connection error.
Improper Validation of Array Index
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 5.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L | | EPSS Score | 0.515% | | EPSS Percentile | 42nd percentile |
Description
For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire bytes, leading to a panic when used.
Improper Certificate Validation
| Affected range | <0.52.0 | | Fixed version | 0.52.0 | | CVSS Score | 5.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L | | EPSS Score | 0.662% | | EPSS Percentile | 50th percentile |
Description
SSH servers which use CertChecker as a public key callback without setting IsUserAuthority or IsHostAuthority could be caused to panic by a client presenting a certificate. CertChecker now returns an error instead of panicking when these callbacks are nil.

| Affected range | >=0 | | Fixed version | Not Fixed |
Description
The golang.org/x/crypto/openpgp package is unsafe by design, has numerous known security issues, is not maintained, and should not be used.
If you are required to interoperate with OpenPGP systems and need a maintained package, consider github.com/ProtonMail/go-crypto/openpgp which is a maintained fork that aims to be a drop-in replacement for this package.
|
stdlib 1.25.6 (golang)
pkg:golang/stdlib@1.25.6
# dex-release.dockerfile (68:68)
FROM dexidp/dex:${DEX_VERSION}-alpine

| Affected range | >=1.25.0-0 <1.25.7
| | Fixed version | 1.25.7 | | EPSS Score | 0.915% | | EPSS Percentile | 59th percentile |
Description
During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.493% | | EPSS Percentile | 41st percentile |
Description
On Windows, when the target of Root.Mkdir or Root.MkdirAll is a junction pointing to an empty location, the operation can create a directory at the junction target even when that target is located outside the root. This only applies to operations where the last path component is a junction (path/to/junction, but not path/junction/target).

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.692% | | EPSS Percentile | 51st percentile |
Description
The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.
This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.574% | | EPSS Percentile | 46th percentile |
Description
The HTTP/2 server can refund connection-level flow control twice for the same data: Once when a client resets a stream (refunding data for any sent-but-unread portion of the stream), and again when a request handler reads the buffered data. A malicious client can exploit this to bypass the configured connection-level flow control limit (MaxReceiveBufferPerConnection). Total buffered data is still limited by the concurrent stream limit and stream-level flow control.

| Affected range | <1.25.12 | | Fixed version | 1.25.12 | | EPSS Score | 0.232% | | EPSS Percentile | 13th percentile |
Description
On Unix systems, opening a file in an os.Root improperly follows symlinks to locations outside of the Root when the final path component of the a path is a symbolic link and the path ends in /.
For example, 'root.Open("symlink/")' will open "symlink" even when "symlink" is a symbolic link pointing outside of the root.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.394% | | EPSS Percentile | 32nd percentile |
Description
Multiple ECH outer extension references are not permitted under RFC 9849; previously, a client could send a well-crafted packet that could trigger memory exhaustion in the server process by specifying multiple references.
We now reject these as malformed and curb the memory amplification vector as a result.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.404% | | EPSS Percentile | 33rd percentile |
Description
Parsing a multipart form can bypass memory limits and read an arbitrarily long line into memory when the remaining limit at the start of a part is less than 400 bytes.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.315% | | EPSS Percentile | 23rd percentile |
Description
When an HTTP server handler sends a 2xx response to an HTTP/1 CONNECT request and returns without hijacking the connection, the server improperly continues to read and serve requests from the connection. Since a 2xx response to an HTTP/1 CONNECT converts the connection into a tunnel, the server should not treat the connection as continuing to contain HTTP.
The impact of this misbehavior is mostly limited to potential request smuggling, where an intermediate proxy considers the data on the connection to be tunneled and the server considers it to be HTTP.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
A malicious HTTP/2 peer can cause excessive CPU consumption in the client or server by opening a large number of streams and then sending many small SETTINGS frames containing SETTINGS_INITIAL_WINDOW_SIZE values.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.379% | | EPSS Percentile | 30th percentile |
Description
When parsing a Range header containing a large number of small ranges, FileServer(FS), ServeContent, and ServeFile(FS) can consume an excessive amount of CPU.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.303% | | EPSS Percentile | 21st percentile |
Description
Historically, we have been rather lax about malformed framing-related headers in our HTTP/2 implementation, as they cannot interfere with HTTP/2 framing. However, this makes it possible for our HTTP/2 implementation to forward responses containing such headers to an HTTP/1 client when acting as a reverse proxy. If the HTTP/1 client also does not behave strictly enough, this can result in response smuggling.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.570% | | EPSS Percentile | 46th percentile |
Description
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.309% | | EPSS Percentile | 22nd percentile |
Description
When http.Transport sends an HTTP/1 CONNECT request with a non-empty Request.Body, it writes the body directly to the connection without framing after the request headers. If the server rejects the CONNECT request with a non-2xx keep-alive response, Transport returns the connection to the idle pool. Because CONNECT requests do not have a request body, the server may interpret the trailing body bytes as a subsequent pipelined HTTP/1.1 request on the connection, leaving the pooled connection desynchronized and causing the next caller that reuses it to read the response to the injected request. In reverse proxies (including httputil.ReverseProxy) that forward CONNECT requests through a shared Transport, this can lead to cross-user response poisoning.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Handshake messages, such as KeyUpdate, are always considered as state-advancing, regardless of whether a handshake has been completed or not. As a result, a malicious client can keep sending KeyUpdate messages to force the server to keep performing key derivation operations indefinitely.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Previously, DecodeElement would reset the depth counter causing it to never fire; this could lead to stack exhaustion.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
When a server is configured to support unencrypted HTTP/2, it reads a few bytes from each new connection to see if they contain the HTTP/2 client preface. ReadHeaderTimeout is unexpectedly not being applied when doing this.

| Affected range | <1.25.11 | | Fixed version | 1.25.11 | | EPSS Score | 0.560% | | EPSS Percentile | 45th percentile |
Description
Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.798% | | EPSS Percentile | 55th percentile |
Description
Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.620% | | EPSS Percentile | 48th percentile |
Description
The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.784% | | EPSS Percentile | 55th percentile |
Description
Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Enforce a recursion limit in Unmarshal to prevent stack exhaustion when parsing deeply-nested, recursive structures.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.781% | | EPSS Percentile | 55th percentile |
Description
When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.813% | | EPSS Percentile | 56th percentile |
Description
When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.621% | | EPSS Percentile | 48th percentile |
Description
If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.
This only affects TLS 1.3.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.355% | | EPSS Percentile | 27th percentile |
Description
Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.
This only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.615% | | EPSS Percentile | 48th percentile |
Description
During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.

| Affected range | <1.25.8 | | Fixed version | 1.25.8 | | EPSS Score | 0.834% | | EPSS Percentile | 56th percentile |
Description
url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.

| Affected range | <1.25.11 | | Fixed version | 1.25.11 | | EPSS Score | 0.591% | | EPSS Percentile | 47th percentile |
Description
(*x509.Certificate).VerifyHostname previously called matchHostnames in a loop over all DNS Subject Alternative Name (SAN) entries. This caused strings.Split(host, ".") to execute repeatedly on the same input hostname.
With a large DNS SAN list, verification costs scaled quadratically based on the number of SAN entries multiplied by the hostname's label count. Because x509.Verify validates hostnames before building the certificate chain, this overhead occurred even for untrusted certificates.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.292% | | EPSS Percentile | 20th percentile |
Description
On Linux, if the target of Root.Chmod is replaced with a symlink while the chmod operation is in progress, Chmod can operate on the target of the symlink, even when the target lies outside the root.
The Linux fchmodat syscall silently ignores the AT_SYMLINK_NOFOLLOW flag, which Root.Chmod uses to avoid symlink traversal. Root.Chmod checks its target before acting and returns an error if the target is a symlink lying outside the root, so the impact is limited to cases where the target is replaced with a symlink between the check and operation.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.310% | | EPSS Percentile | 22nd percentile |
Description
Previously, pathological inputs could close an unescaped '/' early, allowing for attack-controlled data to inject arbitrary content, potentially leading to XSS.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.393% | | EPSS Percentile | 31st percentile |
Description
If a trusted template author were to write a
</blockquote>
</details>
<a href="https://scout.docker.com/v/CVE-2026-39823?s=golang&n=stdlib&t=golang&vr=%3C1.25.10"><img alt="medium : CVE--2026--39823" src="https://img.shields.io/badge/CVE--2026--39823-lightgrey?label=medium%20&labelColor=fbb552"/></a>
| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
CVE-2026-27142 fixed a vulnerability in which URLs were not correctly escaped inside of a tag's attribute. If the URL content were to insert ASCII whitespaces around the '=' rune inside of the attribute, the escaper would fail to similarly escape it, leading to XSS.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
Context was not properly tracked across template branches for JS template literals, leading to possibly incorrect escaping of content when branches were used. Additionally template actions within JS template literals did not properly track the brace depth, leading to incorrect escaping being applied.
These issues could cause actions within JS template literals to be incorrectly or improperly escaped, leading to XSS vulnerabilities.

| Affected range | <1.25.8 | | Fixed version | 1.25.8 | | EPSS Score | 0.346% | | EPSS Percentile | 26th percentile |
Description
Actions which insert URLs into the content attribute of HTML meta tags are not escaped. This can allow XSS if the meta tag also has an http-equiv attribute with the value "refresh".
A new GODEBUG setting has been added, htmlmetacontenturlescape, which can be used to disable escaping URLs in actions in the meta content attribute which follow "url=" by setting htmlmetacontenturlescape=0.

| Affected range | <1.25.13 | | Fixed version | 1.25.13 | | EPSS Score | 0.550% | | EPSS Percentile | 44th percentile |
Description
Previously, resolving relative paths containing parent directory ('..') segments performed string conversions and buffer rewrites on each step, resulting in quadratic time complexity and high memory allocation overhead.
Now, path resolution operates on a byte buffer using index-based backtracking for '..' segments, eliminating the quadratic time complexity and significantly reducing memory allocations.

| Affected range | <1.25.9 | | Fixed version | 1.25.9 | | EPSS Score | 0.182% | | EPSS Percentile | 7th percentile |
Description
tar.Reader can allocate an unbounded amount of memory when reading a maliciously-crafted archive containing a large number of sparse regions encoded in the "old GNU sparse map" format.

| Affected range | <1.25.11 | | Fixed version | 1.25.11 | | EPSS Score | 0.412% | | EPSS Percentile | 33rd percentile |
Description
When returning errors, functions in the net/textproto package would include its input as part of the error. This might allow an attacker to inject misleading content to errors that are printed or logged.

| Affected range | <1.25.12 | | Fixed version | 1.25.12 | | EPSS Score | 0.382% | | EPSS Percentile | 30th percentile |
Description
Handshakes which used Encrypted Client Hello could be de-anonymized by a passive network observer due to a disclosure of pre-shared key identities in the unencrypted client hello.

| Affected range | <1.25.10 | | Fixed version | 1.25.10 | | EPSS Score | 0.413% | | EPSS Percentile | 34th percentile |
Description
ReverseProxy can forward queries containing parameters not visible to Rewrite functions.
When used with a Rewrite function, or a Director function which parses query parameters, ReverseProxy sanitizes the forwarded request to remove query parameters which are not parsed by url.ParseQuery. ReverseProxy does not take ParseQuery's limit on the total number of query parameters (controlled by GODEBUG=urlmaxqueryparams=N) into account. This can permit ReverseProxy to forward a request containing a query parameter that is not visible to the Rewrite function.
For example, the query "a1=x&a2=x&...&a10000=x&hidden=y" can forward the parameter "hidden=y" while hiding it from the proxy's Rewrite function.

| Affected range | <1.25.8 | | Fixed version | 1.25.8 | | EPSS Score | 0.118% | | EPSS Percentile | 2nd percentile |
Description
On Unix platforms, when listing the contents of a directory using File.ReadDir or File.Readdir the returned FileInfo could reference a file outside of the Root in which the File was opened.
The impact of this escape is limited to reading metadata provided by lstat from arbitrary locations on the filesystem without permitting reading or writing files outside the root.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
HTTP/2 servers could end up crashing due to inadvertently modifying its HPACK encoder concurrently. This happens because the server modifies the HPACK encoder from two goroutines without synchronization: one uses the encoder to encode a HEADERS frame as part of a response sent to a client and the other modifies the encoder's table size when handling a SETTINGS frame containing SETTINGS_HEADER_TABLE_SIZE that a client sends. A malicious client can repeatedly send a request while changing the header table size to crash the server.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
A trusted template author may have previously written a valid template wherein the use of the 'yield' keyword would not be correctly escaped.
We now ensure that valid keyword uses are escaped and non-keyword uses are not escaped.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
When a JavaScript template literal contains consecutive expressions, the context tracking state was not properly reset upon entering a new expression.
We now ensure that template-literal expression entries correctly reset context variables so all subsequent regular expression literals are accurately recognized and escaped.
|
stdlib 1.26.0 (golang)
pkg:golang/stdlib@1.26.0
# dex-release.dockerfile (79:79)
COPY --from=builder /go/bin/dex /usr/local/bin/dex

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.493% | | EPSS Percentile | 41st percentile |
Description
On Windows, when the target of Root.Mkdir or Root.MkdirAll is a junction pointing to an empty location, the operation can create a directory at the junction target even when that target is located outside the root. This only applies to operations where the last path component is a junction (path/to/junction, but not path/junction/target).

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.692% | | EPSS Percentile | 51st percentile |
Description
The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.
This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.574% | | EPSS Percentile | 46th percentile |
Description
The HTTP/2 server can refund connection-level flow control twice for the same data: Once when a client resets a stream (refunding data for any sent-but-unread portion of the stream), and again when a request handler reads the buffered data. A malicious client can exploit this to bypass the configured connection-level flow control limit (MaxReceiveBufferPerConnection). Total buffered data is still limited by the concurrent stream limit and stream-level flow control.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.340% | | EPSS Percentile | 25th percentile |
Description
When verifying a certificate chain containing excluded DNS constraints, these constraints are not correctly applied to wildcard DNS SANs which use a different case than the constraint.
This only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.

| Affected range | >=1.26.0-0 <1.26.5
| | Fixed version | 1.26.5 | | EPSS Score | 0.232% | | EPSS Percentile | 13th percentile |
Description
On Unix systems, opening a file in an os.Root improperly follows symlinks to locations outside of the Root when the final path component of the a path is a symbolic link and the path ends in /.
For example, 'root.Open("symlink/")' will open "symlink" even when "symlink" is a symbolic link pointing outside of the root.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.394% | | EPSS Percentile | 32nd percentile |
Description
Multiple ECH outer extension references are not permitted under RFC 9849; previously, a client could send a well-crafted packet that could trigger memory exhaustion in the server process by specifying multiple references.
We now reject these as malformed and curb the memory amplification vector as a result.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.404% | | EPSS Percentile | 33rd percentile |
Description
Parsing a multipart form can bypass memory limits and read an arbitrarily long line into memory when the remaining limit at the start of a part is less than 400 bytes.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.315% | | EPSS Percentile | 23rd percentile |
Description
When an HTTP server handler sends a 2xx response to an HTTP/1 CONNECT request and returns without hijacking the connection, the server improperly continues to read and serve requests from the connection. Since a 2xx response to an HTTP/1 CONNECT converts the connection into a tunnel, the server should not treat the connection as continuing to contain HTTP.
The impact of this misbehavior is mostly limited to potential request smuggling, where an intermediate proxy considers the data on the connection to be tunneled and the server considers it to be HTTP.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
A malicious HTTP/2 peer can cause excessive CPU consumption in the client or server by opening a large number of streams and then sending many small SETTINGS frames containing SETTINGS_INITIAL_WINDOW_SIZE values.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.379% | | EPSS Percentile | 30th percentile |
Description
When parsing a Range header containing a large number of small ranges, FileServer(FS), ServeContent, and ServeFile(FS) can consume an excessive amount of CPU.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.303% | | EPSS Percentile | 21st percentile |
Description
Historically, we have been rather lax about malformed framing-related headers in our HTTP/2 implementation, as they cannot interfere with HTTP/2 framing. However, this makes it possible for our HTTP/2 implementation to forward responses containing such headers to an HTTP/1 client when acting as a reverse proxy. If the HTTP/1 client also does not behave strictly enough, this can result in response smuggling.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.570% | | EPSS Percentile | 46th percentile |
Description
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.309% | | EPSS Percentile | 22nd percentile |
Description
When http.Transport sends an HTTP/1 CONNECT request with a non-empty Request.Body, it writes the body directly to the connection without framing after the request headers. If the server rejects the CONNECT request with a non-2xx keep-alive response, Transport returns the connection to the idle pool. Because CONNECT requests do not have a request body, the server may interpret the trailing body bytes as a subsequent pipelined HTTP/1.1 request on the connection, leaving the pooled connection desynchronized and causing the next caller that reuses it to read the response to the injected request. In reverse proxies (including httputil.ReverseProxy) that forward CONNECT requests through a shared Transport, this can lead to cross-user response poisoning.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Handshake messages, such as KeyUpdate, are always considered as state-advancing, regardless of whether a handshake has been completed or not. As a result, a malicious client can keep sending KeyUpdate messages to force the server to keep performing key derivation operations indefinitely.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Previously, DecodeElement would reset the depth counter causing it to never fire; this could lead to stack exhaustion.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
When a server is configured to support unencrypted HTTP/2, it reads a few bytes from each new connection to see if they contain the HTTP/2 client preface. ReadHeaderTimeout is unexpectedly not being applied when doing this.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.549% | | EPSS Percentile | 44th percentile |
Description
Parsing an invalid SVCB or HTTPS RR can panic when the size of a parameter value overflows the message buffer.

| Affected range | >=1.26.0-0 <1.26.4
| | Fixed version | 1.26.4 | | EPSS Score | 0.560% | | EPSS Percentile | 45th percentile |
Description
Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.798% | | EPSS Percentile | 55th percentile |
Description
Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.620% | | EPSS Percentile | 48th percentile |
Description
The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.784% | | EPSS Percentile | 55th percentile |
Description
Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
Enforce a recursion limit in Unmarshal to prevent stack exhaustion when parsing deeply-nested, recursive structures.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.781% | | EPSS Percentile | 55th percentile |
Description
When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.813% | | EPSS Percentile | 56th percentile |
Description
When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.621% | | EPSS Percentile | 48th percentile |
Description
If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.
This only affects TLS 1.3.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.355% | | EPSS Percentile | 27th percentile |
Description
Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.
This only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.615% | | EPSS Percentile | 48th percentile |
Description
During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.

| Affected range | >=1.26.0-0 <1.26.1
| | Fixed version | 1.26.1 | | EPSS Score | 0.630% | | EPSS Percentile | 49th percentile |
Description
When verifying a certificate chain which contains a certificate containing multiple email address constraints which share common local portions but different domain portions, these constraints will not be properly applied, and only the last constraint will be considered.

| Affected range | >=1.26.0-0 <1.26.1
| | Fixed version | 1.26.1 | | EPSS Score | 0.834% | | EPSS Percentile | 56th percentile |
Description
url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.

| Affected range | >=1.26.0-0 <1.26.4
| | Fixed version | 1.26.4 | | EPSS Score | 0.591% | | EPSS Percentile | 47th percentile |
Description
(*x509.Certificate).VerifyHostname previously called matchHostnames in a loop over all DNS Subject Alternative Name (SAN) entries. This caused strings.Split(host, ".") to execute repeatedly on the same input hostname.
With a large DNS SAN list, verification costs scaled quadratically based on the number of SAN entries multiplied by the hostname's label count. Because x509.Verify validates hostnames before building the certificate chain, this overhead occurred even for untrusted certificates.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.292% | | EPSS Percentile | 20th percentile |
Description
On Linux, if the target of Root.Chmod is replaced with a symlink while the chmod operation is in progress, Chmod can operate on the target of the symlink, even when the target lies outside the root.
The Linux fchmodat syscall silently ignores the AT_SYMLINK_NOFOLLOW flag, which Root.Chmod uses to avoid symlink traversal. Root.Chmod checks its target before acting and returns an error if the target is a symlink lying outside the root, so the impact is limited to cases where the target is replaced with a symlink between the check and operation.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.310% | | EPSS Percentile | 22nd percentile |
Description
Previously, pathological inputs could close an unescaped '/' early, allowing for attack-controlled data to inject arbitrary content, potentially leading to XSS.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.393% | | EPSS Percentile | 31st percentile |
Description
If a trusted template author were to write a
</blockquote>
</details>
<a href="https://scout.docker.com/v/CVE-2026-39823?s=golang&n=stdlib&t=golang&vr=%3E%3D1.26.0-0%2C%3C1.26.3"><img alt="medium : CVE--2026--39823" src="https://img.shields.io/badge/CVE--2026--39823-lightgrey?label=medium%20&labelColor=fbb552"/></a>
| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
CVE-2026-27142 fixed a vulnerability in which URLs were not correctly escaped inside of a tag's attribute. If the URL content were to insert ASCII whitespaces around the '=' rune inside of the attribute, the escaper would fail to similarly escape it, leading to XSS.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
Context was not properly tracked across template branches for JS template literals, leading to possibly incorrect escaping of content when branches were used. Additionally template actions within JS template literals did not properly track the brace depth, leading to incorrect escaping being applied.
These issues could cause actions within JS template literals to be incorrectly or improperly escaped, leading to XSS vulnerabilities.

| Affected range | >=1.26.0-0 <1.26.1
| | Fixed version | 1.26.1 | | EPSS Score | 0.346% | | EPSS Percentile | 26th percentile |
Description
Actions which insert URLs into the content attribute of HTML meta tags are not escaped. This can allow XSS if the meta tag also has an http-equiv attribute with the value "refresh".
A new GODEBUG setting has been added, htmlmetacontenturlescape, which can be used to disable escaping URLs in actions in the meta content attribute which follow "url=" by setting htmlmetacontenturlescape=0.

| Affected range | >=1.26.0-0 <1.26.6
| | Fixed version | 1.26.6 | | EPSS Score | 0.550% | | EPSS Percentile | 44th percentile |
Description
Previously, resolving relative paths containing parent directory ('..') segments performed string conversions and buffer rewrites on each step, resulting in quadratic time complexity and high memory allocation overhead.
Now, path resolution operates on a byte buffer using index-based backtracking for '..' segments, eliminating the quadratic time complexity and significantly reducing memory allocations.

| Affected range | >=1.26.0-0 <1.26.1
| | Fixed version | 1.26.1 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
Certificate verification can panic when a certificate in the chain has an empty DNS name and another certificate in the chain has excluded name constraints. This can crash programs that are either directly verifying X.509 certificate chains, or those that use TLS.

| Affected range | >=1.26.0-0 <1.26.2
| | Fixed version | 1.26.2 | | EPSS Score | 0.182% | | EPSS Percentile | 7th percentile |
Description
tar.Reader can allocate an unbounded amount of memory when reading a maliciously-crafted archive containing a large number of sparse regions encoded in the "old GNU sparse map" format.

| Affected range | >=1.26.0-0 <1.26.4
| | Fixed version | 1.26.4 | | EPSS Score | 0.412% | | EPSS Percentile | 33rd percentile |
Description
When returning errors, functions in the net/textproto package would include its input as part of the error. This might allow an attacker to inject misleading content to errors that are printed or logged.

| Affected range | >=1.26.0-0 <1.26.5
| | Fixed version | 1.26.5 | | EPSS Score | 0.382% | | EPSS Percentile | 30th percentile |
Description
Handshakes which used Encrypted Client Hello could be de-anonymized by a passive network observer due to a disclosure of pre-shared key identities in the unencrypted client hello.

| Affected range | >=1.26.0-0 <1.26.3
| | Fixed version | 1.26.3 | | EPSS Score | 0.413% | | EPSS Percentile | 34th percentile |
Description
ReverseProxy can forward queries containing parameters not visible to Rewrite functions.
When used with a Rewrite function, or a Director function which parses query parameters, ReverseProxy sanitizes the forwarded request to remove query parameters which are not parsed by url.ParseQuery. ReverseProxy does not take ParseQuery's limit on the total number of query parameters (controlled by GODEBUG=urlmaxqueryparams=N) into account. This can permit ReverseProxy to forward a request containing a query parameter that is not visible to the Rewrite function.
For example, the query "a1=x&a2=x&...&a10000=x&hidden=y" can forward the parameter "hidden=y" while hiding it from the proxy's Rewrite function.

| Affected range | >=1.26.0-0 <1.26.1
| | Fixed version | 1.26.1 | | EPSS Score | 0.118% | | EPSS Percentile | 2nd percentile |
Description
On Unix platforms, when listing the contents of a directory using File.ReadDir or File.Readdir the returned FileInfo could reference a file outside of the Root in which the File was opened.
The impact of this escape is limited to reading metadata provided by lstat from arbitrary locations on the filesystem without permitting reading or writing files outside the root.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
HTTP/2 servers could end up crashing due to inadvertently modifying its HPACK encoder concurrently. This happens because the server modifies the HPACK encoder from two goroutines without synchronization: one uses the encoder to encode a HEADERS frame as part of a response sent to a client and the other modifies the encoder's table size when handling a SETTINGS frame containing SETTINGS_HEADER_TABLE_SIZE that a client sends. A malicious client can repeatedly send a request while changing the header table size to crash the server.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
A trusted template author may have previously written a valid template wherein the use of the 'yield' keyword would not be correctly escaped.
We now ensure that valid keyword uses are escaped and non-keyword uses are not escaped.

| Affected range | <1.26.9 | | Fixed version | 1.26.9 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
When a JavaScript template literal contains consecutive expressions, the context tracking state was not properly reset upon entering a new expression.
We now ensure that template-literal expression entries correctly reset context variables so all subsequent regular expression literals are accurately recognized and escaped.
|
openssl 3.5.7-r0 (apk)
pkg:apk/alpine/openssl@3.5.7-r0?os_name=alpine&os_version=3.23
# dex-release.dockerfile (76:76)
RUN apk --no-cache upgrade

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 1.159% | | EPSS Percentile | 66th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.232% | | EPSS Percentile | 13th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 1.602% | | EPSS Percentile | 75th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.778% | | EPSS Percentile | 55th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.916% | | EPSS Percentile | 59th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.622% | | EPSS Percentile | 48th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 1.537% | | EPSS Percentile | 74th percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 1.021% | | EPSS Percentile | 62nd percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.729% | | EPSS Percentile | 53rd percentile |
Description

| Affected range | <3.5.8-r0 | | Fixed version | 3.5.8-r0 | | EPSS Score | 0.588% | | EPSS Percentile | 47th percentile |
Description
|
golang.org/x/net 0.50.0 (golang)
pkg:golang/golang.org/x/net@0.50.0
# dex-release.dockerfile (79:79)
COPY --from=builder /go/bin/dex /usr/local/bin/dex

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.692% | | EPSS Percentile | 51st percentile |
Description
The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.
This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.574% | | EPSS Percentile | 46th percentile |
Description
The HTTP/2 server can refund connection-level flow control twice for the same data: Once when a client resets a stream (refunding data for any sent-but-unread portion of the stream), and again when a request handler reads the buffered data. A malicious client can exploit this to bypass the configured connection-level flow control limit (MaxReceiveBufferPerConnection). Total buffered data is still limited by the concurrent stream limit and stream-level flow control.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
A malicious HTTP/2 peer can cause excessive CPU consumption in the client or server by opening a large number of streams and then sending many small SETTINGS frames containing SETTINGS_INITIAL_WINDOW_SIZE values.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.303% | | EPSS Percentile | 21st percentile |
Description
Historically, we have been rather lax about malformed framing-related headers in our HTTP/2 implementation, as they cannot interfere with HTTP/2 framing. However, this makes it possible for our HTTP/2 implementation to forward responses containing such headers to an HTTP/1 client when acting as a reverse proxy. If the HTTP/1 client also does not behave strictly enough, this can result in response smuggling.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.570% | | EPSS Percentile | 46th percentile |
Description
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.549% | | EPSS Percentile | 44th percentile |
Description
Parsing an invalid SVCB or HTTPS RR can panic when the size of a parameter value overflows the message buffer.

| Affected range | <0.53.0 | | Fixed version | 0.53.0 | | EPSS Score | 0.781% | | EPSS Percentile | 55th percentile |
Description
When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.

| Affected range | >=0.50.0 <0.51.0
| | Fixed version | 0.51.0 | | EPSS Score | 0.654% | | EPSS Percentile | 50th percentile |
Description
Due to missing nil check, sending 0x0a-0x0f HTTP/2 frames will cause a running server to panic
Uncontrolled Resource Consumption
| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.460% | | EPSS Percentile | 38th percentile |
Description
In Go Net (golang.org/x/net) before verion 0.55.0, parsing arbitrary HTML can consume excessive CPU time, possibly leading to denial of service.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
HTTP/2 servers could end up crashing due to inadvertently modifying its HPACK encoder concurrently. This happens because the server modifies the HPACK encoder from two goroutines without synchronization: one uses the encoder to encode a HEADERS frame as part of a response sent to a client and the other modifies the encoder's table size when handling a SETTINGS frame containing SETTINGS_HEADER_TABLE_SIZE that a client sends. A malicious client can repeatedly send a request while changing the header table size to crash the server.
|
golang.org/x/net 0.48.0 (golang)
pkg:golang/golang.org/x/net@0.48.0
# dex-release.dockerfile (81:81)
COPY --from=gomplate-builder /go/bin/gomplate /usr/local/bin/gomplate

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.692% | | EPSS Percentile | 51st percentile |
Description
The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.
This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.574% | | EPSS Percentile | 46th percentile |
Description
The HTTP/2 server can refund connection-level flow control twice for the same data: Once when a client resets a stream (refunding data for any sent-but-unread portion of the stream), and again when a request handler reads the buffered data. A malicious client can exploit this to bypass the configured connection-level flow control limit (MaxReceiveBufferPerConnection). Total buffered data is still limited by the concurrent stream limit and stream-level flow control.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.568% | | EPSS Percentile | 45th percentile |
Description
A malicious HTTP/2 peer can cause excessive CPU consumption in the client or server by opening a large number of streams and then sending many small SETTINGS frames containing SETTINGS_INITIAL_WINDOW_SIZE values.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.303% | | EPSS Percentile | 21st percentile |
Description
Historically, we have been rather lax about malformed framing-related headers in our HTTP/2 implementation, as they cannot interfere with HTTP/2 framing. However, this makes it possible for our HTTP/2 implementation to forward responses containing such headers to an HTTP/1 client when acting as a reverse proxy. If the HTTP/1 client also does not behave strictly enough, this can result in response smuggling.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.570% | | EPSS Percentile | 46th percentile |
Description
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.

| Affected range | <0.56.0 | | Fixed version | 0.56.0 | | EPSS Score | 0.549% | | EPSS Percentile | 44th percentile |
Description
Parsing an invalid SVCB or HTTPS RR can panic when the size of a parameter value overflows the message buffer.

| Affected range | <0.53.0 | | Fixed version | 0.53.0 | | EPSS Score | 0.781% | | EPSS Percentile | 55th percentile |
Description
When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.
Uncontrolled Resource Consumption
| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.460% | | EPSS Percentile | 38th percentile |
Description
In Go Net (golang.org/x/net) before verion 0.55.0, parsing arbitrary HTML can consume excessive CPU time, possibly leading to denial of service.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.333% | | EPSS Percentile | 25th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 0.223% | | EPSS Percentile | 12th percentile |
Description
Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

| Affected range | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.181% | | EPSS Percentile | 7th percentile |
Description
HTTP/2 servers could end up crashing due to inadvertently modifying its HPACK encoder concurrently. This happens because the server modifies the HPACK encoder from two goroutines without synchronization: one uses the encoder to encode a HEADERS frame as part of a response sent to a client and the other modifies the encoder's table size when handling a SETTINGS frame containing SETTINGS_HEADER_TABLE_SIZE that a client sends. A malicious client can repeatedly send a request while changing the header table size to crash the server.
|
google.golang.org/grpc 1.79.1 (golang)
pkg:golang/google.golang.org/grpc@1.79.1
# dex-release.dockerfile (68:68)
FROM dexidp/dex:${DEX_VERSION}-alpine
Improper Authorization
| Affected range | <1.79.3 | | Fixed version | 1.79.3 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 1.625% | | EPSS Percentile | 75th percentile |
Description
Impact
What kind of vulnerability is it? Who is impacted?
It is an Authorization Bypass resulting from Improper Input Validation of the HTTP/2 :path pseudo-header.
The gRPC-Go server was too lenient in its routing logic, accepting requests where the :path omitted the mandatory leading slash (e.g., Service/Method instead of /Service/Method). While the server successfully routed these requests to the correct handler, authorization interceptors (including the official grpc/authz package) evaluated the raw, non-canonical path string. Consequently, "deny" rules defined using canonical paths (starting with /) failed to match the incoming request, allowing it to bypass the policy if a fallback "allow" rule was present.
Who is impacted?
This affects gRPC-Go servers that meet both of the following criteria:
- They use path-based authorization interceptors, such as the official RBAC implementation in
google.golang.org/grpc/authz or custom interceptors relying on info.FullMethod or grpc.Method(ctx).
- Their security policy contains specific "deny" rules for canonical paths but allows other requests by default (a fallback "allow" rule).
The vulnerability is exploitable by an attacker who can send raw HTTP/2 frames with malformed :path headers directly to the gRPC server.
Patches
Has the problem been patched? What versions should users upgrade to?
Yes, the issue has been patched. The fix ensures that any request with a :path that does not start with a leading slash is immediately rejected with a codes.Unimplemented error, preventing it from reaching authorization interceptors or handlers with a non-canonical path string.
Users should upgrade to the following versions (or newer):
- v1.79.3
- The latest master branch.
It is recommended that all users employing path-based authorization (especially grpc/authz) upgrade as soon as the patch is available in a tagged release.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
While upgrading is the most secure and recommended path, users can mitigate the vulnerability using one of the following methods:
1. Use a Validating Interceptor (Recommended Mitigation)
Add an "outermost" interceptor to your server that validates the path before any other authorization logic runs:
func pathValidationInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
if info.FullMethod == "" || info.FullMethod[0] != '/' {
return nil, status.Errorf(codes.Unimplemented, "malformed method name")
}
return handler(ctx, req)
}
s := grpc.NewServer(
grpc.ChainUnaryInterceptor(pathValidationInterceptor, authzInterceptor),
)
2. Infrastructure-Level Normalization
If your gRPC server is behind a reverse proxy or load balancer (such as Envoy, NGINX, or an L7 Cloud Load Balancer), ensure it is configured to enforce strict HTTP/2 compliance for pseudo-headers and reject or normalize requests where the :path header does not start with a leading slash.
3. Policy Hardening
Switch to a "default deny" posture in your authorization policies (explicitly listing all allowed paths and denying everything else) to reduce the risk of bypasses via malformed inputs.
Uncaught Exception
| Affected range | <1.82.1 | | Fixed version | 1.82.1 | | CVSS Score | 8.8 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N |
Description
Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:
- Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing
Metadata or RequestedServerName fields.
- Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
- Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing
NOT rules around unsupported fields.
Impact
What kind of vulnerability is it? Who is impacted?
- Affected Component: xDS RBAC
- Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported
permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
- If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
- If these unsupported rules were nested inside logical
NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.
As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.
HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
- Affected Component: HTTP/2 transport
- Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as
SETTINGS ACKs or server-initiated RST_STREAMs.
When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).
Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
- Affected Component: xDS RBAC
- Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a
NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.
An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).
Patches
Has the problem been patched? What versions should users upgrade to?
All three issues have been fixed in master and will be released in 1.82.1 shortly.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:
- For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing
Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
- For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2
max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.
Severity
| Vulnerability | Qualitative Severity | Approximate CVSS v3.1 Score | Primary Impact |
|---|
| xDS RBAC Authorization Bypass | High | 8.2 | Unauthorized Access / Fail-Open | | HTTP/2 Rapid Reset DOS Bypass | High | 7.5 | High CPU Consumption / Denial of Service | | xDS RBAC Engine Server Panic | Medium | 5.9 | Process Crash / Denial of Service |
Improper Validation of Array Index
| Affected range | <1.82.2 | | Fixed version | 1.82.2 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X | | EPSS Score | 0.641% | | EPSS Percentile | 49th percentile |
Description
A vulnerability exists in gRPC-Go servers configured with xds.NewGRPCServer() where a crafted request missing both :authority and Host headers can cause a server panic, resulting in a Denial of Service (DoS).
Servers built with xds.NewGRPCServer install an xDS routing interceptor on every RPC. This interceptor looks up the request’s :authority header to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither :authority nor Host. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.
This panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.
- Insecure/Standard TLS: If the server permits insecure (plaintext) connections or standard credentials (where client certs are not checked), any unauthenticated remote attacker can trigger the crash.
- mTLS / ALTS: If strict transport-level authentication is enforced at the network edge or transport layer (e.g., requiring a valid client certificate), the attacker must possess valid transport credentials to initiate the stream and trigger the panic.
Impact
An attacker can cause a complete outage of the gRPC server by sending a request missing both :authority and Host headers, provided they can successfully establish a transport connection.
Patches
The issue has been addressed in master (and backported to 1.84.0, 1.83.2 and 1.82.2). The fix updates the HTTP/2 transport layer to reject requests missing both :authority and Host headers early, maintaining consistency with and other gRPC language implementations.
Uncontrolled Resource Consumption
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N | | EPSS Score | 0.609% | | EPSS Percentile | 48th percentile |
Description
Impact
An unauthenticated remote attacker can initiate a gRPC stream and purposefully fragment their payload into millions of tiny (e.g., 1-byte) HTTP/2 DATA frames. Even if the total payload volume falls within the configured connection and stream flow-control windows, each independent fragment incurs memory overhead due to internal tracking structures and queue allocation.
Repeated fragmentation massively inflates the heap space consumed by the stream. An attacker multiplexing multiple concurrent streams can exhaust the memory bounds of the runtime, forcing a runtime panic or OutOfMemory condition and leading to a remote Denial of Service (DoS).
Patches
The change to fix this issue is merged in master and a patch release, 1.83.1, has been published that contains this fix.
Workarounds
This vulnerability is mitigated by implementing receive buffer compaction. Consecutive small data buffers are automatically coalesced into larger buffers from a shared pool once the overhead is perceived to be excessive relative to actual payload data, drastically minimizing per-frame memory overheads.
This behavior is enabled by default. A temporary escape hatch is provided via the environment variable GRPC_GO_EXPERIMENTAL_ENABLE_RECEIVE_BUFFER_COMPACTION=false to disable the feature if unforeseen issues arise, but it will be removed in a future release.
Improper Handling of Case Sensitivity
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 6.3 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N | | EPSS Score | 0.311% | | EPSS Percentile | 22nd percentile |
Description
Summary
A vulnerability in the xDS RBAC HTTP filter implementation in grpc-go allows remote attackers to bypass authorization policies (specifically DENY rules) by using mixed-case or canonical-case header matchers (e.g., X-Role instead of x-role). Additionally, the safety guards introduced by gRFC A41 to block grpc- prefixed headers can be evaded via variations in casing (e.g., Grpc-Status).
Impact
When an operator defines an RBAC policy referencing headers containing uppercase letters (e.g. X-Role), grpc-go fails to match incoming metadata keys because they are unconditionally lowercased. Because of this case-sensitivity mismatch, a policy designed to block requests containing specific header values fails open: the rule is evaluated as a non-match, and traffic that should have been rejected is served.
Furthermore, gRFC A41 requires rejecting configuration schemas specifying header matchers starting with grpc-. Because this check is executed case-sensitively in grpc-go, attackers can bypass the validation by specifying titles like Grpc-Status.
Patches
The problem is fixed in master and in the 1.83.1 release.
|
google.golang.org/grpc 1.77.0 (golang)
pkg:golang/google.golang.org/grpc@1.77.0
# dex-release.dockerfile (68:68)
FROM dexidp/dex:${DEX_VERSION}-alpine
Improper Authorization
| Affected range | <1.79.3 | | Fixed version | 1.79.3 | | CVSS Score | 9.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N | | EPSS Score | 1.625% | | EPSS Percentile | 75th percentile |
Description
Impact
What kind of vulnerability is it? Who is impacted?
It is an Authorization Bypass resulting from Improper Input Validation of the HTTP/2 :path pseudo-header.
The gRPC-Go server was too lenient in its routing logic, accepting requests where the :path omitted the mandatory leading slash (e.g., Service/Method instead of /Service/Method). While the server successfully routed these requests to the correct handler, authorization interceptors (including the official grpc/authz package) evaluated the raw, non-canonical path string. Consequently, "deny" rules defined using canonical paths (starting with /) failed to match the incoming request, allowing it to bypass the policy if a fallback "allow" rule was present.
Who is impacted?
This affects gRPC-Go servers that meet both of the following criteria:
- They use path-based authorization interceptors, such as the official RBAC implementation in
google.golang.org/grpc/authz or custom interceptors relying on info.FullMethod or grpc.Method(ctx).
- Their security policy contains specific "deny" rules for canonical paths but allows other requests by default (a fallback "allow" rule).
The vulnerability is exploitable by an attacker who can send raw HTTP/2 frames with malformed :path headers directly to the gRPC server.
Patches
Has the problem been patched? What versions should users upgrade to?
Yes, the issue has been patched. The fix ensures that any request with a :path that does not start with a leading slash is immediately rejected with a codes.Unimplemented error, preventing it from reaching authorization interceptors or handlers with a non-canonical path string.
Users should upgrade to the following versions (or newer):
- v1.79.3
- The latest master branch.
It is recommended that all users employing path-based authorization (especially grpc/authz) upgrade as soon as the patch is available in a tagged release.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
While upgrading is the most secure and recommended path, users can mitigate the vulnerability using one of the following methods:
1. Use a Validating Interceptor (Recommended Mitigation)
Add an "outermost" interceptor to your server that validates the path before any other authorization logic runs:
func pathValidationInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
if info.FullMethod == "" || info.FullMethod[0] != '/' {
return nil, status.Errorf(codes.Unimplemented, "malformed method name")
}
return handler(ctx, req)
}
s := grpc.NewServer(
grpc.ChainUnaryInterceptor(pathValidationInterceptor, authzInterceptor),
)
2. Infrastructure-Level Normalization
If your gRPC server is behind a reverse proxy or load balancer (such as Envoy, NGINX, or an L7 Cloud Load Balancer), ensure it is configured to enforce strict HTTP/2 compliance for pseudo-headers and reject or normalize requests where the :path header does not start with a leading slash.
3. Policy Hardening
Switch to a "default deny" posture in your authorization policies (explicitly listing all allowed paths and denying everything else) to reduce the risk of bypasses via malformed inputs.
Uncaught Exception
| Affected range | <1.82.1 | | Fixed version | 1.82.1 | | CVSS Score | 8.8 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N |
Description
Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:
- Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing
Metadata or RequestedServerName fields.
- Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
- Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing
NOT rules around unsupported fields.
Impact
What kind of vulnerability is it? Who is impacted?
- Affected Component: xDS RBAC
- Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported
permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
- If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
- If these unsupported rules were nested inside logical
NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.
As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.
HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
- Affected Component: HTTP/2 transport
- Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as
SETTINGS ACKs or server-initiated RST_STREAMs.
When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).
Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
- Affected Component: xDS RBAC
- Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a
NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.
An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).
Patches
Has the problem been patched? What versions should users upgrade to?
All three issues have been fixed in master and will be released in 1.82.1 shortly.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:
- For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing
Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
- For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2
max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.
Severity
| Vulnerability | Qualitative Severity | Approximate CVSS v3.1 Score | Primary Impact |
|---|
| xDS RBAC Authorization Bypass | High | 8.2 | Unauthorized Access / Fail-Open | | HTTP/2 Rapid Reset DOS Bypass | High | 7.5 | High CPU Consumption / Denial of Service | | xDS RBAC Engine Server Panic | Medium | 5.9 | Process Crash / Denial of Service |
Improper Validation of Array Index
| Affected range | <1.82.2 | | Fixed version | 1.82.2 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X | | EPSS Score | 0.641% | | EPSS Percentile | 49th percentile |
Description
A vulnerability exists in gRPC-Go servers configured with xds.NewGRPCServer() where a crafted request missing both :authority and Host headers can cause a server panic, resulting in a Denial of Service (DoS).
Servers built with xds.NewGRPCServer install an xDS routing interceptor on every RPC. This interceptor looks up the request’s :authority header to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither :authority nor Host. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.
This panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.
- Insecure/Standard TLS: If the server permits insecure (plaintext) connections or standard credentials (where client certs are not checked), any unauthenticated remote attacker can trigger the crash.
- mTLS / ALTS: If strict transport-level authentication is enforced at the network edge or transport layer (e.g., requiring a valid client certificate), the attacker must possess valid transport credentials to initiate the stream and trigger the panic.
Impact
An attacker can cause a complete outage of the gRPC server by sending a request missing both :authority and Host headers, provided they can successfully establish a transport connection.
Patches
The issue has been addressed in master (and backported to 1.84.0, 1.83.2 and 1.82.2). The fix updates the HTTP/2 transport layer to reject requests missing both :authority and Host headers early, maintaining consistency with and other gRPC language implementations.
Uncontrolled Resource Consumption
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N | | EPSS Score | 0.609% | | EPSS Percentile | 48th percentile |
Description
Impact
An unauthenticated remote attacker can initiate a gRPC stream and purposefully fragment their payload into millions of tiny (e.g., 1-byte) HTTP/2 DATA frames. Even if the total payload volume falls within the configured connection and stream flow-control windows, each independent fragment incurs memory overhead due to internal tracking structures and queue allocation.
Repeated fragmentation massively inflates the heap space consumed by the stream. An attacker multiplexing multiple concurrent streams can exhaust the memory bounds of the runtime, forcing a runtime panic or OutOfMemory condition and leading to a remote Denial of Service (DoS).
Patches
The change to fix this issue is merged in master and a patch release, 1.83.1, has been published that contains this fix.
Workarounds
This vulnerability is mitigated by implementing receive buffer compaction. Consecutive small data buffers are automatically coalesced into larger buffers from a shared pool once the overhead is perceived to be excessive relative to actual payload data, drastically minimizing per-frame memory overheads.
This behavior is enabled by default. A temporary escape hatch is provided via the environment variable GRPC_GO_EXPERIMENTAL_ENABLE_RECEIVE_BUFFER_COMPACTION=false to disable the feature if unforeseen issues arise, but it will be removed in a future release.
Improper Handling of Case Sensitivity
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 6.3 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N | | EPSS Score | 0.311% | | EPSS Percentile | 22nd percentile |
Description
Summary
A vulnerability in the xDS RBAC HTTP filter implementation in grpc-go allows remote attackers to bypass authorization policies (specifically DENY rules) by using mixed-case or canonical-case header matchers (e.g., X-Role instead of x-role). Additionally, the safety guards introduced by gRFC A41 to block grpc- prefixed headers can be evaded via variations in casing (e.g., Grpc-Status).
Impact
When an operator defines an RBAC policy referencing headers containing uppercase letters (e.g. X-Role), grpc-go fails to match incoming metadata keys because they are unconditionally lowercased. Because of this case-sensitivity mismatch, a policy designed to block requests containing specific header values fails open: the rule is evaluated as a non-match, and traffic that should have been rejected is served.
Furthermore, gRFC A41 requires rejecting configuration schemas specifying header matchers starting with grpc-. Because this check is executed case-sensitively in grpc-go, attackers can bypass the validation by specifying titles like Grpc-Status.
Patches
The problem is fixed in master and in the 1.83.1 release.
|
google.golang.org/grpc 1.79.3 (golang)
pkg:golang/google.golang.org/grpc@1.79.3
# dex-release.dockerfile (79:79)
COPY --from=builder /go/bin/dex /usr/local/bin/dex
Uncaught Exception
| Affected range | <1.82.1 | | Fixed version | 1.82.1 | | CVSS Score | 8.8 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N |
Description
Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:
- Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing
Metadata or RequestedServerName fields.
- Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
- Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing
NOT rules around unsupported fields.
Impact
What kind of vulnerability is it? Who is impacted?
- Affected Component: xDS RBAC
- Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported
permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
- If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
- If these unsupported rules were nested inside logical
NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.
As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.
HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
- Affected Component: HTTP/2 transport
- Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as
SETTINGS ACKs or server-initiated RST_STREAMs.
When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).
Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
- Affected Component: xDS RBAC
- Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a
NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.
An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).
Patches
Has the problem been patched? What versions should users upgrade to?
All three issues have been fixed in master and will be released in 1.82.1 shortly.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:
- For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing
Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
- For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2
max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.
Severity
| Vulnerability | Qualitative Severity | Approximate CVSS v3.1 Score | Primary Impact |
|---|
| xDS RBAC Authorization Bypass | High | 8.2 | Unauthorized Access / Fail-Open | | HTTP/2 Rapid Reset DOS Bypass | High | 7.5 | High CPU Consumption / Denial of Service | | xDS RBAC Engine Server Panic | Medium | 5.9 | Process Crash / Denial of Service |
Improper Validation of Array Index
| Affected range | <1.82.2 | | Fixed version | 1.82.2 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X | | EPSS Score | 0.641% | | EPSS Percentile | 49th percentile |
Description
A vulnerability exists in gRPC-Go servers configured with xds.NewGRPCServer() where a crafted request missing both :authority and Host headers can cause a server panic, resulting in a Denial of Service (DoS).
Servers built with xds.NewGRPCServer install an xDS routing interceptor on every RPC. This interceptor looks up the request’s :authority header to pick a virtual host. The HTTP/2 server transport previously accepted requests that had neither :authority nor Host. When this happened, the xDS routing interceptor attempted to access the first element of an empty slice of authorities, leading to an index out of bounds panic. Since the per-RPC goroutine does not recover from panics, the entire server process would terminate.
This panic occurs in the interceptor pipeline, meaning the transport credentials handshake (TLS, mTLS, or ALTS) and HTTP/2 connection establishment must complete successfully before the crafted request can reach this logic.
- Insecure/Standard TLS: If the server permits insecure (plaintext) connections or standard credentials (where client certs are not checked), any unauthenticated remote attacker can trigger the crash.
- mTLS / ALTS: If strict transport-level authentication is enforced at the network edge or transport layer (e.g., requiring a valid client certificate), the attacker must possess valid transport credentials to initiate the stream and trigger the panic.
Impact
An attacker can cause a complete outage of the gRPC server by sending a request missing both :authority and Host headers, provided they can successfully establish a transport connection.
Patches
The issue has been addressed in master (and backported to 1.84.0, 1.83.2 and 1.82.2). The fix updates the HTTP/2 transport layer to reject requests missing both :authority and Host headers early, maintaining consistency with and other gRPC language implementations.
Uncontrolled Resource Consumption
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 8.7 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N | | EPSS Score | 0.609% | | EPSS Percentile | 48th percentile |
Description
Impact
An unauthenticated remote attacker can initiate a gRPC stream and purposefully fragment their payload into millions of tiny (e.g., 1-byte) HTTP/2 DATA frames. Even if the total payload volume falls within the configured connection and stream flow-control windows, each independent fragment incurs memory overhead due to internal tracking structures and queue allocation.
Repeated fragmentation massively inflates the heap space consumed by the stream. An attacker multiplexing multiple concurrent streams can exhaust the memory bounds of the runtime, forcing a runtime panic or OutOfMemory condition and leading to a remote Denial of Service (DoS).
Patches
The change to fix this issue is merged in master and a patch release, 1.83.1, has been published that contains this fix.
Workarounds
This vulnerability is mitigated by implementing receive buffer compaction. Consecutive small data buffers are automatically coalesced into larger buffers from a shared pool once the overhead is perceived to be excessive relative to actual payload data, drastically minimizing per-frame memory overheads.
This behavior is enabled by default. A temporary escape hatch is provided via the environment variable GRPC_GO_EXPERIMENTAL_ENABLE_RECEIVE_BUFFER_COMPACTION=false to disable the feature if unforeseen issues arise, but it will be removed in a future release.
Improper Handling of Case Sensitivity
| Affected range | <=1.83.0 | | Fixed version | 1.83.1 | | CVSS Score | 6.3 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N | | EPSS Score | 0.311% | | EPSS Percentile | 22nd percentile |
Description
Summary
A vulnerability in the xDS RBAC HTTP filter implementation in grpc-go allows remote attackers to bypass authorization policies (specifically DENY rules) by using mixed-case or canonical-case header matchers (e.g., X-Role instead of x-role). Additionally, the safety guards introduced by gRFC A41 to block grpc- prefixed headers can be evaded via variations in casing (e.g., Grpc-Status).
Impact
When an operator defines an RBAC policy referencing headers containing uppercase letters (e.g. X-Role), grpc-go fails to match incoming metadata keys because they are unconditionally lowercased. Because of this case-sensitivity mismatch, a policy designed to block requests containing specific header values fails open: the rule is evaluated as a non-match, and traffic that should have been rejected is served.
Furthermore, gRFC A41 requires rejecting configuration schemas specifying header matchers starting with grpc-. Because this check is executed case-sensitively in grpc-go, attackers can bypass the validation by specifying titles like Grpc-Status.
Patches
The problem is fixed in master and in the 1.83.1 release.
|
github.com/go-git/go-git/v5 5.16.4 (golang)
pkg:golang/github.com/go-git/go-git/v5@5.16.4
# dex-release.dockerfile (81:81)
COPY --from=gomplate-builder /go/bin/gomplate /usr/local/bin/gomplate
Improper Link Resolution Before File Access ('Link Following')
| Affected range | <=5.19.1 | | Fixed version | 5.19.2 | | CVSS Score | 7.1 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:L | | EPSS Score | 0.357% | | EPSS Percentile | 27th percentile |
Description
Impact
A symlink traversal issue in go-git could allow worktree operations to modify files outside the intended worktree path.
The worktreeFilesystem wrapper rejected dangerous path strings, including paths containing .git, parent-directory components, or control characters. However, it did not prevent filesystem operations from following symbolic links that were already present in the worktree.
As a result, a path that is safe when evaluated as a string could still resolve into the repository's Git metadata directory. For example, if s is a symbolic link to .git, writing to s/config would modify .git/config.
A symbolic link at the final path component could also be followed. For example, if s points directly to .git/config, opening s for writing with truncation could overwrite the repository configuration.
Exploitation requires an attacker to be able to introduce or control a symbolic link in the worktree and cause the application to perform a write through that path.
Applications using storage/memory for their Storer, or go-billy/memfs for their Worktree, are not affected by this vulnerability.
Patches
The issue has been addressed by making the worktree filesystem wrapper a symlink-safe boundary.
Worktree operations now reject paths where an existing symbolic link in any path component could cause the operation to escape the intended worktree location, including symbolic links at the final component.
Users of filesystem-backed worktrees should upgrade to a patched version.
Credits
Thanks to @kodareef5 for reporting this issue and working with the go-git security team toward its resolution. 🥇
We would also like to thank @HughLewis20, who independently reported the same issue while a fix was already in progress.
Incorrect Behavior Order: Validate Before Canonicalize
| Affected range | <5.19.0 | | Fixed version | 5.19.0 | | CVSS Score | 7 | | CVSS Vector | CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N | | EPSS Score | 0.159% | | EPSS Percentile | 4th percentile |
Description |