Note Mark: Arbitrary File Write via Path Traversal in Asset Names Leading to Remote Code Execution
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- Passive
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- —
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub.
Summary
Note Mark is an open-source note-taking application. From 0.13.0 to before 0.19.4, the Note Mark application allows authenticated users to upload assets to notes via POST /api/notes/{noteID}/assets, where the asset filename is provided through the X-Name HTTP request header. This value is stored directly in the database without any sanitization or validation - no path separator filtering, no directory traversal sequence rejection, and no use of filepath.Base() to strip directory components. The unsanitized name is persisted as-is in the note_assets table (Name column, varchar(80)). When an administrator subsequently runs the data export CLI commands (note-mark migrate export-v1 or note-mark migrate export), the stored asset name is passed directly into filepath.Join() and path.Join() calls as part of the output file path argument to os.Create(). Since Go's filepath.Join() resolves ../ sequences during path normalization, an attacker-controlled asset name containing directory traversal sequences causes the export process to write files to arbitrary locations on the filesystem, completely outside the intended export directory. This vulnerability is fixed in 0.19.4.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| enchant97 | note-mark | 0.13.0 to before 0.19.4 | 0.19.4 | Patch available | CNA |
| — | github.com/enchant97/note-mark/backend (Go) | before 0.0.0-20260501152243-db3f72bff780 | 0.0.0-20260501152243-db3f72bff780 | Patch available | GHSA-g49p-4qxj-88v3 |
- note-mark Vendorenchant97 Affected 0.13.0 to before 0.19.4 Fixed in 0.19.4 Patch available CNA
- github.com/enchant97/note-mark/backend (Go) Vendor— Affected before 0.0.0-20260501152243-db3f72bff780 Fixed in 0.0.0-20260501152243-db3f72bff780 Patch available GHSA-g49p-4qxj-88v3
Remediation
- Fix · CNA note-mark (enchant97) Fixed in 0.19.4
- Fix · GHSA-g49p-4qxj-88v3 github.com/enchant97/note-mark/backend (Go) Fixed in 0.0.0-20260501152243-db3f72bff780 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-44522
- 2026-10-03 Alias added: GHSA-g49p-4qxj-88v3
- 2026-10-25 EPSS moved to the below the 50th percentile
References
More enchant97 vulnerabilities
- TI-2026-32452 Note Mark: JWT Secret Weakness allows Full Account Takeover via token forgery CVSS 3.1CRITICAL 10.0
- TI-2026-30126 Note Mark: OIDC-registered users authenticated by submitting password "null" CVSS 3.1CRITICAL 9.4
- TI-2026-29056 Note Mark has Stored XSS via Unrestricted Asset Upload CVSS 3.1HIGH 8.7
- TI-2026-37275 Note Mark: Path traversal via unsanitized book/note slug in migrate export (sibling of GHSA-g49p) CVSS 4.0HIGH 8.6
- TI-2026-37276 Note Mark: Unauthenticated disclosure of soft-deleted note metadata via deleted=true on public books in note-mark CVSS 3.1MEDIUM 5.3
- TI-2026-30127 Note Mark: Unauthenticated read of notes and assets in soft-deleted public books CVSS 3.1MEDIUM 5.3
Sources
- CVE-2026-44522 · CVE Program
- CVE-2026-44522 · NVD
- FIRST EPSS
- GHSA-g49p-4qxj-88v3 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences