Skip to content

Conversation

@google-labs-jules
Copy link
Contributor

🛡️ Sentinel Report: Stored XSS Fix

Vulnerability:
The ArticlePage.tsx component used a custom regex-based markdown parser that directly injected HTML into the DOM via dangerouslySetInnerHTML. The parser lacked input sanitization, allowing attackers (or malicious content sources) to break out of generated tags (e.g., using </pre><script>...) and execute arbitrary JavaScript.

Fix:
Implemented an escapeHtml function that converts special characters (&, <, >, ", ') to their HTML entities. This function is applied to the raw article content before any markdown processing occurs.

Impact:

  • Security: XSS vector is neutralized. Malicious tags render as plain text.
  • Functionality: Markdown syntax (bold, headers, code blocks) continues to work. Code blocks now safely display HTML-like content (e.g., print("<div>") renders as visible text).
  • Verification: Verified with a reproduction script and Playwright visual test. All existing tests passed.

PR created automatically by Jules for task 16053209843193932100 started by @albertoivo

Fixes a High Severity vulnerability where the custom markdown parser in `ArticlePage.tsx` did not sanitize input before rendering with `dangerouslySetInnerHTML`.

- Added `escapeHtml` function to sanitize input content.
- Applied sanitization before markdown regex processing.
- Verified that XSS payloads are neutralized and legitimate code blocks render correctly.
@google-labs-jules
Copy link
Contributor Author

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@github-actions
Copy link

Visit the preview URL for this PR (updated for commit f9e72e6):

https://pyexplorer-cd32d--pr58-sentinel-fix-article-gsqzho1x.web.app

(expires Thu, 22 Jan 2026 18:38:53 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 916b4905e0cdc420f3368c8eb19b2f2e90c3be61

@albertoivo albertoivo marked this pull request as ready for review January 15, 2026 21:10
@albertoivo albertoivo merged commit 28744f4 into main Jan 15, 2026
6 checks passed
@albertoivo albertoivo deleted the sentinel/fix-article-xss-16053209843193932100 branch January 15, 2026 22:44
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.

2 participants