/

CVE-2026-49410

Severity:

HIGH RISK

(8.1)

Cross-Site Request Forgery (CWE-352) in OpenHuman Desktop App

CVE-2026-49410

Deferred

Vulnerability type

Category:

Cross-Site Request Forgery

CWE:

CWE-352, CWE-384

Impact:

Local session hijacking and unauthorized session switching

Severity:

HIGH RISK

(8.1)

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 contains a cross-site request forgery vulnerability in its unauthenticated local Telegram authentication callback. A malicious webpage may cause a user with the local OpenHuman core running to switch the active session to an attacker-controlled account, potentially exposing later agent activity and connected messages.

OpenHuman contains a cross-site request forgery vulnerability in its unauthenticated local Telegram authentication callback. A malicious webpage may cause a user with the local OpenHuman core running to switch the active session to an attacker-controlled account, potentially exposing later agent activity and connected messages.

Affected context

The issue affects OpenHuman desktop deployments that expose the local

/auth/telegram callback on loopback port 7788 and accept browser requests

without validating their origin or fetch metadata. Risk is present when a

user visits attacker-controlled web content while the local core is running

and the callback can consume a valid one-time Telegram authentication token.

The issue affects OpenHuman desktop deployments that expose the local

/auth/telegram callback on loopback port 7788 and accept browser requests

without validating their origin or fetch metadata. Risk is present when a

user visits attacker-controlled web content while the local core is running

and the callback can consume a valid one-time Telegram authentication token.

Exploit preconditions

  • Attack surface: The unauthenticated Telegram authentication callback on the local loopback interface
  • Required access: An attacker-controlled webpage and an attacker-owned OpenHuman account
  • Victim condition: The user has the OpenHuman local core running and visits the malicious page
  • Trigger point: A cross-origin browser request to the local /auth/telegram endpoint
  • Why exploitation is possible: The handler accepts the supplied one-time authentication token and stores the resulting JWT without verifying the request origin or browser fetch metadata
  • Attack surface: The unauthenticated Telegram authentication callback on the local loopback interface
  • Required access: An attacker-controlled webpage and an attacker-owned OpenHuman account
  • Victim condition: The user has the OpenHuman local core running and visits the malicious page
  • Trigger point: A cross-origin browser request to the local /auth/telegram endpoint
  • Why exploitation is possible: The handler accepts the supplied one-time authentication token and stores the resulting JWT without verifying the request origin or browser fetch metadata

Why this happens

The vulnerability results from treating a state-changing authentication callback

as safe to invoke through an unauthenticated cross-origin browser request.

The handler consumes attacker-influenced authentication data and replaces the

locally stored session without enforcing an origin, Fetch Metadata, or equivalent

request-integrity check. This maps primarily to CWE-352: Cross-Site Request Forgery, with session replacement behavior also related to CWE-384: Session Fixation.

The vulnerability results from treating a state-changing authentication callback

as safe to invoke through an unauthenticated cross-origin browser request.

The handler consumes attacker-influenced authentication data and replaces the

locally stored session without enforcing an origin, Fetch Metadata, or equivalent

request-integrity check. This maps primarily to CWE-352: Cross-Site Request Forgery, with session replacement behavior also related to CWE-384: Session Fixation.

Potential impact

  • An attacker may switch the victim's active local session to the attacker's account
  • Subsequent agent actions may be exposed to or controlled by the attacker
  • Local memory writes and other agent-generated data could be associated with the wrong account
  • Telegram messages and connected account activity may be disclosed
  • The victim's workflow could be disrupted through unauthorized session changes
  • An attacker may switch the victim's active local session to the attacker's account
  • Subsequent agent actions may be exposed to or controlled by the attacker
  • Local memory writes and other agent-generated data could be associated with the wrong account
  • Telegram messages and connected account activity may be disclosed
  • The victim's workflow could be disrupted through unauthorized session changes

General mitigation guidance

Mitigation generally focuses on protecting local authentication callbacks as

state-changing operations rather than treating them as ordinary GET requests.

Common defensive patterns include:

  • Require an unpredictable, user-bound authentication state or nonce for callback completion
  • Validate request origin and relevant Fetch Metadata headers where supported
  • Prefer browser-safe callback designs that do not perform session mutation solely from ambient requests
  • Bind authentication completion to an explicit user interaction or local authorization step
  • Reject unexpected cross-origin requests and avoid unauthenticated state-changing GET endpoints
  • Store sessions with least privilege and limit the actions available to newly established sessions
  • Log and alert on unexpected local session replacement events

Mitigation generally focuses on protecting local authentication callbacks as

state-changing operations rather than treating them as ordinary GET requests.

Common defensive patterns include:

  • Require an unpredictable, user-bound authentication state or nonce for callback completion
  • Validate request origin and relevant Fetch Metadata headers where supported
  • Prefer browser-safe callback designs that do not perform session mutation solely from ambient requests
  • Bind authentication completion to an explicit user interaction or local authorization step
  • Reject unexpected cross-origin requests and avoid unauthenticated state-changing GET endpoints
  • Store sessions with least privilege and limit the actions available to newly established sessions
  • Log and alert on unexpected local session replacement events

How teams detect issues like this

Organizations can look for:

  • Static analysis rules identifying state-changing GET handlers and authentication callbacks without CSRF protections
  • Code review signals such as session writes performed without origin, nonce, or Fetch Metadata validation
  • Tests that issue cross-origin requests to local endpoints and verify that session state remains unchanged
  • Policy checks requiring CSRF protection for all authentication and session-management operations
  • Runtime telemetry for unexpected session replacement, unusual callback requests, or abrupt account changes

Automated security review tools may help identify local web endpoints that mutate credentials without request-integrity checks.

Organizations can look for:

  • Static analysis rules identifying state-changing GET handlers and authentication callbacks without CSRF protections
  • Code review signals such as session writes performed without origin, nonce, or Fetch Metadata validation
  • Tests that issue cross-origin requests to local endpoints and verify that session state remains unchanged
  • Policy checks requiring CSRF protection for all authentication and session-management operations
  • Runtime telemetry for unexpected session replacement, unusual callback requests, or abrupt account changes

Automated security review tools may help identify local web endpoints that mutate credentials without request-integrity checks.

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-c4m9-hw7m-vv3m

Frequently asked

questions

It can be triggered remotely through a malicious webpage, but the vulnerable

service is the user's local OpenHuman core on the loopback interface. The

attacker generally does not need direct network access to the loopback port.

The attacker needs an account that can complete the Telegram authentication

flow and must cause a user with the local core running to visit attacker-controlled

web content.

Protect the callback with a user-bound state or nonce, validate the request

origin and browser metadata, and require explicit authorization before replacing

the active local session.

Treat local browser-facing endpoints as exposed attack surfaces, prohibit

unauthenticated state-changing GET requests, test cross-origin behavior, and

enforce consistent CSRF protections for authentication and session-management

code.

It can be triggered remotely through a malicious webpage, but the vulnerable

service is the user's local OpenHuman core on the loopback interface. The

attacker generally does not need direct network access to the loopback port.

The attacker needs an account that can complete the Telegram authentication

flow and must cause a user with the local core running to visit attacker-controlled

web content.

Protect the callback with a user-bound state or nonce, validate the request

origin and browser metadata, and require explicit authorization before replacing

the active local session.

Treat local browser-facing endpoints as exposed attack surfaces, prohibit

unauthenticated state-changing GET requests, test cross-origin behavior, and

enforce consistent CSRF protections for authentication and session-management

code.

Find out what's already
exploitable in your codebase.