Skip to content

Blog: add post about HashDoS fix in Mar 2026 security release#8777

Merged
joyeecheung merged 7 commits intonodejs:mainfrom
joyeecheung:mar-2026-hashdos
Mar 25, 2026
Merged

Blog: add post about HashDoS fix in Mar 2026 security release#8777
joyeecheung merged 7 commits intonodejs:mainfrom
joyeecheung:mar-2026-hashdos

Conversation

@joyeecheung
Copy link
Member

Description

Validation

Related Issues

Check List

  • I have read the Contributing Guidelines and made commit messages that follow the guideline.
  • I have run pnpm format to ensure the code follows the style guide.
  • I have run pnpm test to check if all tests are passing.
  • I have run pnpm build to check if the website builds without errors.
  • I've covered new added functionality with unit tests if necessary.

@joyeecheung joyeecheung requested a review from a team as a code owner March 24, 2026 21:48
Copilot AI review requested due to automatic review settings March 24, 2026 21:48
@vercel
Copy link

vercel bot commented Mar 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nodejs-org Ready Ready Preview Mar 24, 2026 11:05pm

Request Review

@github-actions
Copy link
Contributor

👋 Codeowner Review Request

The following codeowners have been identified for the changed files:

Team reviewers: @nodejs/nodejs-website

Please review the changes when you have a chance. Thank you! 🙏

@codecov
Copy link

codecov bot commented Mar 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.28%. Comparing base (e607b68) to head (651710c).
⚠️ Report is 3 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #8777   +/-   ##
=======================================
  Coverage   75.28%   75.28%           
=======================================
  Files         105      105           
  Lines        9242     9242           
  Branches      326      326           
=======================================
  Hits         6958     6958           
  Misses       2282     2282           
  Partials        2        2           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new vulnerability blog post explaining the V8/Node.js mitigation for CVE-2026-21717 (seeded, reversible integer hashing for array-index strings) as part of the March 2026 security release communications.

Changes:

  • Introduces a new long-form MDX post detailing the HashDoS issue, threat model, hash design, evaluation, and deployment notes.
  • Includes code samples, tables, and diagrams (referencing existing SVGs under /static/images/blog/vulnerability/).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@MattIPv4
Copy link
Member

MattIPv4 commented Mar 24, 2026

Not a blocking thought, but I wonder if we need a different category on the blog for posts like this 🤔 I'd be worried that having posts in the vulnerabilities feed that aren't directly actionable by users might create some annoyance/fatigue if folks are using the RSS feed (or the site category) to keep updated on important releases.

@joyeecheung
Copy link
Member Author

joyeecheung commented Mar 24, 2026

See details
@node-core/website:start: ⨯ [139:32: Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`] {
@node-core/website:start:   ancestors: undefined,
@node-core/website:start:   cause: undefined,
@node-core/website:start:   column: 32,
@node-core/website:start:   fatal: undefined,
@node-core/website:start:   file: '',
@node-core/website:start:   line: 139,
@node-core/website:start:   place: [Object],
@node-core/website:start:   reason: 'Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`',
@node-core/website:start:   ruleId: 'unexpected-character',
@node-core/website:start:   source: 'micromark-extension-mdx-jsx',
@node-core/website:start:   actual: undefined,
@node-core/website:start:   expected: undefined,
@node-core/website:start:   note: undefined,
@node-core/website:start:   url: 'https://github.com/micromark/micromark-extension-mdx-jsx#unexpected-character-at-expected-expect',
@node-core/website:start:   digest: '2682307383'
@node-core/website:start: }
@node-core/website:start: ⨯ [139:32: Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`] {
@node-core/website:start:   ancestors: undefined,
@node-core/website:start:   cause: undefined,
@node-core/website:start:   column: 32,
@node-core/website:start:   fatal: undefined,
@node-core/website:start:   file: '',
@node-core/website:start:   line: 139,
@node-core/website:start:   place: [Object],
@node-core/website:start:   reason: 'Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`',
@node-core/website:start:   ruleId: 'unexpected-character',
@node-core/website:start:   source: 'micromark-extension-mdx-jsx',
@node-core/website:start:   actual: undefined,
@node-core/website:start:   expected: undefined,
@node-core/website:start:   note: undefined,
@node-core/website:start:   url: 'https://github.com/micromark/micromark-extension-mdx-jsx#unexpected-character-at-expected-expect',
@node-core/website:start:   digest: '2682307383'
@node-core/website:start: }
@node-core/website:start: [139:32: Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`] {
@node-core/website:start:   ancestors: undefined,
@node-core/website:start:   cause: undefined,
@node-core/website:start:   column: 32,
@node-core/website:start:   fatal: undefined,
@node-core/website:start:   file: '',
@node-core/website:start:   line: 139,
@node-core/website:start:   place: [Object],
@node-core/website:start:   reason: 'Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`',
@node-core/website:start:   ruleId: 'unexpected-character',
@node-core/website:start:   source: 'micromark-extension-mdx-jsx',
@node-core/website:start:   actual: undefined,
@node-core/website:start:   expected: undefined,
@node-core/website:start:   note: undefined,
@node-core/website:start:   url: 'https://github.com/micromark/micromark-extension-mdx-jsx#unexpected-character-at-expected-expect',
@node-core/website:start:   digest: '2682307383'
@node-core/website:start: }
@node-core/website:start: ⨯ [139:32: Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`] {
@node-core/website:start:   ancestors: undefined,
@node-core/website:start:   cause: undefined,
@node-core/website:start:   column: 32,
@node-core/website:start:   fatal: undefined,
@node-core/website:start:   file: '',
@node-core/website:start:   line: 139,
@node-core/website:start:   place: [Object],
@node-core/website:start:   reason: 'Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`',
@node-core/website:start:   ruleId: 'unexpected-character',
@node-core/website:start:   source: 'micromark-extension-mdx-jsx',
@node-core/website:start:   actual: undefined,
@node-core/website:start:   expected: undefined,
@node-core/website:start:   note: undefined,
@node-core/website:start:   url: 'https://github.com/micromark/micromark-extension-mdx-jsx#unexpected-character-at-expected-expect',
@node-core/website:start:   digest: '2682307383'
@node-core/website:start: }
@node-core/website:start: ⨯ [139:32: Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`] {
@node-core/website:start:   ancestors: undefined,
@node-core/website:start:   cause: undefined,
@node-core/website:start:   column: 32,
@node-core/website:start:   fatal: undefined,
@node-core/website:start:   file: '',
@node-core/website:start:   line: 139,
@node-core/website:start:   place: [Object],
@node-core/website:start:   reason: 'Unexpected character `<` (U+003C) before name, expected a character that can start a name, such as a letter, `$`, or `_`',
@node-core/website:start:   ruleId: 'unexpected-character',
@node-core/website:start:   source: 'micromark-extension-mdx-jsx',
@node-core/website:start:   actual: undefined,
@node-core/website:start:   expected: undefined,
@node-core/website:start:   note: undefined,
@node-core/website:start:   url: 'https://github.com/micromark/micromark-extension-mdx-jsx#unexpected-character-at-expected-expect',
@node-core/website:start:   digest: '2682307383'
The parser is choing on mathml..

@joyeecheung
Copy link
Member Author

I'd be worried that having posts in the vulnerabilities feed that aren't directly actionable by users might create some annoyance/fatigue if folks are using the RSS feed (or the site category) to keep updated on important releases.

The recommended action is to upgrade to the new security releases, the blog post mostly just explains what's going on in the security release (or why users should/should not care about this particular vulnerability).

@joyeecheung
Copy link
Member Author

Updated the escaping a bit. The math in the preview looks correct now.

Copy link
Member

@mikeesto mikeesto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, this was very interesting to read!

Copy link
Member

@AugustinMauroy AugustinMauroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM ! that a nice post

@joyeecheung joyeecheung added this pull request to the merge queue Mar 25, 2026
Merged via the queue into nodejs:main with commit a97800e Mar 25, 2026
13 checks passed
@joyeecheung joyeecheung deleted the mar-2026-hashdos branch March 25, 2026 14:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants