HERMES-GIELIE/static
Hermes 089dd7e3de fix(security): 5 security hardening fixes
1. Path traversal in _serve_static() [CRITICAL]
   Sandbox resolved path to static/ directory using relative_to().
   GET /static/../../../../etc/passwd now returns 404.

2. Skill category path traversal [HIGH]
   Validate category param in skill save: reject values with '/' or '..'.

3. Gate /api/approval/inject_test to loopback only [HIGH]
   Endpoint now returns 404 for any non-127.0.0.1 client,
   preserving test functionality while blocking remote access.

4. Escape captured groups in renderMd() [HIGH]
   All inline markdown regexes (bold, italic, headings, blockquote,
   list items, table cells/headers, link labels) now run captured
   text through esc() before inserting into innerHTML, preventing
   XSS via AI-generated content.

5. SRI hashes for CDN resources + pin Mermaid version [MEDIUM]
   Added integrity= + crossorigin= to all three PrismJS CDN tags.
   Pinned Mermaid from floating @10 to @10.9.3 with SRI hash.

Tests: 224 passed, 0 failed.
2026-04-02 06:46:40 +00:00
..
boot.js fix(frontend): use URL origin for fetch/EventSource to support reverse proxy auth 2026-03-31 15:00:38 +00:00
index.html fix(security): 5 security hardening fixes 2026-04-02 06:46:40 +00:00
messages.js fix: add withCredentials to EventSource for reverse proxy auth 2026-04-01 22:53:50 -07:00
panels.js Hermes Web UI — Sprints 11-14: multi-provider models, settings, session QoL, alerts, polish 2026-03-31 07:02:47 +00:00
sessions.js Hermes Web UI — Sprints 11-14: multi-provider models, settings, session QoL, alerts, polish 2026-03-31 07:02:47 +00:00
style.css fix(security): sandbox _serve_static() to prevent path traversal 2026-04-02 06:39:27 +00:00
ui.js fix(security): 5 security hardening fixes 2026-04-02 06:46:40 +00:00
workspace.js fix(frontend): use URL origin for fetch/EventSource to support reverse proxy auth 2026-03-31 15:00:38 +00:00