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:requestorchat:start - Why exploitation is possible: Socket.IO handling does not enforce authentication equivalent to the HTTP
/rpcmiddleware, 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:requestorchat:start - Why exploitation is possible: Socket.IO handling does not enforce authentication equivalent to the HTTP
/rpcmiddleware, 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.

