CVE-2026-49956
Executive Summary
CVE-2026-49956 is a profile isolation bypass vulnerability in Hermes WebUI versions before 0.51.269. The flaw allows authenticated users to access session data (titles and transcript messages) belonging to other profiles by querying the session search endpoint without proper active-profile filtering. This is a classic Improper Access Control (CWE-284) issue, where the application fails to enforce that a user can only search within their own profile’s sessions. The CVSS score of 6.5 (Medium) reflects the need for authentication but the high confidentiality impact. No public exploit code or proof-of-concept is available, and the patch status remains unknown.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
Hermes WebUI is a self-hosted web application. No NPM, PyPI, Go, or Ruby packages are directly associated with this CVE. However, organizations using containerized deployments should verify the integrity of their Hermes images and ensure they are not running a vulnerable version.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
- Base Score: 6.5 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – attacker must be authenticated
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H) – session titles and transcripts exposed
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium. The vulnerability requires authentication, but once authenticated, an attacker can easily pivot to access other users’ sensitive session data. This is especially dangerous in multi-tenant environments or shared Hermes instances.
Deep Dive & Mechanics
The vulnerability resides in the session search endpoint. In a properly isolated system, when a user performs a search for sessions, the backend should filter results to only include sessions belonging to that user’s active profile. However, in Hermes WebUI before version 0.51.269, the search handler does not enforce this filter. Instead, it queries the entire session database and returns results without checking the profile_id or equivalent field.
Attack Flow:
- Attacker authenticates to Hermes WebUI (e.g., with low-privilege credentials).
- Attacker sends a crafted request to the session search endpoint (e.g.,
POST /api/sessions/searchorGET /sessions?q=...). - The server returns session titles and transcript messages from all profiles, not just the attacker’s own.
- Attacker can iterate through results to exfiltrate sensitive data.
Root Cause: Missing authorization check in the search handler. The code likely uses a query like SELECT * FROM sessions WHERE title LIKE '%search_term%' without appending AND profile_id = current_user_profile_id.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
# Vulnerable search handler
def search_sessions(search_term):
query = "SELECT id, title, transcript FROM sessions WHERE title LIKE ?"
results = db.execute(query, ('%' + search_term + '%',))
return results
Patched Code (Conceptual):
# Patched search handler
def search_sessions(search_term, user_profile_id):
query = "SELECT id, title, transcript FROM sessions WHERE title LIKE ? AND profile_id = ?"
results = db.execute(query, ('%' + search_term + '%', user_profile_id))
return results
The patch adds a profile_id filter to the SQL query, ensuring that only sessions belonging to the authenticated user’s profile are returned.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Valid credentials for a Hermes WebUI instance (version < 0.51.269).
- Network access to the Hermes WebUI endpoint.
Exploitation Steps:
- Log in to Hermes WebUI and obtain a session token.
- Send a request to the session search endpoint with a broad search term (e.g., empty string or wildcard).
- Parse the JSON response to extract session titles and transcripts from other profiles.
Example Request (using curl):
curl -X POST "https://target-hermes/api/sessions/search" \
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{"search_term": ""}'
Expected Response (truncated):
{
"sessions": [
{"id": 1, "title": "Admin Meeting", "transcript": "Discussed credentials..."},
{"id": 2, "title": "User Support", "transcript": "Password reset for user X..."}
]
}
Blue Team (Detection & Hardening)
Detection:
- Monitor for anomalous search requests that return a large number of sessions or sessions from unexpected profiles.
- Look for repeated search queries with empty or very broad search terms from a single user.
Hardening:
- Immediately upgrade to Hermes WebUI version 0.51.269 or later.
- If patching is not possible, implement a Web Application Firewall (WAF) rule to block requests to the session search endpoint that do not include a valid profile identifier.
- Enforce strict access controls at the API gateway level.
Indicators of Compromise (IOCs)
- Network IOCs:
- Repeated
POST /api/sessions/searchrequests with empty or wildcard search terms. - Unusually large response sizes from the session search endpoint.
- Repeated
- Log IOCs:
- Log entries showing a single user querying sessions from multiple profiles.
- Database queries that lack a
profile_idfilter in the WHERE clause.
- File IOCs:
- No specific file-based IOCs.
Detection Engineering
YARA Rule
rule CVE_2026_49956_Hermes_Profile_Isolation_Bypass {
meta:
description = "Detects attempts to exploit CVE-2026-49956 by searching for session data without profile filtering"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2026-49956"
strings:
$search_endpoint = "/api/sessions/search"
$broad_search = "search_term\": \"\""
$wildcard_search = "search_term\": \"%\""
condition:
any of ($search_endpoint) and any of ($broad_search, $wildcard_search)
}
Sigma Rule
title: Hermes WebUI Profile Isolation Bypass Attempt
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects attempts to exploit CVE-2026-49956 by searching for session data without profile filtering
author: Valters IT
date: 2025-04-10
logsource:
category: web
product: hermes_webui
detection:
selection:
http.method: POST
http.url: "/api/sessions/search"
http.body|contains: "search_term"
condition: selection
falsepositives:
- Legitimate broad searches by administrators
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2026-49956 Hermes WebUI Profile Isolation Bypass Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/api/sessions/search"; http_uri;
content:"search_term"; http_client_body;
sid:1000001;
rev:1;
reference:cve,2026-49956;
classtype:attempted-recon;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Update Hermes WebUI to version 0.51.269 or later as soon as a patch is released.
- Workaround: If patching is delayed, restrict access to the session search endpoint using a reverse proxy or WAF. Only allow requests from trusted IPs or with specific headers.
- Audit: Review access logs for any signs of exploitation.
Long-Term Measures:
- Implement proper authorization checks in all API endpoints.
- Conduct regular security code reviews focusing on access control.
- Use automated tools to scan for similar vulnerabilities.
Valters IT Signature This report was generated by Valters IT Cyber Threat Intelligence Division. For questions, contact threatintel@valtersit.com.