CVE-2026-48988
markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
5.3
markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
CVE-2026-48988- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-400
- Updated
- 2026-11-02
EUVDEUVD-2026-37799
5.3
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
EUVD-2026-37799- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-253c-mchw-3w2r
6.3
markdown-it linkify: true has two quadratic paths, so a few hundred KB of markdown blocks the event loop for tens of seconds
Summary
Two independent quadratic paths in the linkify: true handling. Both are in markdown-it's own code rather than in linkify-it, which stays linear on both payloads.
src/rules_core/linkify.ts calls arrayReplaceAt once per linkified text token, and that rebuilds the whole children array each time. A paragraph of N soft-broken lines is one inline token with about 2N children, so you get N rebuilds over a 2N array. Schema-less emails are what reach it. A http:// link gets consumed by the inline rule first and never arrives as a text token, so those stay linear.
src/rules_inline/linkify.ts runs state.pending.match(SCHEME_RE) at every :// in the source. state.pending only gets truncated once a link is actually produced, so an unregistered scheme leaves it growing and every :// rescans the lot.
Proof of concept
Clean install of 15.0.0 from npm, new MarkdownIt({ linkify: true }).render(payload), Node 24.
| N | 5,000 | 10,000 | 20,000 | 40,000 |
|---|---|---|---|---|
| '[email protected]\n'.repeat(N), 34KB to 273KB | 1.1s | 4.7s | 19.6s | 89s |
| 'a://'.repeat(N), 20KB to 156KB | 0.25s | 0.76s | 3.1s | 15.0s |
Doubling the input roughly quadruples the time in both. With linkify: false the same inputs run in 25 to 131ms and stay flat.
Controls for the first one, all at N=20000: putting every email in a single text token ('[email protected] ') takes 0.59s, one email per paragraph ('[email protected]\n\n') takes 0.64s, and soft-broken lines with nothing linkifiable take 42ms. So it needs many children AND many of them linkifying. For the second, replaying just the SCHEME_RE calls against the same growing prefixes with no markdown-it involved accounts for 11.7s of the 15s.
Ordinary prose does it too. 'ping [email protected] ok\n'.repeat(20000) is 293KB and takes 31s.
Caveat
linkify is off by default, so this only reaches apps that turn it on.
Impact
Availability only. A few hundred KB of fairly ordinary markdown pins one core for tens of seconds, and because it's quadratic it degrades quickly with size. Nothing is read, written or executed.
- Record
GHSA-253c-mchw-3w2r- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-6v5v-wf23-fmfq
5.3
markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations
Summary
A quadratic time complexity vulnerability exists in markdown-it's smartquotes rule (enabled via the typographer: true option). An attacker can craft a markdown input consisting of consecutive quotation marks that causes the parser to consume excessive CPU time, leading to denial of service.
Details
The vulnerability is in the replaceAt() helper function used by the smartquotes rule in lib/rules_core/smartquotes.mjs:
function replaceAt (str, index, ch) {
return str.slice(0, index) + ch + str.slice(index + 1)
}
When markdown-it processes a text token containing many quotation marks (either " or ') with typographer: true, the smartquotes rule iterates through each quote character and calls replaceAt() to substitute it with a typographic (curly) quote. Each call to replaceAt() creates three new string slices and concatenates them, which is an O(n) operation where n is the length of the string.
Since this is called once per quote character in the token, and there are n quote characters, the total time complexity becomes O(n^2).
The root cause is that the smartquotes rule modifies token.content in place using string slicing rather than building the result incrementally. The process_inlines() function (line 14) processes each quote in the text token, and for matching quote pairs, calls replaceAt() on both the opening and closing token's content (lines 151-152). When the entire input is a single text token of quote characters, this results in quadratic behavior.
PoC
const md = require('markdown-it');
const instance = md({ typographer: true });
// 160,000 consecutive double-quote characters
const payload = '"'.repeat(160000);
console.time('render');
instance.render(payload);
console.timeEnd('render');
// Output: render: ~21000ms (21 seconds)
// Compare with typographer disabled:
const safe = md({ typographer: false });
console.time('render-safe');
safe.render(payload);
console.timeEnd('render-safe');
// Output: render-safe: ~8ms
Measured timing on a modern system:
- 10,000 quotes: ~19ms
- 20,000 quotes: ~51ms
- 40,000 quotes: ~212ms
- 80,000 quotes: ~5,430ms
- 160,000 quotes: ~21,198ms
The scaling is clearly superlinear (quadratic), with the 80K->160K step showing a ~3.9x increase for a 2x input increase, consistent with O(n^2).
Impact
Applications that render user-supplied markdown with typographer: true are vulnerable to denial of service. An attacker can submit a relatively small payload (160KB of quote characters) that causes the server to spend over 21 seconds processing a single request. Repeated submissions can exhaust server CPU resources and prevent legitimate users from being served.
The impact is mitigated by the fact that the typographer option defaults to false and must be explicitly enabled. However, the typographer feature is commonly enabled in production applications that want smart typography, and the markdown-it documentation prominently suggests enabling it.
A suggested fix would be to replace the replaceAt() approach with an array-based or StringBuilder-style approach that collects all replacements and applies them in a single pass, reducing the time complexity to O(n).
- Record
GHSA-6v5v-wf23-fmfq- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
NVD
5.3
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
CVE-2026-48988- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-400
- Updated
- 2026-11-02
OSV
5.3
markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
CVE-2026-48988- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-400
- Updated
- 2026-11-02
Show 19 moreShow less
OSVDEBIAN-CVE-2026-48988
5.3
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
DEBIAN-CVE-2026-48988- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVGHSA-253c-mchw-3w2r
6.3
markdown-it linkify: true has two quadratic paths, so a few hundred KB of markdown blocks the event loop for tens of seconds
Summary
Two independent quadratic paths in the linkify: true handling. Both are in markdown-it's own code rather than in linkify-it, which stays linear on both payloads.
src/rules_core/linkify.ts calls arrayReplaceAt once per linkified text token, and that rebuilds the whole children array each time. A paragraph of N soft-broken lines is one inline token with about 2N children, so you get N rebuilds over a 2N array. Schema-less emails are what reach it. A http:// link gets consumed by the inline rule first and never arrives as a text token, so those stay linear.
src/rules_inline/linkify.ts runs state.pending.match(SCHEME_RE) at every :// in the source. state.pending only gets truncated once a link is actually produced, so an unregistered scheme leaves it growing and every :// rescans the lot.
Proof of concept
Clean install of 15.0.0 from npm, new MarkdownIt({ linkify: true }).render(payload), Node 24.
| N | 5,000 | 10,000 | 20,000 | 40,000 |
|---|---|---|---|---|
| '[email protected]\n'.repeat(N), 34KB to 273KB | 1.1s | 4.7s | 19.6s | 89s |
| 'a://'.repeat(N), 20KB to 156KB | 0.25s | 0.76s | 3.1s | 15.0s |
Doubling the input roughly quadruples the time in both. With linkify: false the same inputs run in 25 to 131ms and stay flat.
Controls for the first one, all at N=20000: putting every email in a single text token ('[email protected] ') takes 0.59s, one email per paragraph ('[email protected]\n\n') takes 0.64s, and soft-broken lines with nothing linkifiable take 42ms. So it needs many children AND many of them linkifying. For the second, replaying just the SCHEME_RE calls against the same growing prefixes with no markdown-it involved accounts for 11.7s of the 15s.
Ordinary prose does it too. 'ping [email protected] ok\n'.repeat(20000) is 293KB and takes 31s.
Caveat
linkify is off by default, so this only reaches apps that turn it on.
Impact
Availability only. A few hundred KB of fairly ordinary markdown pins one core for tens of seconds, and because it's quadratic it degrades quickly with size. Nothing is read, written or executed.
- Record
GHSA-253c-mchw-3w2r- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
OSVGHSA-6v5v-wf23-fmfq
5.3
markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations
Summary
A quadratic time complexity vulnerability exists in markdown-it's smartquotes rule (enabled via the typographer: true option). An attacker can craft a markdown input consisting of consecutive quotation marks that causes the parser to consume excessive CPU time, leading to denial of service.
Details
The vulnerability is in the replaceAt() helper function used by the smartquotes rule in lib/rules_core/smartquotes.mjs:
function replaceAt (str, index, ch) {
return str.slice(0, index) + ch + str.slice(index + 1)
}
When markdown-it processes a text token containing many quotation marks (either " or ') with typographer: true, the smartquotes rule iterates through each quote character and calls replaceAt() to substitute it with a typographic (curly) quote. Each call to replaceAt() creates three new string slices and concatenates them, which is an O(n) operation where n is the length of the string.
Since this is called once per quote character in the token, and there are n quote characters, the total time complexity becomes O(n^2).
The root cause is that the smartquotes rule modifies token.content in place using string slicing rather than building the result incrementally. The process_inlines() function (line 14) processes each quote in the text token, and for matching quote pairs, calls replaceAt() on both the opening and closing token's content (lines 151-152). When the entire input is a single text token of quote characters, this results in quadratic behavior.
PoC
const md = require('markdown-it');
const instance = md({ typographer: true });
// 160,000 consecutive double-quote characters
const payload = '"'.repeat(160000);
console.time('render');
instance.render(payload);
console.timeEnd('render');
// Output: render: ~21000ms (21 seconds)
// Compare with typographer disabled:
const safe = md({ typographer: false });
console.time('render-safe');
safe.render(payload);
console.timeEnd('render-safe');
// Output: render-safe: ~8ms
Measured timing on a modern system:
- 10,000 quotes: ~19ms
- 20,000 quotes: ~51ms
- 40,000 quotes: ~212ms
- 80,000 quotes: ~5,430ms
- 160,000 quotes: ~21,198ms
The scaling is clearly superlinear (quadratic), with the 80K->160K step showing a ~3.9x increase for a 2x input increase, consistent with O(n^2).
Impact
Applications that render user-supplied markdown with typographer: true are vulnerable to denial of service. An attacker can submit a relatively small payload (160KB of quote characters) that causes the server to spend over 21 seconds processing a single request. Repeated submissions can exhaust server CPU resources and prevent legitimate users from being served.
The impact is mitigated by the fact that the typographer option defaults to false and must be explicitly enabled. However, the typographer feature is commonly enabled in production applications that want smart typography, and the markdown-it documentation prominently suggests enabling it.
A suggested fix would be to replace the replaceAt() approach with an array-based or StringBuilder-style approach that collects all replacements and applies them in a single pass, reducing the time complexity to O(n).
- Record
GHSA-6v5v-wf23-fmfq- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-400, CWE-407
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-48988
5.3
markdown-it is a Markdown parser. Versions 14.1.1 and below contain a denial-of-service vulnerability when typographer: true is enabled, due to quadratic (O(n^2)) processing in the smartquotes rule. The issue stems from repeatedly modifying strings with replaceAt(), which performs O(n) slicing and concatenation per quote character. This can cause excessive CPU consumption when parsing quote-heavy, user-supplied markdown and may let attackers degrade or disrupt service availability. Although typographer is disabled by default, many production apps enable it for smart typography, making the issue relevant. This issue has been fixed in version 14.2.0.
- Record
UBUNTU-CVE-2026-48988- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVCLSA-2026-1774225206 No score
TuxCare security update for markdown-it (2 CVEs)
TuxCare rebuilt markdown-it to address 2 CVEs. Fixed in 8.4.2-tuxcare.1.
- Record
CLSA-2026-1774225206- Updated
- 2026-11-02
OSVCLSA-2026-1787916789 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 4.3.0-tuxcare.3.
- Record
CLSA-2026-1787916789- Updated
- 2026-11-02
OSVCLSA-2026-1790161417 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 4.4.0-tuxcare.2.
- Record
CLSA-2026-1790161417- Updated
- 2026-11-02
OSVCLSA-2026-1790598013 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 13.0.2-tuxcare.2.
- Record
CLSA-2026-1790598013- Updated
- 2026-11-02
OSVCLSA-2026-1790755985 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 13.0.2-tuxcare.3.
- Record
CLSA-2026-1790755985- Updated
- 2026-11-02
OSVCLSA-2026-1791626468 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 4.3.0-tuxcare.4.
- Record
CLSA-2026-1791626468- Updated
- 2026-11-02
OSVCLSA-2026-1791629152 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 4.4.0-tuxcare.4.
- Record
CLSA-2026-1791629152- Updated
- 2026-11-02
OSVCLSA-2026-1791666427 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 4.0.3-tuxcare.3.
- Record
CLSA-2026-1791666427- Updated
- 2026-11-02
OSVCLSA-2026-1791989508 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 8.4.2-tuxcare.2.
- Record
CLSA-2026-1791989508- Updated
- 2026-11-02
OSVCLSA-2026-1792369116 No score
TuxCare security update for markdown-it (2 CVEs)
TuxCare rebuilt markdown-it to address 2 CVEs. Fixed in 12.3.2-tuxcare.1.
- Record
CLSA-2026-1792369116- Updated
- 2026-11-02
OSVCLSA-2026-1792451528 No score
TuxCare security update for markdown-it (2 CVEs)
TuxCare rebuilt markdown-it to address 2 CVEs. Fixed in 12.3.0-tuxcare.2.
- Record
CLSA-2026-1792451528- Updated
- 2026-11-02
OSVCLSA-2026-1792490021 No score
TuxCare security update for markdown-it (1 CVE)
TuxCare rebuilt markdown-it to address 1 CVE. Fixed in 14.3.0-tuxcare.1.
- Record
CLSA-2026-1792490021- Updated
- 2026-11-02
OSVCLSA-2026-1794058822 No score
TuxCare security update for markdown-it (4 CVEs)
TuxCare rebuilt markdown-it to address 4 CVEs. Fixed in 14.2.0-tuxcare.1.
- Record
CLSA-2026-1794058822- Updated
- 2026-11-07
OSVCLSA-2026-1794059936 No score
TuxCare security update for markdown-it (5 CVEs)
TuxCare rebuilt markdown-it to address 5 CVEs. Fixed in 10.0.0-tuxcare.1.
- Record
CLSA-2026-1794059936- Updated
- 2026-11-07
OSVROOT-APP-NPM-CVE-2026-48988 No score
CVE-2026-48988 in markdown-it - Patched by Root
Root has patched CVE-2026-48988 in the markdown-it package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-48988- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
markdown-itnpm |
15.0.0 to 15.0.0 | 15.0.1 |
markdown-itnpm |
before 14.3.1 | 14.3.1 |
markdown-itnpm |
through 14.1.1 | 14.2.0 |
markdown-itTuxCare:npm From an advisory covering 2 CVEs |
8.4.2-tuxcare.0 up to 8.4.2-tuxcare.1, plus listed versions 8.4.2 |
8.4.2-tuxcare.1 |
markdown-itTuxCare:npm |
4.3.0-tuxcare.0 up to 4.3.0-tuxcare.3, plus listed versions 4.3.04.3.0-tuxcare.14.3.0-tuxcare.2 |
4.3.0-tuxcare.3 |
markdown-itTuxCare:npm |
4.4.0-tuxcare.0 up to 4.4.0-tuxcare.2, plus listed versions 4.4.04.4.0-tuxcare.1 |
4.4.0-tuxcare.2 |
markdown-itTuxCare:npm |
13.0.2-tuxcare.0 up to 13.0.2-tuxcare.2, plus listed versions 13.0.213.0.2-tuxcare.1 |
13.0.2-tuxcare.2 |
markdown-itTuxCare:npm |
13.0.2-tuxcare.0 up to 13.0.2-tuxcare.3, plus listed versions 13.0.213.0.2-tuxcare.113.0.2-tuxcare.2 |
13.0.2-tuxcare.3 |
markdown-itTuxCare:npm |
4.3.0-tuxcare.0 up to 4.3.0-tuxcare.4, plus listed versions 4.3.04.3.0-tuxcare.14.3.0-tuxcare.24.3.0-tuxcare.3 |
4.3.0-tuxcare.4 |
markdown-itTuxCare:npm |
4.4.0-tuxcare.0 up to 4.4.0-tuxcare.4, plus listed versions 4.4.04.4.0-tuxcare.14.4.0-tuxcare.24.4.0-tuxcare.3 |
4.4.0-tuxcare.4 |
Show 19 moreShow less
| Package | Affected | Fixed |
|---|---|---|
markdown-itTuxCare:npm |
4.0.3-tuxcare.0 up to 4.0.3-tuxcare.3, plus listed versions 4.0.34.0.3-tuxcare.14.0.3-tuxcare.2 |
4.0.3-tuxcare.3 |
markdown-itTuxCare:npm |
8.4.2-tuxcare.0 up to 8.4.2-tuxcare.2, plus listed versions 8.4.28.4.2-tuxcare.1 |
8.4.2-tuxcare.2 |
markdown-itTuxCare:npm |
12.3.2-tuxcare.0 up to 12.3.2-tuxcare.1, plus listed versions 12.3.2 |
12.3.2-tuxcare.1 |
markdown-itTuxCare:npm |
12.3.0-tuxcare.0 up to 12.3.0-tuxcare.2, plus listed versions 12.3.012.3.0-tuxcare.1 |
12.3.0-tuxcare.2 |
markdown-itTuxCare:npm |
14.3.0-tuxcare.0 up to 14.3.0-tuxcare.1, plus listed versions 14.3.0 |
14.3.0-tuxcare.1 |
markdown-itTuxCare:npm From an advisory covering 3 CVEs |
14.2.0-tuxcare.0 up to 14.2.0-tuxcare.1, plus listed versions 14.2.0 |
14.2.0-tuxcare.1 |
markdown-itTuxCare:npm From an advisory covering 4 CVEs |
10.0.0-tuxcare.0 up to 10.0.0-tuxcare.1, plus listed versions 10.0.0 |
10.0.0-tuxcare.1 |
node-markdown-itDebian:12 |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-222.2.3+dfsg+~12.2.3-322.2.3+dfsg+~12.2.3-422.2.3+dfsg+~12.2.3-5 |
None known |
node-markdown-itDebian:13 |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-222.2.3+dfsg+~12.2.3-322.2.3+dfsg+~12.2.3-422.2.3+dfsg+~12.2.3-5 |
None known |
node-markdown-itDebian:14 |
before 22.2.3+dfsg+~12.2.3-5, plus listed versions 22.2.3+dfsg+~12.2.3-222.2.3+dfsg+~12.2.3-322.2.3+dfsg+~12.2.3-4 |
22.2.3+dfsg+~12.2.3-5 |
markdown-itnpm |
15.0.0 up to 15.0.1 | 15.0.1 |
markdown-itnpm |
before 14.2.0 | 14.2.0 |
markdown-itRoot:npm |
before 14.1.0-aikido.3 | 14.1.0-aikido.314.1.0-aikido.4 |
@rootio/markdown-itRoot:npm |
before 14.1.0-root.io.3 | 14.1.0-root.io.314.1.0-root.io.4 |
node-markdown-itUbuntu:22.04:LTS |
All versions, plus listed versions 10.0.0+dfsg-210.0.0+dfsg-310.0.0+dfsg-3.110.0.0+dfsg-410.0.0+dfsg-510.0.0+dfsg-6 |
None known |
node-markdown-itUbuntu:24.04:LTS |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-2 |
None known |
node-markdown-itUbuntu:25.10 |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-2 |
None known |
node-markdown-itUbuntu:26.10 |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-422.2.3+dfsg+~12.2.3-5 |
None known |
node-markdown-itUbuntu:26.04:LTS |
All versions, plus listed versions 22.2.3+dfsg+~12.2.3-222.2.3+dfsg+~12.2.3-4 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-48988 is a medium vulnerability (CVSS 5.3) in Markdown-it, published June 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.38%, the 32nd percentile. Fixed in markdown-it 15.0.1.
References
github.com/markdown-it/markdown-it/security/advisories/GHSA-6v5v-wf23-fmfq
github.com/markdown-it/markdown-it/commit/9ce2087562c45d1e5ddd9f76b990f4b3fbe040e5
github.com/markdown-it/markdown-it/security/advisories/GHSA-253c-mchw-3w2r
github.com/markdown-it/markdown-it/commit/09fa07118dda4c953f058848f53dae88395618ca
github.com/markdown-it/markdown-it/commit/aaadcfa6d817b3c5f89afb49d97c7b797a6dd4fd
github.com/markdown-it/markdown-it/commit/ad70f6b7cff64bee10e42a774147112480ca0d49
Show 8 moreShow less
github.com/advisories/GHSA-253c-mchw-3w2r
github.com/advisories/GHSA-6v5v-wf23-fmfq
github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48988.json
nvd.nist.gov/vuln/detail/CVE-2026-48988
security-tracker.debian.org/tracker/CVE-2026-48988
github.com/markdown-it/markdown-it
ubuntu.com/security/CVE-2026-48988
cve.org/CVERecord?id=CVE-2026-48988