☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Siyuan logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N 🐛 CWE-200
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-87810

CVE-2026-87810 Information Disclosure in Siyuan
📅 PUBLISHED: 2026-09-09 00:00 UTC 🔄 UPDATED: 2026-09-23 20:33 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.21%
👁️
0.21% probability
5.1× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1213
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: China License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 5.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

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.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
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.

  1. 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.

  2. Flaw Triggering: The attacker issues HTTP POST requests to the /api/search/fullTextSearchBlock endpoint of the identified target instance without supplying authentication credentials.

  3. Payload & Execution Method: The attacker automates search submissions containing specific wordlists, character prefixes, or targeted string patterns.

    • Query 1: "CONFIDENTIAL" -> Response returns 0 content objects in the payload array, but matchCount: 14.
    • Query 2: "Project Alpha" -> Response returns 0 content objects in the payload array, but matchCount: 3.
    • Query 3: "NonExistentString123" -> Response returns 0 content objects and matchCount: 0.
  4. 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

  1. 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;
    }
    
  2. Disable Public Publish Mode: Disable publish mode on instances that host sensitive or internal private blocks until an upgrade can be applied.
  3. Web Application Firewall (WAF): Implement rate-limiting and inspection rules on POST /api/search/fullTextSearchBlock to detect and block automated high-frequency query bursts.

Patch & Upgrade Steps

  1. Review current running version of SiYuan.
  2. Upgrade SiYuan to version v3.8.2 or later from the official project releases.
  3. Restart the service and verify that unauthenticated POST requests to /api/search/fullTextSearchBlock no 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

  1. NVD CVE Details:
    https://nvd.nist.gov/vuln/detail/CVE-2026-87810

  2. SiYuan Official Repository:
    https://github.com/siyuan-note/siyuan

  3. MITRE ATT&CK Framework - T1213 (Data from Information Repositories):
    https://attack.mitre.org/techniques/T1213/

👁️ SHODAN DORKS (THREAT HUNTING)

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.

http.title:"SiYuan"
http.html:"/api/search/fullTextSearchBlock"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-87810/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.