Skip to content

chore(deps): bump sanitize-html from 2.17.5 to 2.17.6 in /validation#1654

Draft
dependabot[bot] wants to merge 5 commits into
developfrom
dependabot-npm_and_yarn-validation-sanitize-html-2.17.6
Draft

chore(deps): bump sanitize-html from 2.17.5 to 2.17.6 in /validation#1654
dependabot[bot] wants to merge 5 commits into
developfrom
dependabot-npm_and_yarn-validation-sanitize-html-2.17.6

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 19, 2026

Copy link
Copy Markdown
Contributor

Bumps sanitize-html from 2.17.5 to 2.17.6.

Changelog

Sourced from sanitize-html's changelog.

2.17.6 (2026-07-10)

Fixes

  • Allow transformTags to emit text when textFilter is set, even if the tag is initially empty. This is consistent with the documentation. Thanks to spokodev for the fix.

Security

  • Fixed an XSS/allowlist bypass in which the contents of a raw-text element (textarea or xmp) nested inside an svg or math root were re-emitted without HTML-escaping. sanitize-html treated that content as inert raw text because htmlparser2 10.x classified raw-text elements by tag name and ignored the namespace, but a real HTML5 parser treats textarea/xmp as ordinary foreign elements inside SVG/MathML and re-parses their contents as live markup. As a result, markup and event-handler attributes that the allowlist never permitted (for example <svg><textarea><img src=x onerror=alert(1)>) could survive sanitization and execute in the browser. This is now fixed on two fronts: htmlparser2 was upgraded to 12.x, which is namespace-aware and parses textarea/xmp inside SVG/MathML as ordinary elements, so their non-allowlisted children (such as the injected img) are dropped by the allowlist instead of being preserved as raw text; and any raw-text content sanitize-html still emits for these tags (at HTML integration points such as foreignObject/mtext, or outside foreign content) is always HTML-escaped. The default configuration is not affected; the precondition is an allowedTags that includes svg or math together with textarea or xmp. Thanks to khoadb175 for responsibly disclosing the vulnerability.
  • Fixed a mutation-XSS / allowedTags bypass affecting configurations that allow the textarea or xmp raw-text tags. htmlparser2 10.x did not recognize an end tag with a trailing solidus (e.g. </textarea/>) as closing the element, so it kept the following markup as raw text, but a spec-compliant browser treats </textarea/> as a valid close and parses that markup as a live element. Because raw-text content was re-emitted without escaping, a payload such as <textarea></textarea/><img src=x onerror=...> could smuggle non-allowlisted, executable markup through the sanitizer. The default configuration was not affected. This is now defended at two layers: htmlparser2 was upgraded to 12.x, whose tokenizer closes these end tags correctly, and the raw text sanitize-html emits for these tags is always escaped so no < can reopen a tag when the output is re-parsed (textarea, an RCDATA element whose entities htmlparser2 decodes, is escaped like normal text, while xmp, a raw-text element, has only its angle brackets escaped to avoid double-encoding already-encoded entities). Because htmlparser2 is ESM-only from version 11 onward, sanitize-html now requires Node.js >=22.12.0 (the first 22.x release in which require() of an ES module is available unflagged). Thanks to bibu123456 for reporting the vulnerability and Kayiz-PT for coordinating the disclosure (GHSA-jxwj-j7wr-gfrw).
Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [sanitize-html](https://github.com/apostrophecms/apostrophe/tree/HEAD/packages/sanitize-html) from 2.17.5 to 2.17.6.
- [Changelog](https://github.com/apostrophecms/apostrophe/blob/main/packages/sanitize-html/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/apostrophe/commits/HEAD/packages/sanitize-html)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-version: 2.17.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Jul 19, 2026
@dependabot
dependabot Bot requested a review from a team as a code owner July 19, 2026 10:03
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Jul 19, 2026
@dependabot
dependabot Bot requested review from Scott-James-Hurley and removed request for a team July 19, 2026 10:03
@github-actions
github-actions Bot enabled auto-merge July 19, 2026 10:03
@yoganandaness

Copy link
Copy Markdown
Contributor

@copilot Build is failing in pipeline. Explain the issue and fix it.

auto-merge was automatically disabled July 21, 2026 07:54

Head branch was pushed to by a user without write access

Copilot AI commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

@copilot Build is failing in pipeline. Explain the issue and fix it.

Root cause: sanitize-html 2.17.6 bumped its htmlparser2 dependency from ^10.1.0 (CJS) to ^12.0.0 (ESM). htmlparser2 v12 uses ES module import syntax. Since Jest's default transformIgnorePatterns skips all node_modules, it can't process the ESM module, causing all 106 backend test suites to fail with SyntaxError: Cannot use import statement outside a module.

Fix (commit fix: configure Jest to transform ESM htmlparser2 v12): Updated both apps/backend/jest.unit.config.js and jest.integration.config.js to:

  1. Add a .js file transform using ts-jest (allowJs: true was already set in the backend's tsconfig.json)
  2. Add transformIgnorePatterns to exempt htmlparser2 and its related ESM sibling packages (dom-serializer, domelementtype, domhandler, domutils, entities) from being ignored, so ts-jest can compile them to CJS at test time

@github-actions
github-actions Bot enabled auto-merge July 21, 2026 09:04
@yoganandaness
yoganandaness marked this pull request as draft July 21, 2026 09:05
auto-merge was automatically disabled July 21, 2026 09:05

Pull request was converted to draft

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants