Someone left the diary on the porch and removed the lock's anti-pick pins
CVE-2026-73056 affects SiYuan kernel versions before 3.7.4. The CheckAuth() middleware validates the API token (Conf.Api.Token) via Authorization header or ?token= query parameter, but neither path integrates with the built-in CAPTCHA or lockout mechanisms (NeedCaptcha / WrongAuthCount). An unauthenticated remote attacker can make unlimited guesses against the token, and if successful, gains RoleAdministrator access — enabling arbitrary file operations and SQL queries against the workspace database. A companion issue (CVE-2026-73046) affects the HTTP Basic Auth branch similarly.
The vendor's CVSS 9.8 CRITICAL rating assumes an internet-reachable instance with a weak, guessable token. That score dramatically overstates the risk for enterprise environments. SiYuan is a *personal* open-source note-taking and knowledge management app with ~45k GitHub stars — it is not enterprise infrastructure. The vast majority of its ~45,000 active installations run as local desktop apps bound to localhost, completely unreachable from the network. Only the self-hosted Docker/VPS subset is remotely exploitable, and even then, brute-forcing a sufficiently entropic token is computationally infeasible. For an enterprise fleet of 10,000 hosts, SiYuan presence is likely single-digit at best, installed ad-hoc by individual developers — not centrally managed, not on a critical path, and not holding regulated data.
4 steps from start to impact.
Identify internet-exposed SiYuan instance
/api/system/version endpoint. Only Docker/VPS self-hosted instances with open ports are reachable.- SiYuan instance must be network-accessible (not localhost-bound desktop mode)
- Port 6806 or reverse-proxy path must be reachable from the internet
- Default desktop installations bind to 127.0.0.1 — unreachable remotely
- Enterprise firewalls and NAT prevent casual exposure of developer tools
- No Shodan/Censys evidence of significant SiYuan exposure footprint
Brute-force the API token
Authorization: Token <guess> requests to any /api/* endpoint. The CheckAuth() middleware compares each guess to Conf.Api.Token without rate limiting, lockout, or CAPTCHA enforcement. The comparison also uses non-constant-time string comparison, theoretically leaking timing information, though this is secondary to the rate-limiting gap.- API token must be configured (if unset, there is no auth — a separate, worse problem)
- Token must be short or low-entropy enough to be practically guessable
- A user-chosen token of 20+ alphanumeric characters has ~119 bits of entropy — brute force is infeasible
- Even a 10-character alphanumeric token has ~59 bits — still impractical at network speeds
- The attack only works against short PINs or dictionary-strength passwords used as tokens
/api/*; web server access logs showing abnormal request volume to SiYuan endpointsObtain RoleAdministrator access
/api/file/*), SQL queries (/api/query/sql), and system configuration endpoints. The attacker can read, modify, or delete all workspace content.- Successful token guess from step 2
- Blast radius is limited to the SiYuan workspace — personal notes and documents
- No lateral movement capability to other hosts or enterprise systems
- No privilege escalation to the underlying OS unless chained with a separate RCE
Data exfiltration or workspace manipulation
- Admin API access from step 3
- Personal note-taking data rarely contains credentials, secrets, or regulated PII in enterprise contexts
- No pivot to domain resources, identity systems, or infrastructure
The supporting signals.
| In-the-wild exploitation | No evidence of active exploitation. Not listed in CISA KEV. No known campaigns targeting SiYuan brute-force. |
|---|---|
| Proof of concept | No public PoC exploit identified as of 2026-08-17. The attack is conceptually trivial (HTTP request loop) but effectiveness depends entirely on token entropy. |
| EPSS score | Not yet available — CVE disclosed 2026-08-16, EPSS model likely has not scored it yet. Expected to be low given niche attack surface. |
| KEV status | Not listed in CISA Known Exploited Vulnerabilities catalog. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). Vector assumes network-reachable instance and trivially guessable token — both conditions fail in most deployments. |
| Affected versions | SiYuan kernel < 3.7.4 (all prior versions with API token authentication enabled) |
| Fixed version | SiYuan v3.7.4 — integrates CAPTCHA/lockout mechanisms into CheckAuth() token validation path |
| Scanning / exposure data | No significant SiYuan footprint visible on Shodan or Censys. Default desktop installs bind to localhost. Docker/VPS deployments are a small minority of the ~45k install base. |
| Disclosure date | 2026-08-16 |
| Related CVEs | CVE-2026-73046 (same component, Basic Auth branch brute-force), CVE-2026-66012 (missing authorization in MCP endpoint, pre-3.7.2), CVE-2025-31485 (auth bypass via origin trust) |
noisgate verdict.
The single most decisive downgrade factor is near-zero enterprise exposure population: SiYuan is a personal note-taking desktop app where the vast majority of installations bind to localhost, making the network attack vector unreachable. Even among the small self-hosted subset, the brute-force requires a weak/short token to succeed, and the blast radius on success is limited to personal workspace documents with no lateral movement capability.
Why this verdict
- Exposure population near zero: SiYuan is a personal knowledge management desktop app. Default installations bind the kernel to
127.0.0.1:6806. Only the Docker/VPS self-hosted minority are remotely reachable, and enterprise adoption is negligible — most 10,000-host fleets have zero SiYuan instances in their CMDB. - Token entropy kills the chain: The brute-force is only viable against short PINs or dictionary-word tokens. Any token of 12+ random alphanumeric characters (~71 bits) is computationally infeasible to guess at network speeds. The vulnerability is real but practical exploitation requires a weak token.
- Blast radius is personal-workspace-scoped: Even full exploitation yields access to notes, documents, and workspace SQL — not OS-level access, not domain credentials, not lateral movement. There is no privilege escalation to the host OS without chaining a separate RCE vulnerability.
- Role multiplier: SiYuan occupies *no* high-value infrastructure role. It is not a domain controller, identity provider, hypervisor, CI/CD server, backup system, or network edge appliance. It is a personal productivity tool. The worst plausible role is a team knowledge base on a single VPS, where compromise affects document integrity for that team — a bounded, tenant-scoped impact. No high-value-role floor applies.
- No active exploitation or KEV listing: No evidence of in-the-wild use, no campaigns, no KEV entry. The CVE was disclosed yesterday (2026-08-16) with a fix already available.
Why not higher?
To warrant HIGH, the affected component would need to occupy a high-value infrastructure role or have demonstrated active exploitation. SiYuan is a personal note-taking tool with near-zero enterprise footprint, localhost-default binding, and token-entropy-dependent exploitation. The blast radius is limited to workspace documents with no lateral movement — there is no plausible path to domain compromise, fleet impact, or regulated data exposure through this vulnerability alone.
Why not lower?
The vulnerability mechanism is real and technically sound — CheckAuth() genuinely lacks rate limiting. If an organization does run an internet-exposed SiYuan instance with a weak token (e.g., a developer's personal VPS syncing work notes), the compromise is complete within that workspace. The unauthenticated-remote attack vector with no user interaction keeps this above LOW for the narrow population that is exposed.
What to do — in priority order.
- Audit for SiYuan instances on your network — Run an asset discovery scan for port 6806 and SiYuan kernel HTTP fingerprints. Most enterprises will find zero instances. If found, determine whether they are internet-exposed. No mitigation SLA applies at MEDIUM — go straight to the 365-day remediation window.
- Block external access to port 6806 — If any SiYuan instances are found exposed to the internet, immediately restrict access via firewall rules or reverse-proxy ACLs to trusted source IPs only. This eliminates the remote attack vector entirely.
- Enforce strong API tokens — If SiYuan must remain accessible, ensure the
Conf.Api.Tokenis at least 20 random alphanumeric characters. This makes brute-force computationally infeasible regardless of the missing rate limiting. - Upgrade to SiYuan v3.7.4 — The fixed version integrates CAPTCHA/lockout into the
CheckAuth()path. Apply within the 365-day noisgate remediation SLA for MEDIUM findings.
- WAF rate-limiting alone — while it adds friction, a determined attacker can slow-roll guesses below WAF thresholds over days/weeks if the token is short. The real fix is strong token entropy or the vendor patch.
- Network segmentation without token hardening — if the instance is on an internal VLAN accessible to compromised workstations, an insider or post-compromise attacker could still brute-force a weak token from within the network.
Crowdsourced verification payload.
Run this on any host with network access to the SiYuan instance. Invoke with: bash check_siyuan_cve2026_73056.sh <hostname:port>. No special privileges required — it makes a single unauthenticated HTTP request to check the version.
#!/usr/bin/env bash
# check_siyuan_cve2026_73056.sh — Check SiYuan kernel version for CVE-2026-73056
# Usage: bash check_siyuan_cve2026_73056.sh <host:port>
# Exit codes: 0=VULNERABLE, 1=PATCHED, 2=UNKNOWN
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 <host:port>" >&2
echo "Example: $0 siyuan.internal:6806" >&2
exit 2
fi
TARGET="$1"
URL="https://${TARGET}/api/system/version"
# Attempt HTTPS first, fall back to HTTP
RESPONSE=$(curl -sk --connect-timeout 5 --max-time 10 "$URL" 2>/dev/null)
if [ -z "$RESPONSE" ]; then
URL="http://${TARGET}/api/system/version"
RESPONSE=$(curl -s --connect-timeout 5 --max-time 10 "$URL" 2>/dev/null)
fi
if [ -z "$RESPONSE" ]; then
echo "UNKNOWN — Could not reach SiYuan kernel at ${TARGET}"
exit 2
fi
# Extract version from JSON response
VERSION=$(echo "$RESPONSE" | grep -oP '"data"\s*:\s*"\K[0-9]+\.[0-9]+\.[0-9]+' 2>/dev/null || true)
if [ -z "$VERSION" ]; then
echo "UNKNOWN — Could not parse version from response: ${RESPONSE}"
exit 2
fi
echo "Detected SiYuan kernel version: ${VERSION}"
# Compare version — vulnerable if < 3.7.4
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
if [ "$MAJOR" -lt 3 ] || \
{ [ "$MAJOR" -eq 3 ] && [ "$MINOR" -lt 7 ]; } || \
{ [ "$MAJOR" -eq 3 ] && [ "$MINOR" -eq 7 ] && [ "$PATCH" -lt 4 ]; }; then
echo "VULNERABLE — SiYuan ${VERSION} is affected by CVE-2026-73056 (fixed in 3.7.4)"
exit 0
else
echo "PATCHED — SiYuan ${VERSION} includes the fix for CVE-2026-73056"
exit 1
fiIf you remember one thing.
Sources
- TheHackerWire — SiYuan Kernel API Token Brute-Force (CVE-2026-73056)
- GitHub — siyuan-note/siyuan repository
- GitHub Security Advisories — SiYuan
- THREATINT — CVE-2026-73046 (companion Basic Auth brute-force)
- RedPacket Security — SiYuan CVE Alerts
- LiuYun — SiYuan Security Flaw Exposed
- FIRST — Exploit Prediction Scoring System (EPSS)
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.