Skip to content
Heist/ feed
Back to feed
MediumFix available

SiYuan: The publish filter for database backlinks consults the forbidden list instead of the visibility list, disclosing hidden-tier documents to anonymous readers

Type: advisorySources: OSV

### Summary `/api/av/getAttributeViewBacklinks` filters its results for reader roles through `FilterAttributeViewBacklinksByPublishAccess`. That function resolves its ignore list with `GetDisablePublishAccess`, which covers only the forbidden tier. Documents at the hidden tier are absent from that list, so they pass the check. The result is that an anonymous reader supplying a publicly visible database row receives the database name, row title and document path of rows in hidden documents that reference it. The rest of the function is correct. It takes `*gin.Context` and calls `GetPathPasswordByPublishAccess` and `CheckPublishAuthCookie` at all four decision points, so the password-protected and private tiers are properly enforced. The defect is the choice of list, on one line. ### Details **Route,** `kernel/api/router.go:545` on the development branch and `:527` on master: ```go ginServer.Handle("POST", "/api/av/getAttributeViewBacklinks", model.CheckAuth, getAttributeViewBacklinks) ``` `CheckAuth` only. No `CheckAdminRole`, no `CheckReadonly`. **The defect.** In `FilterAttributeViewBacklinksByPublishAccess` (`kernel/model/publish_access.go:1060` on dev, `:435` on master): ```go publishIgnore := GetDisablePublishAccess(publishAccess) ``` `GetDisablePublishAccess` returns only entries at the forbidden tier. A hidden document has `visible:false`, `password:""`, `disable:false`, so it does not appear in that list. `CheckPathAccessableByPublishIgnore` therefore returns true for

Products
github.com/siyuan-note/siyuan/kernel
Affected versions
Not specified
Fixed versions
0.0.0-20260730150429-5b42614311b0
CVEs
CVE-2026-73049
Confirmed fixed CVEs
Not specified
Updated in this feed
1 Nov 2026, 02:32 UTC · Revision 1

Source evidence

SiYuan: The publish filter for database backlinks consults the forbidden list instead of the visibility list, disclosing hidden-tier documents to anonymous readers

core-osv · Original source

Published 23 Oct 2026, 18:30 UTC

### Summary `/api/av/getAttributeViewBacklinks` filters its results for reader roles through `FilterAttributeViewBacklinksByPublishAccess`. That function resolves its ignore list with `GetDisablePublishAccess`, which covers only the forbidden tier. Documents at the hidden tier are absent from that list, so they pass the check. The result is that an anonymous reader supplying a publicly visible database row receives the database name, row title and document path of rows in hidden documents that reference it. The rest of the function is correct. It takes `*gin.Context` and calls `GetPathPasswordByPublishAccess` and `CheckPublishAuthCookie` at all four decision points, so the password-protected and private tiers are properly enforced. The defect is the choice of list, on one line. ### Details **Route,** `kernel/api/router.go:545` on the development branch and `:527` on master: ```go ginServer.Handle("POST", "/api/av/getAttributeViewBacklinks", model.CheckAuth, getAttributeViewBacklinks) ``` `CheckAuth` only. No `CheckAdminRole`, no `CheckReadonly`. **The defect.** In `FilterAttributeViewBacklinksByPublishAccess` (`kernel/model/publish_access.go:1060` on dev, `:435` on master): ```go publishIgnore := GetDisablePublishAccess(publishAccess) ``` `GetDisablePublishAccess` returns only entries at the forbidden tier. A hidden document has `visible:false`, `password:""`, `disable:false`, so it does not appear in that list. `CheckPathAccessableByPublishIgnore` therefore returns true for

osv:GHSA-p4qw-vx5p-g984

github.com/siyuan-note/siyuan/kernel

Fixed versions: 0.0.0-20260730150429-5b42614311b0

Complete source record
{
  "id": "9754170b358418ee5ef5749462d1fe2389f948018ebbbb1bb2d6526fab6239ae",
  "url": "https://osv.dev/vulnerability/GHSA-p4qw-vx5p-g984",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "SiYuan: The publish filter for database backlinks consults the forbidden list instead of the visibility list, disclosing hidden-tier documents to anonymous readers",
    "summary": "### Summary `/api/av/getAttributeViewBacklinks` filters its results for reader roles through `FilterAttributeViewBacklinksByPublishAccess`. That function resolves its ignore list with `GetDisablePublishAccess`, which covers only the forbidden tier. Documents at the hidden tier are absent from that list, so they pass the check. The result is that an anonymous reader supplying a publicly visible database row receives the database name, row title and document path of rows in hidden documents that reference it. The rest of the function is correct. It takes `*gin.Context` and calls `GetPathPasswordByPublishAccess` and `CheckPublishAuthCookie` at all four decision points, so the password-protected and private tiers are properly enforced. The defect is the choice of list, on one line. ### Details **Route,** `kernel/api/router.go:545` on the development branch and `:527` on master: ```go ginServer.Handle(\"POST\", \"/api/av/getAttributeViewBacklinks\", model.CheckAuth, getAttributeViewBacklinks) ``` `CheckAuth` only. No `CheckAdminRole`, no `CheckReadonly`. **The defect.** In `FilterAttributeViewBacklinksByPublishAccess` (`kernel/model/publish_access.go:1060` on dev, `:435` on master): ```go publishIgnore := GetDisablePublishAccess(publishAccess) ``` `GetDisablePublishAccess` returns only entries at the forbidden tier. A hidden document has `visible:false`, `password:\"\"`, `disable:false`, so it does not appear in that list. `CheckPathAccessableByPublishIgnore` therefore returns true for ",
    "evidence": "osv:GHSA-p4qw-vx5p-g984",
    "products": [
      {
        "name": {
          "value": "github.com/siyuan-note/siyuan/kernel",
          "evidence": "/affected/0/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "0.0.0-20260730150429-5b42614311b0",
            "evidence": "/affected/0/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "medium",
    "structured": {
      "id": "GHSA-p4qw-vx5p-g984",
      "aliases": [
        "CVE-2026-73049",
        "GHSA-p4qw-vx5p-g984"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "type": "SEMVER",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "0.0.0-20260730150429-5b42614311b0"
                }
              ]
            }
          ],
          "package": {
            "name": "github.com/siyuan-note/siyuan/kernel",
            "purl": "pkg:golang/github.com/siyuan-note/siyuan/kernel",
            "ecosystem": "Go"
          },
          "database_specific": {
            "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-p4qw-vx5p-g984/GHSA-p4qw-vx5p-g984.json"
          }
        }
      ],
      "modified": "2026-10-23T18:45:08.573625414Z",
      "provider": "osv",
      "references": [
        "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-p4qw-vx5p-g984",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-73049",
        "https://github.com/siyuan-note/siyuan/commit/5b42614311b0afda29ccc65e55d74bf3e8cc9054",
        "https://github.com/siyuan-note/siyuan",
        "https://github.com/siyuan-note/siyuan/releases/tag/v3.7.4-alpha.4",
        "https://www.vulncheck.com/advisories/siyuan-before-information-disclosure-via-getattributeviewbacklinks"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-863"
        ],
        "severity": "MODERATE",
        "github_reviewed": true,
        "nvd_published_at": null,
        "github_reviewed_at": "2026-10-23T18:30:42Z"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-73049",
        "evidence": "/aliases"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 424598,
  "published_at": "2026-10-23T18:30:42+00:00"
}