CVE-2026-87810
Executive Summary
CVE-2026-87810 is an information disclosure vulnerability affecting the SiYuan personal knowledge management system in versions prior to v3.8.2. The flaw resides in the handling of search aggregations within the POST /api/search/fullTextSearchBlock endpoint when operating in publish mode. Unauthenticated readers can submit arbitrary search queries that return unfiltered statistical match counts for private or hidden blocks and pages, despite the underlying text content being omitted from the response body. This enables remote attackers to perform blind inferential enumeration to confirm the existence and exact frequency of sensitive keywords, credentials, or internal document titles stored within restricted documents.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
SiYuan is an open-source, local-first personal knowledge management system that provides note-taking, document publishing, and full-text search functionality. When configured in publish mode, SiYuan allows administrators to share specific notebooks or documents publicly while retaining granular access control options to keep specific blocks or child pages marked as private or hidden.
The vulnerability stems from a logic flaw and differential access control enforcement within the full-text search backend processing the POST /api/search/fullTextSearchBlock API endpoint.
When a client issues an HTTP POST request to /api/search/fullTextSearchBlock, the application executes a search query against the local database index. The backend implementation enforces authorization at the item payload level—filtering out private text blocks before assembling the final list of content objects returned to the caller. However, the search service calculates global metadata and statistical counters (such as aggregate match count, total matching block count, and matching page count) prior to applying authorization filtering, or fails to recalculate these metrics after private blocks have been removed from the result list.
As a result, the response returned to an unauthenticated public reader contains an empty or redacted result array alongside valid, accurate match counters. This creates a classic side-channel aggregation oracle (CWE-200: Exposure of Sensitive Information to an Unauthorized Actor).
By leveraging this inferential channel, an attacker can construct automated dictionary or brute-force search queries. For example, by sending specific queries for strings such as password=, API_KEY=, internal project names, or specific employee names, an attacker can compare response match counts. A non-zero match count unequivocally confirms that the specified keyword exists within a private or hidden document, effectively mapping out sensitive content across restricted repositories without needing direct read permissions for the text blocks themselves.
Exploitation Scenarios
No public proof-of-concept (PoC) exploit code is currently available for CVE-2026-87810. The following attack scenario describes the exploitation mechanism based strictly on the vulnerability details and API behavior specified in the NVD entry.
Reconnaissance & Target Identification: An unauthenticated attacker scans public-facing networks to discover exposed SiYuan instances running in publish mode using network search engines or HTTP header/title fingerprints.
Flaw Triggering: The attacker issues HTTP POST requests to the
/api/search/fullTextSearchBlockendpoint of the identified target instance without supplying authentication credentials.Payload & Execution Method: The attacker automates search submissions containing specific wordlists, character prefixes, or targeted string patterns.
- Query 1: "CONFIDENTIAL" -> Response returns
0content objects in the payload array, butmatchCount: 14. - Query 2: "Project Alpha" -> Response returns
0content objects in the payload array, butmatchCount: 3. - Query 3: "NonExistentString123" -> Response returns
0content objects andmatchCount: 0.
- Query 1: "CONFIDENTIAL" -> Response returns
Post-Exploitation Impact: By analyzing the differential match count values, the attacker confirms the presence of restricted documents containing proprietary information, strategic planning notes, or internal credentials. The attacker uses character-by-character dictionary expansion to reconstruct specific sensitive strings stored within private SiYuan blocks.
Impact Assessment
CVE-2026-87810 carries a CVSS v3.1 base score of 5.3 (Medium) with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N.
- Confidentiality (Low - 0.22): Direct access to full document content is prevented by payload-level access controls. However, the exposure of search count metadata exposes sensitive state information, enabling keyword discovery and blind confirmation of confidential data.
- Integrity (None - 0.00): The vulnerability provides read-only information disclosure; attackers cannot modify, create, or delete note content or configuration settings.
- Availability (None - 0.00): The vulnerability does not directly cause application crashes, memory corruption, or service degradation.
Business & Operational Risk
For organizations using SiYuan to host public documentation, knowledge bases, or developer wikis, this flaw poses a reconnaissance risk. Attackers can leverage the search oracle to verify internal codenames, infrastructure details, vulnerability references, or corporate sensitive terms present in unpublished drafts or internal pages co-located on the same instance.
Detection Guidance
Sigma Rule
title: SiYuan Information Disclosure via Search API
id: a1f83c21-9d41-4122-b0b8-62e912f71800
status: experimental
description: Detects HTTP POST requests targeting the SiYuan search endpoint /api/search/fullTextSearchBlock which may indicate automated keyword enumeration attempts.
author: Security Operations Center
date: 2026-03-30
tags:
- attack.reconnaissance
- attack.t1213
- cve.2026.87810
logsource:
category: webserver
detection:
selection:
cs-method: 'POST'
cs-uri-stem|endsWith: '/api/search/fullTextSearchBlock'
condition: selection
falsepositives:
- Legitimate user searches within public published SiYuan instances.
level: medium
YARA Rule
rule SiYuan_CVE_2026_87810_Search_Exploit {
meta:
description = "Detects HTTP payload patterns targeting SiYuan fullTextSearchBlock endpoint"
author = "Threat Intelligence Team"
date = "2026-03-30"
cve = "CVE-2026-87810"
score = 50
strings:
$endpoint = "/api/search/fullTextSearchBlock" ascii
$method = "POST" ascii
$json_key = "query" ascii wide
condition:
all of them
}
Suricata IDS Rule
alert http $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"EXPLOIT SiYuan FullTextSearchBlock Endpoint Access (CVE-2026-87810)"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"/api/search/fullTextSearchBlock"; fast_pattern; classtype:web-application-activity; sid:8000001; rev:1;)
Elastic Detection
sequence by source.ip with maxspan=1m
[http where http.request.method == "POST" and url.path : "*/api/search/fullTextSearchBlock"]
Splunk SPL Query
index=web_logs sourcetype=access_combined uri_path="*/api/search/fullTextSearchBlock" http_method="POST"
| stats count by src_ip, uri_path, status
| where count > 20
Wazuh OSSEC Rule
<group name="web,siyuan,">
<rule id="100220" level="7">
<if_sid">31100</if_sid>
<url>/api/search/fullTextSearchBlock</url>
<description>SiYuan search endpoint accessed via POST (CVE-2026-87810 tracking)</description>
<mitre>
<id>T1213</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Status
Patch Confidence: 0/4 — UNPATCHED (No patch evidence from tracked distribution repositories). Note: NVD vendor description indicates the vulnerability is addressed in SiYuan versions v3.8.2 and later.
Immediate Workarounds & Mitigations
- Restrict Endpoint Access via Reverse Proxy:
If running SiYuan in publish mode behind Nginx, Caddy, or Apache, block or restrict access to the API search path for unauthenticated users:
location /api/search/fullTextSearchBlock { # Deny unauthenticated public access return 403; } - Disable Public Publish Mode: Disable publish mode on instances that host sensitive or internal private blocks until an upgrade can be applied.
- Web Application Firewall (WAF):
Implement rate-limiting and inspection rules on
POST /api/search/fullTextSearchBlockto detect and block automated high-frequency query bursts.
Patch & Upgrade Steps
- Review current running version of SiYuan.
- Upgrade SiYuan to version
v3.8.2or later from the official project releases. - Restart the service and verify that unauthenticated POST requests to
/api/search/fullTextSearchBlockno longer expose aggregate match counts for unpublished content.
Long-Term Hardening
- Separate public documentation hosting from internal knowledge management instances. Do not co-locate private notes on publicly accessible publish-mode servers.
- Apply strict network segmentation and place administration interfaces behind enterprise SSO/VPN infrastructure.
References
NVD CVE Details:
https://nvd.nist.gov/vuln/detail/CVE-2026-87810SiYuan Official Repository:
https://github.com/siyuan-note/siyuanMITRE ATT&CK Framework - T1213 (Data from Information Repositories):
https://attack.mitre.org/techniques/T1213/
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.