golang.org/x/crypto 0.47.0 (golang)
pkg:golang/golang.org/x/crypto@0.47.0
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.556% | | EPSS Percentile | 46th 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 | 6.910% | | EPSS Percentile | 94th 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.597% | | EPSS Percentile | 48th 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.469% | | 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.683% | | 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.478% | | EPSS Percentile | 41st 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.683% | | EPSS Percentile | 52nd 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 | 37th 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 | 43rd 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 | 38th 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.473% | | EPSS Percentile | 41st 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.467% | | EPSS Percentile | 40th 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.279% | | EPSS Percentile | 20th 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.369% | | EPSS Percentile | 31st 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.412% | | EPSS Percentile | 35th 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.504% | | EPSS Percentile | 43rd 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/net 0.48.0 (golang)
pkg:golang/golang.org/x/net@0.48.0

| Affected range | <0.55.0 | | Fixed version | 0.55.0 | | EPSS Score | 1.834% | | EPSS Percentile | 79th 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.622% | | EPSS Percentile | 50th 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.490% | | EPSS Percentile | 42nd 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 | <0.60.0 | | Fixed version | 0.60.0 | | EPSS Score | 0.614% | | EPSS Percentile | 49th 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.425% | | EPSS Percentile | 37th 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.627% | | EPSS Percentile | 50th 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 | 46th 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.840% | | EPSS Percentile | 58th 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.326% | | EPSS Percentile | 26th 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.235% | | EPSS Percentile | 15th 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 | 13th 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 | 13th 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 | 13th 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.62.0 | | Fixed version | 0.62.0 | | EPSS Score | 0.202% | | EPSS Percentile | 10th percentile |
Description
In childTextNodesAreLiteral, walking up the tree previously stopped at the nearest foreign ancestor once an HTML integration point was found. However, that integration point may itself be a descendant of an element that was foster-parented into a foreign namespace (such as or fostered under ), causing a parser to resolve the subtree in a different foreign namespace upon re-parsing the rendered output.
Continue walking the full ancestor chain and verify that every transition from a non-empty namespace occurs at an HTML integration point before emitting literal text.

| Affected range | <0.62.0 | | Fixed version | 0.62.0 | | EPSS Score | 0.185% | | EPSS Percentile | 8th percentile |
Description
When coalescing adjacent text nodes in addText and fosterParent, appending to an existing TextNode's Data via string concatenation (n.Data += text) reallocated and copied the accumulated string on every token. Inputs containing many short text runs separated by ignored end tags (such as "a") caused O(n^2) allocations and byte copies.
Accumulate coalesced text in per-node byte slices during parsing and materialize Data strings once at the end of parse.
|
js-yaml 3.13.1 (npm)
pkg:npm/js-yaml@3.13.1
Inefficient Algorithmic Complexity
| Affected range | >=3.0.0 <3.15.1
| | Fixed version | 3.15.1 | | 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 |
Description
Quadratic CPU consumption in !!omap resolution (js-yaml 3.x and 4.x)
Summary
resolveYamlOmap() enforces key uniqueness for !!omap sequences with a linear
scan (objectKeys.indexOf(...)) inside the per-element loop, making resolution
O(n²) in the number of entries. A modestly sized YAML document therefore
consumes disproportionate CPU inside yaml.load(), giving a denial of service
against any consumer that parses untrusted YAML.
!!omap is registered in the default schema
(lib/schema/default.js → require('../type/omap')), so a plain
yaml.load(untrustedInput) with no options is affected — no custom schema or
non-default configuration is required.
This is the same weakness as CVE-2026-59870 / GHSA-724g-mxrg-4qvm, which was
fixed in the 5.x line in 5.2.1. That fix was never backported: both currently
maintained legacy lines still carry the original implementation.
Affected versions
| Line | Latest tested | Status |
|---|
| 3.x | 3.15.0 | Affected — objectKeys.indexOf(pairKey) at lib/type/omap.js:29 | | 4.x | 4.3.0 | Affected — objectKeys.indexOf(pairKey) at lib/type/omap.js:30 | | 5.x | 5.2.2 | Not affected — fixed in 5.2.1 (uses a Set) |
Both figures are the newest release of each line at the time of writing, so
this is not a "you are on an old version" issue.
Details
lib/type/omap.js (js-yaml 4.3.0):
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey)
else return false
objectKeys grows by one element per entry, and Array.prototype.indexOf is a
linear scan, so resolving an n-entry !!omap performs roughly
1 + 2 + … + n comparisons — quadratic in n. The work happens synchronously
inside yaml.load(), blocking the event loop for its whole duration.
The 5.x line already solves exactly this by tracking seen keys in a Set
(src/tag/sequence/omap.ts):
if (carrier.seen.has(key)) return 'duplicate key in ordered map'
carrier.seen.add(key)
Proof of concept
const yaml = require('js-yaml');
const doc = n => '!!omap\n' + Array.from({length: n}, (_, i) => `- k${i}: ${i}`).join('\n') + '\n';
for (const n of [10000, 20000, 40000, 80000]) {
const d = doc(n), t = Date.now();
yaml.load(d);
console.log(`n=${n} bytes=${d.length} load=${Date.now() - t}ms`);
}
Measured (node v20.20.2, default heap, no flags)
js-yaml 4.3.0
n=10000 bytes=137787 load=54ms
n=20000 bytes=297787 load=169ms
n=40000 bytes=617787 load=646ms
n=80000 bytes=1257787 load=2607ms
js-yaml 3.15.0
n=10000 bytes=137787 load=53ms
n=20000 bytes=297787 load=166ms
n=40000 bytes=617787 load=641ms
n=80000 bytes=1257787 load=2567ms
Runtime grows by a factor of ~4 for each doubling of n, which is the
signature of O(n²) (linear growth would be ~2×).
Scaling further: a 2.48 MB document with 150,000 entries blocked
yaml.load() for 10.8 seconds.
Impact
Any service that parses attacker-influenced YAML with js-yaml 3.x or 4.x can be
stalled with a small input. Because the loop is synchronous, a single request
blocks the Node.js event loop and stalls every other request in the process —
so the amplification is per-process, not just per-request.
Suggested severity: consistent with CVE-2026-59870 (the same weakness in
5.x), i.e. Availability-only impact, network attack vector, no privileges or
user interaction required.
Suggested fix
Mirror the 5.x fix — replace the linear scan with a Set:
const seen = new Set()
if (seen.has(pairKey)) return false
seen.add(pairKey)
This preserves the existing duplicate-key rejection semantics exactly while
making resolution O(n). A maxOmapLength-style cap would also work, but the
Set matches what 5.x already ships and requires no new option.
References
- CVE-2026-59870 / GHSA-724g-mxrg-4qvm — same weakness in 5.0.0–5.2.0, fixed in 5.2.1
lib/type/omap.js (3.x, 4.x) — the affected resolver
lib/schema/default.js — registers !!omap in the default schema
Discovery
Found by an automated static-analysis and executed-proof-of-concept scanner run
against js-yaml 4.2.0, then manually verified against 3.15.0 and 4.3.0 by
executing the proof of concept above. All timings in this report were measured
on the current releases of each line, not on the version originally scanned.
Uncontrolled Resource Consumption
| Affected range | >=3.0.0 <3.15.2
| | Fixed version | 3.15.2 | | 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.541% | | EPSS Percentile | 45th percentile |
Description
Summary
maxTotalMergeKeys does not count empty mappings. An attacker can repeatedly merge a large sequence of them and consume significant CPU without reaching the configured limit.
Example
arr: &arr [{}, {}, {}, ...]
targets:
- <<: *arr
For every target, the loader iterates all N elements of arr. This results in O(N * K) work while totalMergeKeys remains unchanged.
PoC
import { performance } from 'node:perf_hooks'
import { load, YAML11_SCHEMA } from 'js-yaml'
const n = 20000
const src =
'arr: &arr [' + '{},'.repeat(n).slice(0, -1) + ']\n' +
'targets:\n' +
' - <<: *arr\n'.repeat(n)
const started = performance.now()
load(src, { schema: YAML11_SCHEMA })
console.log(`${(performance.now() - started).toFixed(1)} ms`)
Observed results:
| N | YAML size | Time |
|---|
| 800 | ~13 KB | ~20 ms | | 3200 | ~50 KB | ~180 ms | | 20000 | ~500 KB | ~13 s |
Impact
An attacker can submit a relatively small YAML document that causes prolonged CPU consumption despite the default maxTotalMergeKeys limit.
Fix
Count each merge-source mapping as one budget unit, in addition to counting its keys.
Difference with v5
In v3 & v4, merge is enabled by default. So, the severity score is higher.
Uncontrolled Resource Consumption
| Affected range | >=3.0.0 <3.15.0
| | Fixed version | 3.15.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.585% | | EPSS Percentile | 48th percentile |
Description
Impact
js-yaml can spend quadratic CPU time parsing a document whose size grows only linearly. The issue is triggered by a chain of mappings where each mapping merges the previous one:
a0: &a0 { k0: 0 }
a1: &a1 { <<: *a0, k1: 1 }
a2: &a2 { <<: *a1, k2: 2 }
a3: &a3 { <<: *a2, k3: 3 }
...
b: *aN
For each new mapping, the loader has to enumerate the keys inherited from the previous mapping. With N chained mappings, this results in roughly 1 + 2 + ... + N merged-key visits, i.e., O(N^2) work for O(N) input size.
PoC
From N = 4000 delay become > 1s (doc size < 100K)
import { performance } from 'node:perf_hooks'
import { Buffer } from 'node:buffer'
import { load, YAML11_SCHEMA } from 'js-yaml'
const n = Number(process.argv[2] || 4000)
function makeMergeChain (count) {
const lines = ['a0: &a0 { k0: 0 }']
for (let i = 1; i < count; i++) {
lines.push(`a${i}: &a${i} { <<: *a${i - 1}, k${i}: ${i} }`)
}
lines.push(`b: *a${count - 1}`)
return `${lines.join('\n')}\n`
}
const source = makeMergeChain(n)
console.log(source.split('\n').slice(0, 8).join('\n'))
console.log('...')
console.log(source.split('\n').slice(-4).join('\n'))
console.log()
console.log(`N: ${n}`)
console.log(`YAML size: ${Buffer.byteLength(source)} bytes`)
const started = performance.now()
const result = load(source, { schema: YAML11_SCHEMA })
const elapsed = performance.now() - started
console.log(`parse time: ${elapsed.toFixed(1)} ms`)
console.log(`top-level keys: ${Object.keys(result).length}`)
console.log(`b keys: ${Object.keys(result.b).length}`)
Patches
Fix released. The most robust protection is to limit the total number of merged keys per parse call. This should close all past and future edge cases with merge. The default 10K-key limit should be okay in most cases.
Inefficient Algorithmic Complexity
| Affected range | <3.15.0 | | Fixed version | 4.2.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.415% | | EPSS Percentile | 36th percentile |
Description
Summary
A crafted YAML document can trigger algorithmic CPU exhaustion in js-yaml merge-key processing (<<) by repeating the same alias many times in a merge sequence.
This causes quadratic parse-time behavior relative to input size and can block a Node.js worker/event loop for seconds with a relatively small payload (tens of KB), resulting in denial of service.
Details
The issue is in merge handling inside lib/loader.js:
storeMappingPair(...) iterates every element of a merge sequence when key tag is tag:yaml.org,2002:merge.
- For each element, it calls
mergeMappings(...).
mergeMappings(...) computes Object.keys(source) and performs _hasOwnProperty.call(destination, key) checks for each key.
When input is of the form:
a: &a {k0:0, k1:0, ..., kK:0}
b: {<<: [*a, *a, *a, ... repeated M times ...]}
all *a entries refer to the same anchored object. After the first merge, subsequent merges are semantically no-ops, but the parser still reprocesses all keys each time.
Resulting work is O(K * M), while input size is O(K + M), giving quadratic scaling as payload grows.
Relevant code path:
lib/loader.js in storeMappingPair(...) merge branch (keyTag === 'tag:yaml.org,2002:merge')
lib/loader.js mergeMappings(...)
Root cause
File: lib/loader.js
Function: storeMappingPair(state, _result, overridableKeys, keyTag, keyNode,
valueNode, startLine, startLineStart, startPos)
Lines: ~359-366
if (keyTag === 'tag:yaml.org,2002:merge') {
if (Array.isArray(valueNode)) {
for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
mergeMappings(state, _result, valueNode[index], overridableKeys);
}
} else {
mergeMappings(state, _result, valueNode, overridableKeys);
}
}
When the merge value is a sequence (YAML 1.1 <<: [ *a, *a, ... ]), each element
is handed to mergeMappings() without deduplication. mergeMappings() then does
sourceKeys = Object.keys(source);
for (index = 0; index < sourceKeys.length; index += 1) {
key = sourceKeys[index];
if (!_hasOwnProperty.call(destination, key)) {
setProperty(destination, key, source[key]);
overridableKeys[key] = true;
}
}
Every alias reference in the sequence resolves (by design) to the SAME object
via state.anchorMap. After the first merge, every subsequent merge of that same
reference is a pure no-op semantically, but still performs:
- one Object.keys(source) call (O(K))
- K _hasOwnProperty.call checks on the destination
Total: M * K hasOwnProperty checks + M Object.keys allocations, while the final
object and all observable side effects are identical to a single merge.
YAML semantics for <<: are idempotent and commutative over duplicate sources,
so collapsing duplicates preserves behavior exactly; this isn't a spec trade-off.
PoC
Environment:
js-yaml version: 4.1.1
Node.js: v24.5.0
Platform: arm64 macOS (reproduced consistently)
Reproduction script:
Create many keys in one anchored map (&a).
Merge that same alias repeatedly via <<: [*a, *a, ...].
Measure parse time and compare with control payload using single merge (<<: *a).
Observed repeated runs (same machine):
K=M=1000, input 9,909 bytes: ~33–36 ms
K=M=2000, input 20,909 bytes: ~121–123 ms
K=M=4000, input 42,909 bytes: ~524–537 ms
K=M=6000, input 64,909 bytes: ~1,608–1,829 ms
K=M=8000, input 86,909 bytes: ~3,395–3,565 ms
Control (single merge, similar key counts):
K=2000: ~1–2 ms
K=4000: ~3 ms
K=8000: ~5 ms
Also verified: repeated-merge output equals single-merge output (same key count and same JSON), confirming excess time is redundant computation.
Impact
This is a denial-of-service vulnerability (CPU exhaustion / algorithmic complexity).
Any service parsing untrusted YAML with js-yaml can be impacted, including API backends, CI tools, config processors, and automation services. An attacker can submit crafted YAML to significantly increase CPU time and reduce availability.
Suggested fix:
Dedupe the merge source list by reference before invoking mergeMappings. Any of
the following are minimal and preserve YAML 1.1 merge semantics:
dedupe in storeMappingPair:
if (keyTag === 'tag:yaml.org,2002:merge') {
if (Array.isArray(valueNode)) {
var seen = new Set();
for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
var src = valueNode[index];
if (seen.has(src)) continue; // idempotent; skip redundant alias
seen.add(src);
mergeMappings(state, _result, src, overridableKeys);
}
} else {
mergeMappings(state, _result, valueNode, overridableKeys);
}
}
Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')
| Affected range | <3.14.2 | | Fixed version | 4.1.1 | | CVSS Score | 5.3 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N | | EPSS Score | 0.423% | | EPSS Percentile | 36th percentile |
Description
Impact
In js-yaml 4.1.0, 4.0.0, and 3.14.1 and below, it's possible for an attacker to modify the prototype of the result of a parsed yaml document via prototype pollution (__proto__). All users who parse untrusted yaml documents may be impacted.
Patches
Problem is patched in js-yaml 4.1.1 and 3.14.2.
Workarounds
You can protect against this kind of attack on the server by using node --disable-proto=delete or deno (in Deno, pollution protection is on by default).
References
https://cheatsheetseries.owasp.org/cheatsheets/Prototype_Pollution_Prevention_Cheat_Sheet.html
|
golang.org/x/text 0.33.0 (golang)
pkg:golang/golang.org/x/text@0.33.0

| Affected range | <0.39.0 | | Fixed version | 0.39.0 | | EPSS Score | 0.475% | | EPSS Percentile | 41st percentile |
Description
A norm.Iter can enter an infinite loop when handling input containing invalid UTF-8 bytes.

| Affected range | <0.41.0 | | Fixed version | 0.41.0 | | EPSS Score | 0.466% | | EPSS Percentile | 40th percentile |
Description
The Nickname profile can panic with an out-of-bounds slice error when transforming crafted input into a short destination buffer.
|
github.com/klauspost/compress 1.17.8 (golang)
pkg:golang/github.com/klauspost/compress@1.17.8
Integer Overflow or Wraparound
| Affected range | <=1.18.6 | | Fixed version | 1.18.7 | | 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.501% | | EPSS Percentile | 43rd percentile |
Description
Signed Integer Overflow in s2.NewDict
Summary
A signed integer overflow vulnerability in s2.NewDict() allows an attacker to bypass repeat index validation by supplying a dictionary with a uvarint-encoded repeat value exceeding MaxInt64. When Dict.Encode() is subsequently called, the overflowed negative repeat value causes an out-of-bounds memory access via unsafe.Pointer arithmetic, crashing the process with SIGSEGV.
Package
- Name:
github.com/klauspost/compress/s2
- Ecosystem: Go
- Affected versions: <= v1.18.6 (all versions with
NewDict function)
Severity
High (7.5) — CVSS v3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Vulnerability
Type
- CWE-190: Integer Overflow or Wraparound
- CWE-787: Out-of-bounds Write (via unsafe.Pointer)
Description
The NewDict() function reads a uvarint from dictionary data and converts it to int:
r, n := binary.Uvarint(dict)
d.repeat = int(r)
if d.repeat > len(dict) {
return nil
}
When r exceeds MaxInt64 (9223372036854775807), int(r) overflows to a negative value. Since a negative number is never greater than a positive length, the validation check is bypassed.
When Dict.Encode() is called, the negative repeat value causes an integer overflow in encodeBlockDictGo():
repeat := len(dict.dict) - dict.repeat
candidate := len(dict.dict) - repeat + s
load32(dict.dict, candidate)
load32 calls le.Load32 which uses unsafe.Pointer arithmetic without bounds checking:
func Load32[I Indexer](b []byte, i I) uint32 {
return *(*uint32)(unsafe.Add(unsafe.Pointer(unsafe.SliceData(b)), i))
}
This causes a segmentation fault (SIGSEGV) when the negative index is dereferenced.
PoC
package main
import (
"encoding/binary"
"fmt"
"github.com/klauspost/compress/s2"
)
func main() {
var dictData []byte
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, 12687765596934209639)
dictData = append(dictData, buf[:n]...)
dictData = append(dictData, make([]byte, 16)...)
dict := s2.NewDict(dictData)
src := make([]byte, 64)
for i := range src { src[i] = byte(i) }
dict.Encode(nil, src)
}
Impact
- Denial of Service: The process crashes immediately with SIGSEGV
Attack Vector
Any application that:
- Accepts user-supplied S2 dictionary data via
s2.NewDict()
- Calls
Dict.Encode() on any data ≥32 bytes
Suggested Fix
Validate the uvarint value before converting to int:
if r > math.MaxInt64 {
return nil
}
d.repeat = int(r)
Or use uint for the repeat field and validate against uint(len(dict)).
References
- Source:
s2/dict.go lines 59-61 (vulnerability), s2/encode_all.go line 947 (crash site)
- Commit: 539243b (v1.18.6 + 4 commits)
Credits
Christopher Linke / https://github.com/celinke97/
|
libbrotli1 1.1.0-2build2 (deb)
pkg:deb/ubuntu/libbrotli1@1.1.0-2build2?arch=arm64&distro=ubuntu-24.04&upstream=brotli

| Affected range | <1.1.0-2ubuntu0.1 | | Fixed version | 1.1.0-2ubuntu0.1 | | EPSS Score | 87.988% | | EPSS Percentile | 100th percentile |
Description
A buffer overflow vulnerability in the Brotli decoder (c/dec/decode.c) in Google Brotli versions 1.0.3 through 1.2.0 on all platforms allows a remote unauthenticated attacker to corrupt adjacent decoder state memory, disclose sensitive memory contents, cause a denial of service, or potentially execute arbitrary code using a crafted Brotli-compressed stream. Users need to update any Brotli libraries or binaries between 1.0.3 through 1.2.0 to the latest available version: 1.0.10 or 1.1.1 or 1.2.1.
|
libpcre2-8-0 10.42-4ubuntu2.1 (deb)
pkg:deb/ubuntu/libpcre2-8-0@10.42-4ubuntu2.1?arch=arm64&distro=ubuntu-24.04&upstream=pcre2

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 7.8 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | | EPSS Score | 0.126% | | EPSS Percentile | 2nd percentile |
Description
In PCRE2 before 10.48, pcre2_jit_match mishandles a previously copied subject being passed in as a context. An incorrect free operation can occur.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 7.4 | | CVSS Vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H | | EPSS Score | 0.348% | | EPSS Percentile | 28th percentile |
Description
PCRE2 before 10.48, on 32-bit platforms, has a pcre2_pattern_convert out-of-bounds write when an attacker can provide a large pattern.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L | | EPSS Score | 0.268% | | EPSS Percentile | 19th percentile |
Description
PCRE2 before 10.48 has a pcre2_match out-of-bounds read during the PCRE2_MATCH_INVALID_UTF matching of an invalid UTF subject.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 6.5 | | CVSS Vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:L | | EPSS Score | 0.247% | | EPSS Percentile | 16th percentile |
Description
PCRE2 before 10.48, on 32-bit platforms, has a pcre2_compile_32 integer overflow and resultant out-of-bounds write.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.9 | | CVSS Vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.294% | | EPSS Percentile | 22nd percentile |
Description
PCRE2 before 10.48 has a pcre2_match out-of-bounds read after a JIT fallback when an attacker can provide invalid UTF data.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.425% | | EPSS Percentile | 37th percentile |
Description
PCRE2 before 10.48 allows a pcre2_dfa_match out-of-bounds write because reuse of a cached workspace block, in a recursive DFA matching workspace, lacks a size check (even though a newly allocated block, for the same purpose, does have a size check). This outcome requires an attacker-controlled regular expression, or a recursive pattern in conjunction with a small heap limit (this can be set through the API).

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.269% | | EPSS Percentile | 19th percentile |
Description
PCRE2 before 10.49, when there is an attacker-controlled regular expression and certain JIT API usage, allows an out-of-bounds write with arbitrary data.
|
libgnutls30t64 3.8.3-1.1ubuntu3.6 (deb)
pkg:deb/ubuntu/libgnutls30t64@3.8.3-1.1ubuntu3.6?arch=arm64&distro=ubuntu-24.04&upstream=gnutls28

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.156% | | EPSS Percentile | 5th percentile |
Description
Improper certificate validation in gnutls v3.8.13 causes the application to accept certificates containing invalid extensions.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.241% | | EPSS Percentile | 15th percentile |
Description
An issue in gnutls v3.8.13 causes legitimate CA certificates to be rejected, leading to a Denial of Service (DoS).

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.165% | | EPSS Percentile | 6th percentile |
Description
Improper certificate validation in gnutls v3.8.13 causes the application to reject legitimate certificates for valid users, leading to a Denial of Service (DoS).

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.203% | | EPSS Percentile | 10th percentile |
Description
Incomplete X.509 implementation in GnuTLS v3.8.13 allows attackers controlling a subordinate Certificate Authority to bypass cross-domain PKI restrictions and issue unauthorized certificates.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.208% | | EPSS Percentile | 11th percentile |
Description
A hostname verification bypass in GnuTLS v3.8.13 allows attackers to circumvent the Common Name fallback mechanism and eavesdrop on communications via a crafted certificate.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.151% | | EPSS Percentile | 4th percentile |
Description
An issue in gnutls v.3.8.13 allows an attacker to obtain sensitive information via failing to reject end-entity X.509 certificates that contain a contradictory combination of Key Usage (KU) and Extended Key Usage (EKU)
|
jq 1.7.1-3ubuntu0.24.04.2 (deb)
pkg:deb/ubuntu/jq@1.7.1-3ubuntu0.24.04.2?arch=arm64&distro=ubuntu-24.04

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.161% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.2rc1 and earlier, the ordinary module loader recurses without cycle detection when two otherwise valid modules include each other.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.154% | | EPSS Percentile | 4th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, unbounded recursion in jv_object_merge_recursive() allows a crafted jq program to crash the process with a segfault. The function is reachable through the * operator when both operands are objects.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.142% | | EPSS Percentile | 3rd percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, the jq bytecode VM's data stack tracks its allocation size in a signed int. When the stack grows beyond ≈1 GiB (via deeply nested generator forks), the doubling arithmetic overflows. The wrapped value is passed to realloc and then used for a memmove with attacker-influenced offsets.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.157% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, jq accepts embedded NUL bytes in import paths at the jq-language level, but later resolves those paths through C string operations during module and data-file lookup. This creates a mismatch between the logical import string that policy or audit code may validate and the on-disk path that jq actually opens.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.158% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, Top-level jq programs loaded from a file with -f are truncated at the first embedded NUL byte on current upstream HEAD. A crafted filter file such as . followed by \x00 and arbitrary suffix compiles and executes as only the prefix before the NUL. This leaves jq with a post-CVE-2026-33948 prefix/full-buffer mismatch on the compilation path even though the JSON parser path has already been fixed.
|
libjq1 1.7.1-3ubuntu0.24.04.2 (deb)
pkg:deb/ubuntu/libjq1@1.7.1-3ubuntu0.24.04.2?arch=arm64&distro=ubuntu-24.04&upstream=jq

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.161% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.2rc1 and earlier, the ordinary module loader recurses without cycle detection when two otherwise valid modules include each other.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H | | EPSS Score | 0.154% | | EPSS Percentile | 4th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, unbounded recursion in jv_object_merge_recursive() allows a crafted jq program to crash the process with a segfault. The function is reachable through the * operator when both operands are objects.

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.142% | | EPSS Percentile | 3rd percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, the jq bytecode VM's data stack tracks its allocation size in a signed int. When the stack grows beyond ≈1 GiB (via deeply nested generator forks), the doubling arithmetic overflows. The wrapped value is passed to realloc and then used for a memmove with attacker-influenced offsets.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.157% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, jq accepts embedded NUL bytes in import paths at the jq-language level, but later resolves those paths through C string operations during module and data-file lookup. This creates a mismatch between the logical import string that policy or audit code may validate and the on-disk path that jq actually opens.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.158% | | EPSS Percentile | 5th percentile |
Description
jq is a command-line JSON processor. In 1.8.1 and earlier, Top-level jq programs loaded from a file with -f are truncated at the first embedded NUL byte on current upstream HEAD. A crafted filter file such as . followed by \x00 and arbitrary suffix compiles and executes as only the prefix before the NUL. This leaves jq with a post-CVE-2026-33948 prefix/full-buffer mismatch on the compilation path even though the JSON parser path has already been fixed.
|
libc6 2.39-0ubuntu8.9 (deb)
pkg:deb/ubuntu/libc6@2.39-0ubuntu8.9?arch=arm64&distro=ubuntu-24.04&upstream=glibc

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.240% | | EPSS Percentile | 15th percentile |
Description
The nscd service in the GNU C Library 2.3.4 onwards may crash due to a stack overflow when a malicious DNS server returns too large a response for a DNS query, resulting in degraded DNS resolution for the system. Exploitation of this bug needs a system that has nscd enabled and using an untrusted DNS server for name resolution, with the compromised DNS server being capable of processing records large enough to result in a stack overflow in an nscd thread stack. During experimentation, bind 9 was unable to handle large records, but that could change in future or with a different name server. In typical installations, nscd is executed in an isolated context as its own user without a shell, due to which any compromise of that service is isolated. There is a remote possibility of nscd cache corruption if an attacker manages to get the stack pointer into a desired point in the heap, potentially resulting in other caches in nscd being overwritten with corrupt data through the stack overflow, until the buggy code path eventually results in a crash. Finally, a crash in nscd may result in performance degradation when resolving names, but it does not result in a denial of service.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.144% | | EPSS Percentile | 4th percentile |
Description
Passing an effectively empty string to the ,ccs= syntax extension of the mode argument in the fopen function in the GNU C Library version 2.45 or earlier may result in a heap buffer overflow when the mode string input to the function is attacker controlled. This usage pattern is not seen in applications in common GNU/Linux distributions and applications that process user-supplied values for ccs should not pass them through without validation.
|
libc-bin 2.39-0ubuntu8.9 (deb)
pkg:deb/ubuntu/libc-bin@2.39-0ubuntu8.9?arch=arm64&distro=ubuntu-24.04&upstream=glibc

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.240% | | EPSS Percentile | 15th percentile |
Description
The nscd service in the GNU C Library 2.3.4 onwards may crash due to a stack overflow when a malicious DNS server returns too large a response for a DNS query, resulting in degraded DNS resolution for the system. Exploitation of this bug needs a system that has nscd enabled and using an untrusted DNS server for name resolution, with the compromised DNS server being capable of processing records large enough to result in a stack overflow in an nscd thread stack. During experimentation, bind 9 was unable to handle large records, but that could change in future or with a different name server. In typical installations, nscd is executed in an isolated context as its own user without a shell, due to which any compromise of that service is isolated. There is a remote possibility of nscd cache corruption if an attacker manages to get the stack pointer into a desired point in the heap, potentially resulting in other caches in nscd being overwritten with corrupt data through the stack overflow, until the buggy code path eventually results in a crash. Finally, a crash in nscd may result in performance degradation when resolving names, but it does not result in a denial of service.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.144% | | EPSS Percentile | 4th percentile |
Description
Passing an effectively empty string to the ,ccs= syntax extension of the mode argument in the fopen function in the GNU C Library version 2.45 or earlier may result in a heap buffer overflow when the mode string input to the function is attacker controlled. This usage pattern is not seen in applications in common GNU/Linux distributions and applications that process user-supplied values for ccs should not pass them through without validation.
|
tar 1.35+dfsg-3ubuntu0.4 (deb)
pkg:deb/ubuntu/tar@1.35%2Bdfsg-3ubuntu0.4?arch=arm64&distro=ubuntu-24.04

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.141% | | EPSS Percentile | 3rd percentile |
Description
A flaw was found in GNU tar. When extracting an archive with the --one-top-level option, hardlink targets are not confined to the designated top-level directory and may resolve relative to the extraction working directory. A crafted archive can create hardlinks that escape the intended boundary and, when combined with a preexisting symbolic link under the working directory, may allow writing outside that boundary during a single extraction.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.080% | | EPSS Percentile | 0th percentile |
Description
A TOCTOU (Time-of-Check Time-of-Use) vulnerability in GNU tar's incremental dumpdir 'X' rename handling allows a local attacker with write access to a directory being backed up to influence the restore process if the attacker has access to the system where the restore is being performed. During restoration, files or directories may be created, renamed or overwritten outside the intended extraction directory. This could lead to unauthorized file modification or, in some cases, privilege escalation. Exploitation does not require the attacker to modify or craft the archive, and standard backup and restore workflows—including extracting into a newly created directory without using the -P option do not mitigate the issue.
|
dash 0.5.12-6ubuntu5 (deb)
pkg:deb/ubuntu/dash@0.5.12-6ubuntu5?arch=arm64&distro=ubuntu-24.04

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.113% | | EPSS Percentile | 1st percentile |
Description
A flaw was found in dash. The printf builtin reserves four bytes before converting a Unicode \u or \U escape, but the multi-byte token can need five or six bytes. A local user who can supply such an escape to dash printf or echo %b, including through dash -c and a positional argument, can write one or two bytes past that reservation.

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.102% | | EPSS Percentile | 1st percentile |
Description
A flaw was found in dash. When built without libc fnmatch, the internal pmatch() matcher implements * by unbounded recursion over candidate positions. A local user who can plant filenames, or otherwise feed that matcher, can make a short multi-star pattern such as ....*.tar.gz consume excessive CPU.
|
zlib1g 1:1.3.dfsg-3.1ubuntu2.2 (deb)
pkg:deb/ubuntu/zlib1g@1%3A1.3.dfsg-3.1ubuntu2.2?arch=arm64&distro=ubuntu-24.04&upstream=zlib

| Affected range | <1:1.3.dfsg-3.1ubuntu2.3 | | Fixed version | 1:1.3.dfsg-3.1ubuntu2.3 | | EPSS Score | 0.469% | | EPSS Percentile | 40th percentile |
Description
zlib versions 1.3.1.2 through 1.3.2 contain a heap buffer overflow vulnerability in the gz_vacate() function when processing non-blocking gzwrite() operations with stale external buffer pointers. Attackers can trigger the overflow by calling gzprintf() or gzvprintf() after a write stall, causing an unchecked memmove() to write beyond the internal input buffer boundary.
|
libexpat1 2.6.1-2ubuntu0.6 (deb)
pkg:deb/ubuntu/libexpat1@2.6.1-2ubuntu0.6?arch=arm64&distro=ubuntu-24.04&upstream=expat

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 5.5 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H | | EPSS Score | 0.203% | | EPSS Percentile | 10th percentile |
Description
In libexpat through 2.7.3, a crafted file with an approximate size of 2 MiB can lead to dozens of seconds of processing time.
|
dpkg 1.22.6ubuntu6.6 (deb)
pkg:deb/ubuntu/dpkg@1.22.6ubuntu6.6?arch=arm64&distro=ubuntu-24.04

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.435% | | EPSS Percentile | 38th percentile |
Description
It was discovered that dpkg-deb (a component of dpkg, the Debian package management system) does not properly validate the end of the data stream when uncompressing a zstd-compressed .deb archive, which may result in denial of service (infinite loop spinning the CPU).
|
go.mongodb.org/mongo-driver 1.17.3 (golang)
pkg:golang/go.mongodb.org/mongo-driver@1.17.3
Permissive List of Allowed Inputs
| Affected range | <1.17.7 | | Fixed version | 1.17.7 | | CVSS Score | 6.9 | | CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N | | EPSS Score | 0.318% | | EPSS Percentile | 25th percentile |
Description
The mongo-go-driver repository contains CGo bindings for GSSAPI (Kerberos) authentication on Linux and macOS. The C wrapper implementation contains a heap out-of-bounds read vulnerability due to incorrect assumptions about string termination in the GSSAPI standard. Since GSSAPI buffers are not guaranteed to be null-terminated or have extra padding, this results in reading one byte past the allocated heap buffer.
|
libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 (deb)
pkg:deb/ubuntu/libsasl2-modules@2.1.28%2Bdfsg1-5ubuntu3.1?arch=arm64&distro=ubuntu-24.04&upstream=cyrus-sasl2

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.337% | | EPSS Percentile | 27th percentile |
Description
A heap-based buffer overflow flaw was found in Cyrus SASL. The add_to_challenge() function in the DIGEST-MD5 plugin computes the size of the buffer needed for a challenge/response field before DIGEST-MD5 quoting is applied, but does not recompute that size when quoting (escaping special characters) makes the value longer. The under-sized buffer is then passed to strcat(), causing a heap-based out-of-bounds write whose size depends on attacker-controlled input. A malicious or on-path DIGEST-MD5 (or HTTP Digest) server can trigger this flaw in a connecting client by supplying a crafted challenge field, such as realm or nonce, most likely resulting in a crash of the client application.
|
libsasl2-2 2.1.28+dfsg1-5ubuntu3.1 (deb)
pkg:deb/ubuntu/libsasl2-2@2.1.28%2Bdfsg1-5ubuntu3.1?arch=arm64&distro=ubuntu-24.04&upstream=cyrus-sasl2

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.337% | | EPSS Percentile | 27th percentile |
Description
A heap-based buffer overflow flaw was found in Cyrus SASL. The add_to_challenge() function in the DIGEST-MD5 plugin computes the size of the buffer needed for a challenge/response field before DIGEST-MD5 quoting is applied, but does not recompute that size when quoting (escaping special characters) makes the value longer. The under-sized buffer is then passed to strcat(), causing a heap-based out-of-bounds write whose size depends on attacker-controlled input. A malicious or on-path DIGEST-MD5 (or HTTP Digest) server can trigger this flaw in a connecting client by supplying a crafted challenge field, such as realm or nonce, most likely resulting in a crash of the client application.
|
libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 (deb)
pkg:deb/ubuntu/libsasl2-modules-db@2.1.28%2Bdfsg1-5ubuntu3.1?arch=arm64&distro=ubuntu-24.04&upstream=cyrus-sasl2

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.337% | | EPSS Percentile | 27th percentile |
Description
A heap-based buffer overflow flaw was found in Cyrus SASL. The add_to_challenge() function in the DIGEST-MD5 plugin computes the size of the buffer needed for a challenge/response field before DIGEST-MD5 quoting is applied, but does not recompute that size when quoting (escaping special characters) makes the value longer. The under-sized buffer is then passed to strcat(), causing a heap-based out-of-bounds write whose size depends on attacker-controlled input. A malicious or on-path DIGEST-MD5 (or HTTP Digest) server can trigger this flaw in a connecting client by supplying a crafted challenge field, such as realm or nonce, most likely resulting in a crash of the client application.
|
libcurl4t64 8.5.0-2ubuntu10.15 (deb)
pkg:deb/ubuntu/libcurl4t64@8.5.0-2ubuntu10.15?arch=arm64&distro=ubuntu-24.04&upstream=curl

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.237% | | EPSS Percentile | 15th percentile |
Description
libcurl could accidentally return a URL for curl_easy_getinfo()'s CURLINFO_EFFECTIVE_URL option containing credentials, even though neither the URL provided to libcurl nor the redirected URL did.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.358% | | EPSS Percentile | 29th percentile |
Description
A deeply nested multipart MIME structure constructed via the public API causes a stack overflow in libcurl during normal cleanup operations. An excessive recursion depth within curl_mime_free leads to unbounded stack frame allocation during structure traversal, ultimately crashing the host process.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.257% | | EPSS Percentile | 17th percentile |
Description
libcurl's TFTP state machine fails to validate state transitions against the requested transfer direction, accepting opening server responses for both reads and writes interchangeably. A malicious TFTP server can respond to a download request in a way that forces the client into transmit mode, prompting libcurl to consume and transmit data from the handle's persistent CURLOPT_READDATA pointer - including data remaining from unrelated prior operations, such as an HTTP POST request executed on a reused handle.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.257% | | EPSS Percentile | 17th percentile |
Description
When an FTP wildcard LIST operation fails, libcurl omits the restoration path meant for successful listings, leaving the write callback set to the internal listing parser and the write callback data pointing directly to the easy handle. Subsequent reuse of this handle triggers an immediate crash, and cloning it via curl_easy_duphandle() copies this corrupted state into the duplicate. If the original handle is subsequently freed, executing a transfer on the cloned handle causes a heap use-after-free read against the dangling handle reference; alternatively, reusing the original or cloned handle while changing only CURLOPT_WRITEDATA (and omitting CURLOPT_WRITEFUNCTION) results in type confusion, forcing the internal parser to interpret incoming server response bytes into memory at the application-supplied write data pointer.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.221% | | EPSS Percentile | 13th percentile |
Description
Enabling CURLOPT_CRLF causes curl to advertise the raw input byte count in the IMAP APPEND {N} literal while transmitting line-ending expanded data. The server reads only $N$ bytes for the payload, causing the remaining overflow bytes to be interpreted and executed as pipelined IMAP commands within the authenticated session.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.266% | | EPSS Percentile | 18th percentile |
Description
An authenticated HTTPS origin can supply an HSTS max-age value that the parser accepts, but time serialization later fails to process. On 64-bit systems, extreme max-age values compute an absolute expiry within standard time integer limits that exceeds calendar time structure bounds. During cache saves, the original HSTS file is truncated before writing a temporary replacement; when serialization fails, the temporary file is deleted, leaving an empty or partial cache. Because the save error is silently ignored during cleanup, curl exits successfully despite the data loss.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.314% | | EPSS Percentile | 24th percentile |
Description
Importing a includeSubDomains parent HSTS entry before a longer-lived child entry, silently drops the child. Consequently, when the parent expires, the child's valid HSTS policy is lost, causing curl to issue unencrypted HTTP requests rather than upgrading to HTTPS.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.266% | | EPSS Percentile | 18th percentile |
Description
An HTTP proxy can trick libcurl into sending the origin's credentials (Basic password, or a Negotiate/Kerberos ticket) to the proxy itself, by answering the CONNECT tunnel request with 401 WWW-Authenticate: instead of the expected 407 Proxy-Authenticate:.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.313% | | EPSS Percentile | 24th percentile |
Description
Setting CURLOPT_AWS_SIGV4 to NULL but does not disable SigV4 authentication, contrary to expectations and documentation. A subsequent transfer on the same handle still sends an Authorization: AWS4-HMAC-SHA256 header to whatever URL isset next, leaking state information.
|
curl 8.5.0-2ubuntu10.15 (deb)
pkg:deb/ubuntu/curl@8.5.0-2ubuntu10.15?arch=arm64&distro=ubuntu-24.04

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.237% | | EPSS Percentile | 15th percentile |
Description
libcurl could accidentally return a URL for curl_easy_getinfo()'s CURLINFO_EFFECTIVE_URL option containing credentials, even though neither the URL provided to libcurl nor the redirected URL did.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.358% | | EPSS Percentile | 29th percentile |
Description
A deeply nested multipart MIME structure constructed via the public API causes a stack overflow in libcurl during normal cleanup operations. An excessive recursion depth within curl_mime_free leads to unbounded stack frame allocation during structure traversal, ultimately crashing the host process.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.257% | | EPSS Percentile | 17th percentile |
Description
libcurl's TFTP state machine fails to validate state transitions against the requested transfer direction, accepting opening server responses for both reads and writes interchangeably. A malicious TFTP server can respond to a download request in a way that forces the client into transmit mode, prompting libcurl to consume and transmit data from the handle's persistent CURLOPT_READDATA pointer - including data remaining from unrelated prior operations, such as an HTTP POST request executed on a reused handle.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.257% | | EPSS Percentile | 17th percentile |
Description
When an FTP wildcard LIST operation fails, libcurl omits the restoration path meant for successful listings, leaving the write callback set to the internal listing parser and the write callback data pointing directly to the easy handle. Subsequent reuse of this handle triggers an immediate crash, and cloning it via curl_easy_duphandle() copies this corrupted state into the duplicate. If the original handle is subsequently freed, executing a transfer on the cloned handle causes a heap use-after-free read against the dangling handle reference; alternatively, reusing the original or cloned handle while changing only CURLOPT_WRITEDATA (and omitting CURLOPT_WRITEFUNCTION) results in type confusion, forcing the internal parser to interpret incoming server response bytes into memory at the application-supplied write data pointer.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.221% | | EPSS Percentile | 13th percentile |
Description
Enabling CURLOPT_CRLF causes curl to advertise the raw input byte count in the IMAP APPEND {N} literal while transmitting line-ending expanded data. The server reads only $N$ bytes for the payload, causing the remaining overflow bytes to be interpreted and executed as pipelined IMAP commands within the authenticated session.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.266% | | EPSS Percentile | 18th percentile |
Description
An authenticated HTTPS origin can supply an HSTS max-age value that the parser accepts, but time serialization later fails to process. On 64-bit systems, extreme max-age values compute an absolute expiry within standard time integer limits that exceeds calendar time structure bounds. During cache saves, the original HSTS file is truncated before writing a temporary replacement; when serialization fails, the temporary file is deleted, leaving an empty or partial cache. Because the save error is silently ignored during cleanup, curl exits successfully despite the data loss.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.314% | | EPSS Percentile | 24th percentile |
Description
Importing a includeSubDomains parent HSTS entry before a longer-lived child entry, silently drops the child. Consequently, when the parent expires, the child's valid HSTS policy is lost, causing curl to issue unencrypted HTTP requests rather than upgrading to HTTPS.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.266% | | EPSS Percentile | 18th percentile |
Description
An HTTP proxy can trick libcurl into sending the origin's credentials (Basic password, or a Negotiate/Kerberos ticket) to the proxy itself, by answering the CONNECT tunnel request with 401 WWW-Authenticate: instead of the expected 407 Proxy-Authenticate:.

| Affected range | <8.5.0-2ubuntu10.16 | | Fixed version | 8.5.0-2ubuntu10.16 | | EPSS Score | 0.313% | | EPSS Percentile | 24th percentile |
Description
Setting CURLOPT_AWS_SIGV4 to NULL but does not disable SigV4 authentication, contrary to expectations and documentation. A subsequent transfer on the same handle still sends an Authorization: AWS4-HMAC-SHA256 header to whatever URL isset next, leaking state information.
|
golang.org/x/sys 0.40.0 (golang)
pkg:golang/golang.org/x/sys@0.40.0

| Affected range | <0.44.0 | | Fixed version | 0.44.0 | | EPSS Score | 0.114% | | EPSS Percentile | 1st percentile |
Description
NewNTUnicodeString does not check for string length overflow. When provided with a string that overflows the maximum size of a NTUnicodeString (a 16-bit number of bytes), it returns a truncated string rather than an error.
|
passwd 1:4.13+dfsg1-4ubuntu3.2 (deb)
pkg:deb/ubuntu/passwd@1%3A4.13%2Bdfsg1-4ubuntu3.2?arch=arm64&distro=ubuntu-24.04&upstream=shadow

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.426% | | EPSS Percentile | 37th percentile |
Description
shadow-utils (aka shadow) 4.4 through 4.17.0 establishes a default /etc/subuid behavior (e.g., uid 100000 through 165535 for the first user account) that can realistically conflict with the uids of users defined on locally administered networks, potentially leading to account takeover, e.g., by leveraging newuidmap for access to an NFS home directory (or same-host resources in the case of remote logins by these local network users). NOTE: it may also be argued that system administrators should not have assigned uids, within local networks, that are within the range that can occur in /etc/subuid.
|
libsystemd0 255.4-1ubuntu8.17 (deb)
pkg:deb/ubuntu/libsystemd0@255.4-1ubuntu8.17?arch=arm64&distro=ubuntu-24.04&upstream=systemd

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 3.3 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N | | EPSS Score | 0.173% | | EPSS Percentile | 7th percentile |
Description
In systemd 259, systemd-journald can send ANSI escape sequences to the terminals of arbitrary users when a "logger -p emerg" command is executed, if ForwardToWall=yes is set.
|
golang.org/x/sys 0.33.0 (golang)
pkg:golang/golang.org/x/sys@0.33.0

| Affected range | <0.44.0 | | Fixed version | 0.44.0 | | EPSS Score | 0.114% | | EPSS Percentile | 1st percentile |
Description
NewNTUnicodeString does not check for string length overflow. When provided with a string that overflows the maximum size of a NTUnicodeString (a 16-bit number of bytes), it returns a truncated string rather than an error.
|
libudev1 255.4-1ubuntu8.17 (deb)
pkg:deb/ubuntu/libudev1@255.4-1ubuntu8.17?arch=arm64&distro=ubuntu-24.04&upstream=systemd

| Affected range | >=0 | | Fixed version | Not Fixed | | CVSS Score | 3.3 | | CVSS Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N | | EPSS Score | 0.173% | | EPSS Percentile | 7th percentile |
Description
In systemd 259, systemd-journald can send ANSI escape sequences to the terminals of arbitrary users when a "logger -p emerg" command is executed, if ForwardToWall=yes is set.
|
login 1:4.13+dfsg1-4ubuntu3.2 (deb)
pkg:deb/ubuntu/login@1%3A4.13%2Bdfsg1-4ubuntu3.2?arch=arm64&distro=ubuntu-24.04&upstream=shadow

| Affected range | >=0 | | Fixed version | Not Fixed | | EPSS Score | 0.426% | | EPSS Percentile | 37th percentile |
Description
shadow-utils (aka shadow) 4.4 through 4.17.0 establishes a default /etc/subuid behavior (e.g., uid 100000 through 165535 for the first user account) that can realistically conflict with the uids of users defined on locally administered networks, potentially leading to account takeover, e.g., by leveraging newuidmap for access to an NFS home directory (or same-host resources in the case of remote logins by these local network users). NOTE: it may also be argued that system administrators should not have assigned uids, within local networks, that are within the range that can occur in /etc/subuid.
|
stdlib 1.26.9 (golang)
pkg:golang/stdlib@1.26.9

| Affected range | <1.26.10 | | Fixed version | 1.26.10 | | EPSS Score | 0.299% | | EPSS Percentile | 23rd percentile |
Description
On most platforms, Go uses the given system root certificates. However, in some narrower cases, the system trust stores may not be updated without further action.
To defend against the narrower set of cases that may remain affected, a denylist was added in crypto/x509 to return an error when calling Verify with any of the known intermediate certificates that are no longer considered to be trustworthy.
|