/

CVE-2026-105783

Severity:

HIGH RISK

(8.0)

CORS Origin Validation (CWE-346) in Joplin Web Clipper

CVE-2026-105783

Deferred

Vulnerability type

Category:

Origin Validation Error

CWE:

CWE-346, CWE-352

Impact:

Unauthorized API Token Disclosure and Data Access

Severity:

HIGH RISK

(8.0)

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

Joplin Desktop's opt-in Web Clipper server may accept browser requests from arbitrary HTTP or HTTPS origins during its pairing flow. If a user approves an origin-unspecific confirmation prompt, an attacking webpage may obtain a permanent API token and use it to read or modify Joplin data.

Joplin Desktop's opt-in Web Clipper server may accept browser requests from arbitrary HTTP or HTTPS origins during its pairing flow. If a user approves an origin-unspecific confirmation prompt, an attacking webpage may obtain a permanent API token and use it to read or modify Joplin data.

Affected context

The issue occurs in Joplin Desktop deployments where the optional Web Clipper server is enabled and pairing requests are handled without validating the requesting web origin. Broad CORS behavior and a confirmation dialog that does not identify the origin can make it difficult for a user to distinguish a trusted pairing request from one initiated by an unrelated website.

The issue occurs in Joplin Desktop deployments where the optional Web Clipper server is enabled and pairing requests are handled without validating the requesting web origin. Broad CORS behavior and a confirmation dialog that does not identify the origin can make it difficult for a user to distinguish a trusted pairing request from one initiated by an unrelated website.

Exploit preconditions

  • Attack surface: The locally running Joplin Web Clipper server and its browser-accessible pairing endpoints
  • Required access: The victim must have Joplin Desktop with the opt-in Web Clipper server enabled and must approve the pairing prompt
  • Trigger point: Requests to the pairing and authentication endpoints from an arbitrary HTTP or HTTPS website
  • Why exploitation is possible: The server permits cross-origin access without sufficiently validating the requesting origin, while the approval prompt does not provide origin-specific context
  • Attack surface: The locally running Joplin Web Clipper server and its browser-accessible pairing endpoints
  • Required access: The victim must have Joplin Desktop with the opt-in Web Clipper server enabled and must approve the pairing prompt
  • Trigger point: Requests to the pairing and authentication endpoints from an arbitrary HTTP or HTTPS website
  • Why exploitation is possible: The server permits cross-origin access without sufficiently validating the requesting origin, while the approval prompt does not provide origin-specific context

Why this happens

The vulnerability results from insufficient origin validation in a browser-accessible local service. The server accepts cross-origin requests and exposes authentication pairing behavior without rejecting untrusted HTTP or HTTPS origins, while the user-interface confirmation lacks the information needed to bind consent to a particular requester. This maps primarily to CWE-346: Origin Validation Error, with related CWE-352: Cross-Site Request Forgery, because an external webpage can cause authenticated browser-mediated actions against the local service.

The vulnerability results from insufficient origin validation in a browser-accessible local service. The server accepts cross-origin requests and exposes authentication pairing behavior without rejecting untrusted HTTP or HTTPS origins, while the user-interface confirmation lacks the information needed to bind consent to a particular requester. This maps primarily to CWE-346: Origin Validation Error, with related CWE-352: Cross-Site Request Forgery, because an external webpage can cause authenticated browser-mediated actions against the local service.

Potential impact

  • Disclosure of a permanent API token
  • Unauthorized reading of notes, folders, tags, and resources
  • Modification or deletion of Joplin content
  • Exposure of master keys and other sensitive application data
  • Persistent access to the affected Joplin profile through the obtained token
  • Disclosure of a permanent API token
  • Unauthorized reading of notes, folders, tags, and resources
  • Modification or deletion of Joplin content
  • Exposure of master keys and other sensitive application data
  • Persistent access to the affected Joplin profile through the obtained token

General mitigation guidance

Mitigation generally focuses on binding pairing and authentication decisions to trusted origins and making user consent origin-specific.

Common defensive patterns include:

  • Allowing only explicit, trusted origins instead of using wildcard CORS policies
  • Rejecting unexpected HTTP and HTTPS origins at the server boundary
  • Displaying the requesting origin clearly in confirmation dialogs
  • Using short-lived, narrowly scoped pairing credentials where practical
  • Separating token issuance from ordinary cross-origin browser requests
  • Limiting API token permissions and protecting sensitive key material
  • Keeping the local service disabled when its functionality is not required

Mitigation generally focuses on binding pairing and authentication decisions to trusted origins and making user consent origin-specific.

Common defensive patterns include:

  • Allowing only explicit, trusted origins instead of using wildcard CORS policies
  • Rejecting unexpected HTTP and HTTPS origins at the server boundary
  • Displaying the requesting origin clearly in confirmation dialogs
  • Using short-lived, narrowly scoped pairing credentials where practical
  • Separating token issuance from ordinary cross-origin browser requests
  • Limiting API token permissions and protecting sensitive key material
  • Keeping the local service disabled when its functionality is not required

How teams detect issues like this

Organizations can look for this class of issue through:

  • Static analysis checks for wildcard Access-Control-Allow-Origin responses on sensitive endpoints
  • Code review of origin parsing, allowlist enforcement, and credentialed CORS behavior
  • Tests that submit authentication and pairing requests from untrusted HTTP and HTTPS origins
  • Review of confirmation dialogs to verify that consent is bound to a clearly displayed requester
  • Policy enforcement that prevents local services from exposing authentication APIs to arbitrary browser origins
  • Monitoring for unexpected token issuance or access to sensitive local API resources

Automated security review tools may help identify permissive CORS configurations and missing origin checks.

Organizations can look for this class of issue through:

  • Static analysis checks for wildcard Access-Control-Allow-Origin responses on sensitive endpoints
  • Code review of origin parsing, allowlist enforcement, and credentialed CORS behavior
  • Tests that submit authentication and pairing requests from untrusted HTTP and HTTPS origins
  • Review of confirmation dialogs to verify that consent is bound to a clearly displayed requester
  • Policy enforcement that prevents local services from exposing authentication APIs to arbitrary browser origins
  • Monitoring for unexpected token issuance or access to sensitive local API resources

Automated security review tools may help identify permissive CORS configurations and missing origin checks.

Sources

SourceLink
github.comgithub.com/laurent22/joplin/commit/27ae5c0d404ee47ad24862cce917dda6eb2930b7
github.comgithub.com/laurent22/joplin/pull/16276
github.comgithub.com/laurent22/joplin/releases/tag/v3.7.13
github.comgithub.com/laurent22/joplin/security/advisories/GHSA-9728-v7ww-mxjv

Frequently asked

questions

Yes, the relevant attack surface is a locally running Web Clipper server that can be reached by a browser page. Exploitation still depends on the server being enabled and the victim approving the pairing request.

Not necessarily. A webpage may initiate the browser-mediated requests, but the victim generally must be running the affected service and approve the confirmation prompt.

Validate origins against a strict allowlist, reject untrusted HTTP and HTTPS origins, and display the requesting origin clearly before issuing any durable token.

Treat local browser-accessible services as security boundaries, avoid wildcard CORS on authentication endpoints, use scoped or short-lived credentials, and test consent flows against cross-origin requests.

Yes, the relevant attack surface is a locally running Web Clipper server that can be reached by a browser page. Exploitation still depends on the server being enabled and the victim approving the pairing request.

Not necessarily. A webpage may initiate the browser-mediated requests, but the victim generally must be running the affected service and approve the confirmation prompt.

Validate origins against a strict allowlist, reject untrusted HTTP and HTTPS origins, and display the requesting origin clearly before issuing any durable token.

Treat local browser-accessible services as security boundaries, avoid wildcard CORS on authentication endpoints, use scoped or short-lived credentials, and test consent flows against cross-origin requests.

Find out what's already
exploitable in your codebase.