Hermes WebUI < 0.51.443 - Broken Access Control in /api/session Endpoint
Description
Hermes WebUI before 0.51.443 contains a broken access control vulnerability in the /api/session endpoint that allows authenticated users to disclose cross-profile session transcripts. Attackers can bypass profile boundary checks by directly querying session IDs belonging to other profiles via GET /api/session?session_id=<foreign_id>&messages=1 to retrieve unauthorized conversation transcripts and metadata.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected products
1- Range: <0.51.443
Patches
Vulnerability mechanics
Root cause
"Missing profile boundary check in by-id session detail endpoints allows cross-profile session transcript disclosure."
Attack vector
An authenticated attacker can bypass profile boundary checks by directly querying a known or guessed session ID belonging to another profile via `GET /api/session?session_id=<foreign_id>&messages=1` to retrieve unauthorized conversation transcripts and metadata. The same issue affects `GET /api/session/export?session_id=<foreign_id>` for full transcript JSON downloads. The `/api/sessions` list endpoint already scoped its rows to the active profile, but the by-id detail endpoints did not apply the same check, making them vulnerable to cross-profile information disclosure [ref_id=1].
Affected code
The vulnerability exists in `api/routes.py` in the `handle_get` function (for `GET /api/session`) and the `_handle_session_export` function (for `GET /api/session/export`). Both endpoints loaded a session purely by its session ID without verifying that the session belonged to the request's active Hermes profile, allowing cross-profile disclosure. The patch adds a `_session_visible_to_active_profile` check that returns a 404 when the session's profile does not match the active profile [patch_id=6466842][patch_id=6466841].
What the fix does
The patch introduces a `_session_visible_to_active_profile` helper function in `api/routes.py` that compares the session's profile against the active profile using the existing `_profiles_match` function. This check is inserted early in both `handle_get` (for both regular sessions and CLI-session fallback) and `_handle_session_export`, returning a generic 404 "Session not found" response when the profiles do not match, which also avoids revealing the existence of foreign-profile sessions [patch_id=6466842][patch_id=6466841].
Preconditions
- authThe attacker must be an authenticated user of the Hermes WebUI application.
- inputThe attacker must know or guess a session ID belonging to a different profile.
Generated on Jun 18, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/nesquena/hermes-webui/commit/2a3baa71b81ca92da8ece8616a09f15894beec71mitrepatch
- www.vulncheck.com/advisories/hermes-webui-broken-access-control-in-api-session-endpointmitrethird-party-advisory
- github.com/nesquena/hermes-webui/pull/3982mitretechnical-description
- github.com/nesquena/hermes-webui/pull/4269mitreissue-tracking
- github.com/nesquena/hermes-webui/releases/tag/v0.51.443mitrerelease-notes
News mentions
0No linked articles in our index yet.