CVE-2026-69084 Security Alert: CRITICAL Vulnerability

Urgent: CVE-2026-69084 requires immediate attention.

· 7 min read

Executive Summary

CVE-2026-69084 is a critical SQL execution flaw (CVSS 10) in github.com/siyuan-note/siyuan/kernel. The /api/search/searchEmbedBlock endpoint accepts a client-supplied SQL statement and sends it to the database without validation or read-only restrictions. In publish mode, this endpoint is reachable by a reader token, and it may also be reachable anonymously when publish authentication is disabled.

For solo developers and small teams running SiYuan-based services, this is a high-priority patch-now issue. An attacker who can reach the publish surface can read across notebooks and, because the database handle is read-write and stacked statements are allowed, can also modify database content and potentially interact with attached files. This does not require admin privileges.

Immediate Action

  • Disable publish access or place the service behind a trusted VPN / reverse proxy until patched.
  • Turn on publish authentication if you must keep the service online; do not expose port 6808 to the public internet.
  • Upgrade immediately to a vendor release that explicitly fixes CVE-2026-69084. Vendor advisory
  • Rollback to a known-safe build only if you cannot patch quickly, and isolate the instance from untrusted networks.
  • Back up the workspace before restarting or upgrading, especially if the instance has been internet-exposed.

Affected Versions

  • github.com/siyuan-note/siyuan/kernel versions containing the vulnerable /api/search/searchEmbedBlock implementation are affected.
  • Vulnerable: TODO: fill in affected release range
  • Safe: TODO: fill in fixed version or commit
  • If you build from source, any build from a commit before the fix is vulnerable.

Resolution Guide

Docker

# Stop exposing publish mode until patched
docker stop siyuan-poc

# If you must keep it running, restrict network access at the firewall or proxy layer.
# After the vendor fix is available, rebuild or pull the patched image:
docker pull TODO_VENDOR_IMAGE:TODO_FIXED_TAG
docker rm -f siyuan-poc
docker run -d --name siyuan-poc \
  -p 127.0.0.1:6806:6806 \
  -p 127.0.0.1:6808:6808 \
  TODO_VENDOR_IMAGE:TODO_FIXED_TAG

npm / yarn / pnpm — not applicable unless your project vendors this Go module through a wrapper or monorepo build. If so, update the parent application to the fixed release.

npm i TODO_PACKAGE@TODO_FIXED_VERSION
yarn add TODO_PACKAGE@TODO_FIXED_VERSION
pnpm add TODO_PACKAGE@TODO_FIXED_VERSION

pip / pipx — not applicable unless packaged through a Python wrapper.

pip install -U TODO_PACKAGE==TODO_FIXED_VERSION
pipx upgrade TODO_PACKAGE

Maven / Gradle — not directly applicable to this Go module, but update the consuming application artifact if your stack wraps SiYuan.

mvn versions:use-latest-releases
./gradlew dependencies

apt / yum — if your environment installs a distro package or container image, update from the vendor repository once fixed.

sudo apt update
sudo apt install --only-upgrade TODO_PACKAGE
sudo yum update TODO_PACKAGE

Hardening

# Prefer binding publish services to localhost or a private interface
# Example reverse proxy rule: only allow trusted IPs to reach /api/search/searchEmbedBlock

# Disable publish auth bypass
Publish.Auth.Enable=true

# Do not expose the publish port directly to the internet
# Block TCP/6808 at the host firewall

Code fix example — the endpoint should follow the same restrictions as the safer SQL endpoints:

// Pseudocode: enforce single-statement + read-only, and require admin role
router.Handle("POST", "/api/search/searchEmbedBlock",
    model.CheckAuth,
    model.CheckAdminRole,
    model.CheckReadonly,
    searchEmbedBlock,
)

// Inside handler or model path:
stmt := arg["stmt"].(string)
if err := sql.CheckSingleStatement(stmt); err != nil { return err }
if err := sql.CheckReadonlyStatement(stmt); err != nil { return err }

Detection & Verification

Check whether you are exposed:

# Is publish enabled?
curl -s http://127.0.0.1:6806/api/system/version

# Look for the vulnerable route in source or build artifacts
grep -R "searchEmbedBlock" -n .
grep -R "/api/search/searchEmbedBlock" -n .

Verify the fix: the endpoint should reject raw SQL from reader/anonymous access and should not execute stacked or write statements.

# This should fail after the fix
curl -i -X POST http://127.0.0.1:6808/api/search/searchEmbedBlock \
  -H "Content-Type: application/json" \
  -d '{"embedBlockID":"","stmt":"SELECT * FROM blocks LIMIT 1","excludeIDs":[]}'

Expected safe behavior:

  • Anonymous or reader requests are denied, or
  • Only a constrained, read-only statement is accepted, and
  • Stacked statements such as ; ATTACH ... are rejected.

Dependency / image checks:

# If you build from source, pin to a fixed commit or tag
git rev-parse HEAD
git log --oneline --grep="CVE-2026-69084"

# If using containers, record the exact image digest
docker image inspect TODO_IMAGE:TODO_TAG --format '{{.RepoDigests}}'

Risk and Impact

This flaw can expose the contents of all cleartext notebooks reachable by the main database and may allow unauthorized modification of database records. Because the vulnerable endpoint is reachable through the publish surface, a small team that exposes the service publicly is at real risk even without a full admin account.

Encrypted notebooks are not part of the exposed main database path, but the blast radius still includes sensitive plaintext content, metadata, and any data stored in the shared read-write database. Treat this as an urgent containment and patch event.

Keep reading