/

CVE-2026-49393

Severity:

HIGH RISK

(8.4)

Authentication Bypass (CWE-288) in OpenHuman Socket.IO

CVE-2026-49393

Received

Vulnerability type

Category:

Authentication Bypass

CWE:

CWE-288, CWE-306

Impact:

Unauthorized access to data and application actions

Severity:

HIGH RISK

(8.4)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

OpenHuman's Socket.IO handlers do not apply authentication equivalent to the bearer check on HTTP POST requests to /rpc. A local unauthenticated client that can connect to the Socket.IO namespace may dispatch requests and, depending on the method, access data or perform actions through the application.

OpenHuman's Socket.IO handlers do not apply authentication equivalent to the bearer check on HTTP POST requests to /rpc. A local unauthenticated client that can connect to the Socket.IO namespace may dispatch requests and, depending on the method, access data or perform actions through the application.

Affected context

The issue affects OpenHuman deployments where the Socket.IO namespace is reachable and its rpc:request or chat:start handlers are available without equivalent authentication checks. Those handlers can reach controller functionality that is protected when invoked through the HTTP /rpc endpoint.

The issue affects OpenHuman deployments where the Socket.IO namespace is reachable and its rpc:request or chat:start handlers are available without equivalent authentication checks. Those handlers can reach controller functionality that is protected when invoked through the HTTP /rpc endpoint.

Exploit preconditions

  • Attack surface: The OpenHuman Socket.IO namespace and its event handlers
  • Required access: Ability to connect as a local unauthenticated client; bearer credentials are not required for these handlers
  • Trigger point: Dispatching a request through rpc:request or chat:start
  • Why exploitation is possible: Socket.IO handling does not enforce authentication equivalent to the HTTP /rpc middleware, creating an alternate path to protected controller functionality
  • Attack surface: The OpenHuman Socket.IO namespace and its event handlers
  • Required access: Ability to connect as a local unauthenticated client; bearer credentials are not required for these handlers
  • Trigger point: Dispatching a request through rpc:request or chat:start
  • Why exploitation is possible: Socket.IO handling does not enforce authentication equivalent to the HTTP /rpc middleware, creating an alternate path to protected controller functionality

Why this happens

Authentication is enforced on the HTTP route but not consistently across the Socket.IO transport and its handlers. This creates an alternate unauthenticated path to controller operations, matching CWE-288: Authentication Bypass Using an Alternate Path or Channel. The lack of an authentication check on the affected handlers also relates to CWE-306: Missing Authentication for Critical Function.

Authentication is enforced on the HTTP route but not consistently across the Socket.IO transport and its handlers. This creates an alternate unauthenticated path to controller operations, matching CWE-288: Authentication Bypass Using an Alternate Path or Channel. The lack of an authentication check on the affected handlers also relates to CWE-306: Missing Authentication for Critical Function.

Potential impact

  • An attacker may read configuration or health data.
  • An attacker could start agent flows or interact with integrated account APIs.
  • Local data may be altered, or services could be stopped or restarted.
  • The effects may vary based on the selected method and the privileges of the running application.
  • An attacker may read configuration or health data.
  • An attacker could start agent flows or interact with integrated account APIs.
  • Local data may be altered, or services could be stopped or restarted.
  • The effects may vary based on the selected method and the privileges of the running application.

General mitigation guidance

Mitigation generally involves applying consistent authentication and authorization across every transport that can reach sensitive operations.

  • Require authentication at the Socket.IO connection or handler level, rather than relying only on HTTP middleware.
  • Apply authorization checks to each operation, including checks that reflect the caller's privileges.
  • Prefer secure-by-default behavior in which unauthenticated connections cannot invoke sensitive handlers.
  • Reduce trust in local clients and limit the application's access to account integrations, data, and service controls.
  • Keep transport routes and controller authorization policies aligned to prevent alternate paths around security checks.

Mitigation generally involves applying consistent authentication and authorization across every transport that can reach sensitive operations.

  • Require authentication at the Socket.IO connection or handler level, rather than relying only on HTTP middleware.
  • Apply authorization checks to each operation, including checks that reflect the caller's privileges.
  • Prefer secure-by-default behavior in which unauthenticated connections cannot invoke sensitive handlers.
  • Reduce trust in local clients and limit the application's access to account integrations, data, and service controls.
  • Keep transport routes and controller authorization policies aligned to prevent alternate paths around security checks.

How teams detect issues like this

Review route and event-handler definitions to identify sensitive controllers reachable through transports with different authentication policies. Static analysis and code review can look for Socket.IO handlers that invoke protected operations without explicit authentication and authorization checks. Policy enforcement can require security checks on every registered handler and test unauthenticated access across all supported transports.

Review route and event-handler definitions to identify sensitive controllers reachable through transports with different authentication policies. Static analysis and code review can look for Socket.IO handlers that invoke protected operations without explicit authentication and authorization checks. Policy enforcement can require security checks on every registered handler and test unauthenticated access across all supported transports.

Sources

SourceLink
github.comgithub.com/tinyhumansai/openhuman/commit/b1bbc53fceed7d1f0cff90cbb0a42f4ab8e153a1
github.comgithub.com/tinyhumansai/openhuman/pull/2331
github.comgithub.com/tinyhumansai/openhuman/releases/tag/v0.56.0
github.comgithub.com/tinyhumansai/openhuman/security/advisories/GHSA-49xv-q9pm-v2qm

Frequently asked

questions

The described issue concerns a local unauthenticated client that can connect to the Socket.IO namespace; it does not establish that the handlers are exposed to remote networks.

The attacker needs the ability to connect to the relevant Socket.IO namespace. The affected handlers do not require the bearer credentials enforced on the HTTP /rpc route.

Enforce authentication and operation-level authorization consistently across every transport that can reach sensitive controller functionality.

Inventory all routes and event handlers, test unauthenticated requests across transports, and use policy checks that prevent sensitive handlers from being registered without appropriate access controls.

The described issue concerns a local unauthenticated client that can connect to the Socket.IO namespace; it does not establish that the handlers are exposed to remote networks.

The attacker needs the ability to connect to the relevant Socket.IO namespace. The affected handlers do not require the bearer credentials enforced on the HTTP /rpc route.

Enforce authentication and operation-level authorization consistently across every transport that can reach sensitive controller functionality.

Inventory all routes and event handlers, test unauthenticated requests across transports, and use policy checks that prevent sensitive handlers from being registered without appropriate access controls.

Find out what's already
exploitable in your codebase.