fix(security): add DOMPurify sanitization to prevent XSS in MarkdownView #261
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue
When rendering markdown content in the
MarkdownView
component, user-provided content was being inserted directly into the DOM using dangerouslySetInnerHTML without sanitization. This created a Stored XSS vulnerability where attackers could inject malicious scripts that execute when other users view the content.
Attack Vectors:
Script tag injection: <script>stealCookies()</script>
Event handler injection:
JavaScript URL injection: link
Malicious iframe embedding from untrusted domains
Solution
Integrated DOMPurify (v3.2.4) for robust HTML sanitization before rendering
Implemented strict allowlist of safe HTML tags and attributes
Added custom hooks to validate iframe sources against trusted domains (YouTube, Vimeo only)
Added custom hooks to block javascript:, vbscript:, and data: URLs
Added comprehensive security test suite with 25+ test cases