Every CVE Search/ Get API key

CVE-2026-48988

markdown-it: Quadratic complexity DoS in smartquotes rule via replaceAt string operations

5.3 MediumFix available

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

0.38%Up 0.3 points since Jun 12, 2026
90%50%10%1%

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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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

Affected packages
PackageAffectedFixed
markdown-it
npm
15.0.0 to 15.0.0
15.0.1
markdown-it
npm
before 14.3.1
14.3.1
markdown-it
npm
through 14.1.1
14.2.0
markdown-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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
Affected packages
PackageAffectedFixed
markdown-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
TuxCare: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-it
Debian: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-it
Debian: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-it
Debian: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-it
npm
15.0.0 up to 15.0.1
15.0.1
markdown-it
npm
before 14.2.0
14.2.0
markdown-it
Root:npm
before 14.1.0-aikido.3
14.1.0-aikido.314.1.0-aikido.4
@rootio/markdown-it
Root:npm
before 14.1.0-root.io.3
14.1.0-root.io.314.1.0-root.io.4
node-markdown-it
Ubuntu: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-it
Ubuntu:24.04:LTS
All versions, plus listed versions
22.2.3+dfsg+~12.2.3-2
None known
node-markdown-it
Ubuntu:25.10
All versions, plus listed versions
22.2.3+dfsg+~12.2.3-2
None known
node-markdown-it
Ubuntu: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-it
Ubuntu: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

History
RecordedChangedSources
affected, aliasesOSV
affected, facts
first indexedCVE 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

Show 8 moreShow less
MoveEnter Open