CWE-863
Allowed-with-ReviewIncorrect Authorization
Abstraction: Class · Status: Incomplete
The product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.
5631 vulnerabilities reference this CWE, most recent first.
GHSA-C635-393C-HCX2
Vulnerability from github – Published: 2026-06-02 09:36 – Updated: 2026-07-09 20:53In version 3.6.19 of prefecthq/prefect, an authentication bypass vulnerability exists due to the improper handling of URL path exemptions for health check probes. Specifically, the authentication middleware exempts any URL path ending with 'health' or 'ready' from authentication checks. This allows an attacker to create resources with names ending in 'health' or 'ready' and access them without authentication. Affected endpoints include those for variables, flows, work pools, work queues, and deployments. This vulnerability can lead to unauthorized access to sensitive information, such as API keys and database credentials, stored in Prefect Variables.
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "prefect"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "3.6.22.dev7"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-3514"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2026-07-09T20:53:13Z",
"nvd_published_at": "2026-06-02T09:16:16Z",
"severity": "HIGH"
},
"details": "In version 3.6.19 of prefecthq/prefect, an authentication bypass vulnerability exists due to the improper handling of URL path exemptions for health check probes. Specifically, the authentication middleware exempts any URL path ending with \u0027health\u0027 or \u0027ready\u0027 from authentication checks. This allows an attacker to create resources with names ending in \u0027health\u0027 or \u0027ready\u0027 and access them without authentication. Affected endpoints include those for variables, flows, work pools, work queues, and deployments. This vulnerability can lead to unauthorized access to sensitive information, such as API keys and database credentials, stored in Prefect Variables.",
"id": "GHSA-c635-393c-hcx2",
"modified": "2026-07-09T20:53:13Z",
"published": "2026-06-02T09:36:15Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-3514"
},
{
"type": "WEB",
"url": "https://github.com/prefecthq/prefect/commit/e21617125335025b4b27e7d6f0ca028e8e8f3b79"
},
{
"type": "PACKAGE",
"url": "https://github.com/PrefectHQ/prefect"
},
{
"type": "WEB",
"url": "https://huntr.com/bounties/c540e5e1-f74f-44f4-bfa0-9764ff6daa75"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "Prefect has an Authentication Middleware Bypass when URL paths are appended with \u0027health\u0027 or \u0027ready\u0027"
}
GHSA-C63C-249M-G37M
Vulnerability from github – Published: 2022-07-02 00:00 – Updated: 2022-07-14 00:00An improper authorization issue in GitLab CE/EE affecting all versions from 13.7 prior to 14.10.5, 15.0 prior to 15.0.4, and 15.1 prior to 15.1.1 allows an attacker to extract the value of an unprotected variable they know the name of in public projects or private projects they're a member of.
{
"affected": [],
"aliases": [
"CVE-2022-2229"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2022-07-01T17:15:00Z",
"severity": "HIGH"
},
"details": "An improper authorization issue in GitLab CE/EE affecting all versions from 13.7 prior to 14.10.5, 15.0 prior to 15.0.4, and 15.1 prior to 15.1.1 allows an attacker to extract the value of an unprotected variable they know the name of in public projects or private projects they\u0027re a member of.",
"id": "GHSA-c63c-249m-g37m",
"modified": "2022-07-14T00:00:17Z",
"published": "2022-07-02T00:00:19Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-2229"
},
{
"type": "WEB",
"url": "https://hackerone.com/reports/1511133"
},
{
"type": "WEB",
"url": "https://gitlab.com/gitlab-org/cves/-/blob/master/2022/CVE-2022-2229.json"
},
{
"type": "WEB",
"url": "https://gitlab.com/gitlab-org/gitlab/-/issues/355738"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-C64P-77M6-V4M5
Vulnerability from github – Published: 2022-05-13 01:53 – Updated: 2022-05-13 01:53An improper authorization vulnerability exists In Schneider Electric's 66074 MGE Network Management Card Transverse installed in MGE UPS and MGE STS. The integrated web server (Port 80/443/TCP) of the affected devices could allow a remote attacker to change UPS control and shutdown parameters or other critical settings without authorization.
{
"affected": [],
"aliases": [
"CVE-2018-7245"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2018-04-18T20:29:00Z",
"severity": "CRITICAL"
},
"details": "An improper authorization vulnerability exists In Schneider Electric\u0027s 66074 MGE Network Management Card Transverse installed in MGE UPS and MGE STS. The integrated web server (Port 80/443/TCP) of the affected devices could allow a remote attacker to change UPS control and shutdown parameters or other critical settings without authorization.",
"id": "GHSA-c64p-77m6-v4m5",
"modified": "2022-05-13T01:53:17Z",
"published": "2022-05-13T01:53:17Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7245"
},
{
"type": "WEB",
"url": "https://www.schneider-electric.com/en/download/document/SEVD-2018-074-01"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-C65F-X25W-62JV
Vulnerability from github – Published: 2026-04-01 21:12 – Updated: 2026-04-01 21:12Summary
Both standalone servers configure CORS with allow_origins=["*"], allow_credentials=True, allow_methods=["*"], and allow_headers=["*"].
Affected Code
# server/key-server/app/main.py:86-92
# server/telemetry-server/app/main.py:23-29
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins, # defaults to ["*"]
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
The docker-compose file (openssl_encrypt_server/docker-compose.yml:75) also defaults CORS_ORIGINS to *, and .env.example ships with CORS_ORIGINS=*.
Impact
This is the most permissive CORS configuration possible, allowing any website to make fully credentialed cross-origin requests to the API. An attacker's website could make authenticated API calls on behalf of any user who visits it.
Recommended Fix
- Remove wildcard defaults — require explicit origin configuration
- Never combine
allow_origins=["*"]withallow_credentials=True - Update
.env.examplewith placeholder domains instead of*
Fix
Fixed in commit 809416b on branch releases/1.4.x — changed CORS default from ["*"] to [] in both key-server and telemetry-server; added validation rejecting wildcard when debug=False.
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "openssl-encrypt"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.4.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2026-04-01T21:12:37Z",
"nvd_published_at": null,
"severity": "MODERATE"
},
"details": "### Summary\n\nBoth standalone servers configure CORS with `allow_origins=[\"*\"]`, `allow_credentials=True`, `allow_methods=[\"*\"]`, and `allow_headers=[\"*\"]`.\n\n### Affected Code\n\n```python\n# server/key-server/app/main.py:86-92\n# server/telemetry-server/app/main.py:23-29\napp.add_middleware(\n CORSMiddleware,\n allow_origins=settings.cors_origins, # defaults to [\"*\"]\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n```\n\nThe docker-compose file (`openssl_encrypt_server/docker-compose.yml:75`) also defaults `CORS_ORIGINS` to `*`, and `.env.example` ships with `CORS_ORIGINS=*`.\n\n### Impact\n\nThis is the most permissive CORS configuration possible, allowing any website to make fully credentialed cross-origin requests to the API. An attacker\u0027s website could make authenticated API calls on behalf of any user who visits it.\n\n### Recommended Fix\n\n- Remove wildcard defaults \u2014 require explicit origin configuration\n- Never combine `allow_origins=[\"*\"]` with `allow_credentials=True`\n- Update `.env.example` with placeholder domains instead of `*`\n\n### Fix\n\nFixed in commit `809416b` on branch `releases/1.4.x` \u2014 changed CORS default from [\"*\"] to [] in both key-server and telemetry-server; added validation rejecting wildcard when debug=False.",
"id": "GHSA-c65f-x25w-62jv",
"modified": "2026-04-01T21:12:37Z",
"published": "2026-04-01T21:12:37Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/jahlives/openssl_encrypt/security/advisories/GHSA-c65f-x25w-62jv"
},
{
"type": "WEB",
"url": "https://github.com/jahlives/openssl_encrypt/commit/809416b74d2749cdcffb484cd65b057e1685cc13"
},
{
"type": "PACKAGE",
"url": "https://github.com/jahlives/openssl_encrypt"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U",
"type": "CVSS_V4"
}
],
"summary": "openssl-encrypt has CORS wildcard with allow_credentials=True in standalone servers"
}
GHSA-C68X-6HMF-XW2P
Vulnerability from github – Published: 2024-10-30 21:30 – Updated: 2024-10-31 18:31Insecure Permissions vulnerability in Ethereum v.1.12.2 allows a remote attacker to escalate privileges via the WaterToken Contract.
{
"affected": [],
"aliases": [
"CVE-2024-51425"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-10-30T21:15:15Z",
"severity": "HIGH"
},
"details": "Insecure Permissions vulnerability in Ethereum v.1.12.2 allows a remote attacker to escalate privileges via the WaterToken Contract.",
"id": "GHSA-c68x-6hmf-xw2p",
"modified": "2024-10-31T18:31:18Z",
"published": "2024-10-30T21:30:41Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-51425"
},
{
"type": "WEB",
"url": "https://github.com/Wzy-source/Gala/blob/main/CVEs/WaterToken_0x8890963266f895aca11fbe4679a1f9cc472f6531.md"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-C6CP-7FRC-R847
Vulnerability from github – Published: 2022-05-24 19:20 – Updated: 2022-07-13 00:01SchedMD Slurm 21.08.* before 21.08.4 has Incorrect Access Control. On sites using the new AccountingStoreFlags=job_script and/or job_env options, the access control rules in SlurmDBD may permit users to request job scripts and environment files to which they should not have access.
{
"affected": [],
"aliases": [
"CVE-2021-43337"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-11-17T06:15:00Z",
"severity": "MODERATE"
},
"details": "SchedMD Slurm 21.08.* before 21.08.4 has Incorrect Access Control. On sites using the new AccountingStoreFlags=job_script and/or job_env options, the access control rules in SlurmDBD may permit users to request job scripts and environment files to which they should not have access.",
"id": "GHSA-c6cp-7frc-r847",
"modified": "2022-07-13T00:01:48Z",
"published": "2022-05-24T19:20:45Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-43337"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/5VY34WSSPRPA6MISNYBZWHSGX2SYSEEE"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/DUWNGDQTS7AWFI7FIHUWQOYJSD2IQTCG"
},
{
"type": "WEB",
"url": "https://lists.schedmd.com/pipermail/slurm-announce"
},
{
"type": "WEB",
"url": "https://lists.schedmd.com/pipermail/slurm-announce/2021/000068.html"
},
{
"type": "WEB",
"url": "https://www.schedmd.com/news.php"
},
{
"type": "WEB",
"url": "https://www.schedmd.com/news.php?id=256"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-C6GW-7J5J-4C6V
Vulnerability from github – Published: 2022-05-24 17:42 – Updated: 2022-05-24 17:42Insufficient access control in some Intel(R) Ethernet E810 Adapter drivers for Linux before version 1.0.4 may allow an authenticated user to potentially enable information disclosure via local access.
{
"affected": [],
"aliases": [
"CVE-2020-24503"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-02-17T14:15:00Z",
"severity": "MODERATE"
},
"details": "Insufficient access control in some Intel(R) Ethernet E810 Adapter drivers for Linux before version 1.0.4 may allow an authenticated user to potentially enable information disclosure via local access.",
"id": "GHSA-c6gw-7j5j-4c6v",
"modified": "2022-05-24T17:42:29Z",
"published": "2022-05-24T17:42:29Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2020-24503"
},
{
"type": "WEB",
"url": "https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00462.html"
}
],
"schema_version": "1.4.0",
"severity": []
}
GHSA-C6PF-2V8J-96MC
Vulnerability from github – Published: 2025-03-24 19:36 – Updated: 2026-07-02 20:20Impact
Node based network policies (fromNodes and toNodes) will incorrectly permit traffic to/from non-node endpoints that share the labels specified in fromNodes and toNodes sections of network policies. Node based network policy is disabled by default in Cilium.
Patches
This issue was fixed by https://github.com/cilium/cilium/pull/36657.
This issue affects:
- Cilium v1.16 between v1.16.0 and v1.16.7 inclusive
- Cilium v1.17 between v1.17.0 and v1.17.1 inclusive
This issue is fixed in:
- Cilium v1.16.8
- Cilium v1.17.2
Workarounds
Users can work around this issue by ensuring that the labels used in fromNodes and toNodes fields are used exclusively by nodes and not by other endpoints.
Acknowledgements
The Cilium community has worked together with members of Isovalent to prepare these mitigations. Special thanks to @oblazek for reporting and fixing this issue.
For more information
If you think you have found a vulnerability affecting Cilium, we strongly encourage you to report it to our security mailing list at security@cilium.io. This is a private mailing list for the Cilium security team, and your report will be treated as top priority. Please also address any comments or questions on this advisory to the same mailing list.
{
"affected": [
{
"package": {
"ecosystem": "Go",
"name": "github.com/cilium/cilium"
},
"ranges": [
{
"events": [
{
"introduced": "1.16.0"
},
{
"fixed": "1.16.8"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Go",
"name": "github.com/cilium/cilium"
},
"ranges": [
{
"events": [
{
"introduced": "1.17.0"
},
{
"fixed": "1.17.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2025-30163"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2025-03-24T19:36:21Z",
"nvd_published_at": "2025-03-24T19:15:52Z",
"severity": "LOW"
},
"details": "### Impact\n\n[Node based network policies](https://docs.cilium.io/en/stable/security/policy/language/#node-based) (`fromNodes` and `toNodes`) will incorrectly permit traffic to/from non-node endpoints that share the labels specified in `fromNodes` and `toNodes` sections of network policies. Node based network policy is disabled by default in Cilium.\n\n### Patches\n\nThis issue was fixed by https://github.com/cilium/cilium/pull/36657.\n\nThis issue affects:\n\n- Cilium v1.16 between v1.16.0 and v1.16.7 inclusive\n- Cilium v1.17 between v1.17.0 and v1.17.1 inclusive\n\nThis issue is fixed in:\n\n- Cilium v1.16.8\n- Cilium v1.17.2\n\n### Workarounds\n\nUsers can work around this issue by ensuring that the labels used in `fromNodes` and `toNodes` fields are used exclusively by nodes and not by other endpoints.\n\n### Acknowledgements\n\nThe Cilium community has worked together with members of Isovalent to prepare these mitigations. Special thanks to @oblazek for reporting and fixing this issue.\n\n### For more information\n\nIf you think you have found a vulnerability affecting Cilium, we strongly encourage you to report it to our security mailing list at [security@cilium.io](mailto:security@cilium.io). This is a private mailing list for the Cilium security team, and your report will be treated as top priority. Please also address any comments or questions on this advisory to the same mailing list.",
"id": "GHSA-c6pf-2v8j-96mc",
"modified": "2026-07-02T20:20:36Z",
"published": "2025-03-24T19:36:21Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/cilium/cilium/security/advisories/GHSA-c6pf-2v8j-96mc"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-30163"
},
{
"type": "WEB",
"url": "https://github.com/cilium/cilium/pull/36657"
},
{
"type": "WEB",
"url": "https://docs.cilium.io/en/stable/security/policy/language/#node-based"
},
{
"type": "PACKAGE",
"url": "https://github.com/cilium/cilium"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "Cilium node based network policies may incorrectly allow workload traffic"
}
GHSA-C6XJ-3C77-G5RG
Vulnerability from github – Published: 2022-05-13 01:19 – Updated: 2022-05-13 01:19In the Linux kernel 4.15.x through 4.19.x before 4.19.2, map_write() in kernel/user_namespace.c allows privilege escalation because it mishandles nested user namespaces with more than 5 UID or GID ranges. A user who has CAP_SYS_ADMIN in an affected user namespace can bypass access controls on resources outside the namespace, as demonstrated by reading /etc/shadow. This occurs because an ID transformation takes place properly for the namespaced-to-kernel direction but not for the kernel-to-namespaced direction.
{
"affected": [],
"aliases": [
"CVE-2018-18955"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2018-11-16T20:29:00Z",
"severity": "HIGH"
},
"details": "In the Linux kernel 4.15.x through 4.19.x before 4.19.2, map_write() in kernel/user_namespace.c allows privilege escalation because it mishandles nested user namespaces with more than 5 UID or GID ranges. A user who has CAP_SYS_ADMIN in an affected user namespace can bypass access controls on resources outside the namespace, as demonstrated by reading /etc/shadow. This occurs because an ID transformation takes place properly for the namespaced-to-kernel direction but not for the kernel-to-namespaced direction.",
"id": "GHSA-c6xj-3c77-g5rg",
"modified": "2022-05-13T01:19:42Z",
"published": "2022-05-13T01:19:42Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2018-18955"
},
{
"type": "WEB",
"url": "https://github.com/torvalds/linux/commit/d2f007dbe7e4c9583eea6eb04d60001e85c6f1bd"
},
{
"type": "WEB",
"url": "https://bugs.chromium.org/p/project-zero/issues/detail?id=1712"
},
{
"type": "WEB",
"url": "https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.18.19"
},
{
"type": "WEB",
"url": "https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.19.2"
},
{
"type": "WEB",
"url": "https://security.netapp.com/advisory/ntap-20190416-0003"
},
{
"type": "WEB",
"url": "https://support.f5.com/csp/article/K39103040"
},
{
"type": "WEB",
"url": "https://usn.ubuntu.com/3832-1"
},
{
"type": "WEB",
"url": "https://usn.ubuntu.com/3833-1"
},
{
"type": "WEB",
"url": "https://usn.ubuntu.com/3835-1"
},
{
"type": "WEB",
"url": "https://usn.ubuntu.com/3836-1"
},
{
"type": "WEB",
"url": "https://usn.ubuntu.com/3836-2"
},
{
"type": "WEB",
"url": "https://www.exploit-db.com/exploits/45886"
},
{
"type": "WEB",
"url": "https://www.exploit-db.com/exploits/45915"
},
{
"type": "WEB",
"url": "http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d2f007dbe7e4c9583eea6eb04d60001e85c6f1bd"
},
{
"type": "WEB",
"url": "http://www.securityfocus.com/bid/105941"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-C77M-R996-JR3Q
Vulnerability from github – Published: 2026-03-31 23:30 – Updated: 2026-04-06 16:40Summary
The publish service exposes bookmarked blocks from password-protected documents to unauthenticated visitors. In publish/read-only mode, /api/bookmark/getBookmark filters bookmark results by calling FilterBlocksByPublishAccess(nil, ...). Because the filter treats a nil context as authorized, it skips the publish password check and returns bookmarked blocks from documents configured as Protected. As a result, anyone who can access the publish service can retrieve content from protected documents without providing the required password, as long as at least one block in the document is bookmarked.
Details
The issue is caused by an authorization bypass in the bookmark API path used by the publish service.
In kernel/api/bookmark.go, getBookmark checks whether the current request is in a read-only role and then filters bookmarks for publish access. However, it passes nil as the request context:
if model.IsReadOnlyRoleContext(c) {
publishAccess := model.GetPublishAccess()
tempBookmarks := &model.Bookmarks{}
for _, bookmark := range *bookmarks {
bookmark.Blocks = model.FilterBlocksByPublishAccess(nil, publishAccess, bookmark.Blocks)
In kernel/model/publish_access.go, FilterBlocksByPublishAccess allows access when c == nil:
if CheckPathAccessableByPublishIgnore(block.Box, block.Path, publishIgnore) &&
(c == nil || password == "" || CheckPublishAuthCookie(c, passwordID, password)) {
ret = append(ret, block)
}
This bypasses the intended password enforcement performed by CheckPublishAuthCookie, which validates the publish-auth-<id> cookie for protected content.
The publish proxy authenticates anonymous publish visitors with a RoleReader token, and CheckAuth accepts RoleReader, so unauthenticated publish visitors can reach /api/bookmark/getBookmark and trigger the vulnerable code path.
I reproduced this by creating a protected document, bookmarking a block inside it, opening the publish service in an incognito session without entering the document password, and sending a POST /api/bookmark/getBookmark request. The response returned a bookmark group containing the protected block in data[0].blocks, confirming the bypass.
PoC
- Start SiYuan with the publish service enabled.
- Create a new document, for example publish-bookmark-poc.
- Add a block containing identifiable content, for example BOOKMARK_SECRET_123.
- Open the block attributes and assign a bookmark label, for example leak-test.
- In Doc Tree, enable Publish Access Control and set the document to Protected.
- Set a password for that document, for example test123, and confirm the change.
- Open the publish service in a fresh incognito/private browser session.
- Verify that opening the protected document through the publish UI requires the password.
- Without entering the password, open the browser developer console and run:
fetch("/api/bookmark/getBookmark", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: "{}"
})
.then(r => r.json())
.then(x => console.log(JSON.stringify(x, null, 2)));
- Observe that the response contains a bookmark entry such as:
{
"code": 0,
"msg": "",
"data": [
{
"name": "leak-test",
"blocks": [
{
"box": "20260327012540-ppsxc5j",
"path": "/20260327012543-acu1mdn.sy",
"hPath": "/publish-bookmark-poc",
"id": "20260327012543-1y6djn1",
"rootID": "20260327012543-acu1mdn",
"parentID": "20260327012543-acu1mdn",
"name": "",
"alias": "",
"memo": "",
"tag": "",
"content": "<span data-type=\"code\">BOOKMARK_SECRET_123</span>",
"fcontent": "",
"markdown": "`BOOKMARK_SECRET_123`",
"folded": false,
"type": "NodeParagraph",
"subType": "",
"refText": "",
"refs": null,
"defID": "",
"defPath": "",
"ial": {
"bookmark": "leak-test",
"id": "20260327012543-1y6djn1",
"updated": "20260327013116"
},
"children": null,
"depth": 1,
"count": 0,
"refCount": 0,
"sort": 10,
"created": "",
"updated": "",
"riffCardID": "",
"riffCard": null
}
],
"type": "bookmark",
"depth": 0,
"count": 1
}
]
}
Actual result:
/api/bookmark/getBookmark returns bookmarked blocks from protected documents without requiring the publish password.
Impact
An unauthenticated attacker who can access the publish service can read bookmarked content from documents configured as password-protected. This breaks the confidentiality guarantee of the Protected publish access level. The impact is limited to blocks that have been bookmarked, but the leakage is direct, requires no user interaction, and does not require knowledge of the document password.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 3.6.1"
},
"package": {
"ecosystem": "Go",
"name": "github.com/siyuan-note/siyuan/kernel"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "3.6.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-34453"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2026-03-31T23:30:03Z",
"nvd_published_at": "2026-03-31T22:16:20Z",
"severity": "HIGH"
},
"details": "### Summary\nThe publish service exposes bookmarked blocks from password-protected documents to unauthenticated visitors. In publish/read-only mode, `/api/bookmark/getBookmark` filters bookmark results by calling `FilterBlocksByPublishAccess(nil, ...)`. Because the filter treats a `nil` context as authorized, it skips the publish password check and returns bookmarked blocks from documents configured as `Protected`. As a result, anyone who can access the publish service can retrieve content from protected documents without providing the required password, as long as at least one block in the document is bookmarked.\n\n### Details\nThe issue is caused by an authorization bypass in the bookmark API path used by the publish service.\n\nIn `kernel/api/bookmark.go`, `getBookmark` checks whether the current request is in a read-only role and then filters bookmarks for publish access. However, it passes `nil` as the request context:\n```go\nif model.IsReadOnlyRoleContext(c) {\n publishAccess := model.GetPublishAccess()\n tempBookmarks := \u0026model.Bookmarks{}\n for _, bookmark := range *bookmarks {\n bookmark.Blocks = model.FilterBlocksByPublishAccess(nil, publishAccess, bookmark.Blocks)\n```\nIn `kernel/model/publish_access.go`, `FilterBlocksByPublishAccess` allows access when `c == nil`:\n```go\nif CheckPathAccessableByPublishIgnore(block.Box, block.Path, publishIgnore) \u0026\u0026\n (c == nil || password == \"\" || CheckPublishAuthCookie(c, passwordID, password)) {\n ret = append(ret, block)\n}\n```\nThis bypasses the intended password enforcement performed by `CheckPublishAuthCookie`, which validates the `publish-auth-\u003cid\u003e` cookie for protected content.\n\nThe publish proxy authenticates anonymous publish visitors with a `RoleReader` token, and `CheckAuth` accepts `RoleReader`, so unauthenticated publish visitors can reach `/api/bookmark/getBookmark` and trigger the vulnerable code path.\n\nI reproduced this by creating a protected document, bookmarking a block inside it, opening the publish service in an incognito session without entering the document password, and sending a `POST /api/bookmark/getBookmark` request. The response returned a bookmark group containing the protected block in `data[0].blocks`, confirming the bypass.\n\n### PoC\n\n1. Start SiYuan with the publish service enabled.\n2. Create a new document, for example publish-bookmark-poc.\n3. Add a block containing identifiable content, for example BOOKMARK_SECRET_123.\n4. Open the block attributes and assign a bookmark label, for example leak-test.\n5. In Doc Tree, enable Publish Access Control and set the document to Protected.\n6. Set a password for that document, for example test123, and confirm the change.\n7. Open the publish service in a fresh incognito/private browser session.\n8. Verify that opening the protected document through the publish UI requires the password.\n9. Without entering the password, open the browser developer console and run:\n```js\nfetch(\"/api/bookmark/getBookmark\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: \"{}\"\n})\n .then(r =\u003e r.json())\n .then(x =\u003e console.log(JSON.stringify(x, null, 2)));\n```\n10. Observe that the response contains a bookmark entry such as:\n```json\n{\n \"code\": 0,\n \"msg\": \"\",\n \"data\": [\n {\n \"name\": \"leak-test\",\n \"blocks\": [\n {\n \"box\": \"20260327012540-ppsxc5j\",\n \"path\": \"/20260327012543-acu1mdn.sy\",\n \"hPath\": \"/publish-bookmark-poc\",\n \"id\": \"20260327012543-1y6djn1\",\n \"rootID\": \"20260327012543-acu1mdn\",\n \"parentID\": \"20260327012543-acu1mdn\",\n \"name\": \"\",\n \"alias\": \"\",\n \"memo\": \"\",\n \"tag\": \"\",\n \"content\": \"\u200b\u003cspan data-type=\\\"code\\\"\u003e\u200bBOOKMARK_SECRET_123\u003c/span\u003e\u200b\",\n \"fcontent\": \"\",\n \"markdown\": \"`BOOKMARK_SECRET_123`\",\n \"folded\": false,\n \"type\": \"NodeParagraph\",\n \"subType\": \"\",\n \"refText\": \"\",\n \"refs\": null,\n \"defID\": \"\",\n \"defPath\": \"\",\n \"ial\": {\n \"bookmark\": \"leak-test\",\n \"id\": \"20260327012543-1y6djn1\",\n \"updated\": \"20260327013116\"\n },\n \"children\": null,\n \"depth\": 1,\n \"count\": 0,\n \"refCount\": 0,\n \"sort\": 10,\n \"created\": \"\",\n \"updated\": \"\",\n \"riffCardID\": \"\",\n \"riffCard\": null\n }\n ],\n \"type\": \"bookmark\",\n \"depth\": 0,\n \"count\": 1\n }\n ]\n}\n```\nActual result:\n`/api/bookmark/getBookmark` returns bookmarked blocks from protected documents without requiring the publish password.\n\n### Impact\nAn unauthenticated attacker who can access the publish service can read bookmarked content from documents configured as password-protected. This breaks the confidentiality guarantee of the `Protected` publish access level. The impact is limited to blocks that have been bookmarked, but the leakage is direct, requires no user interaction, and does not require knowledge of the document password.",
"id": "GHSA-c77m-r996-jr3q",
"modified": "2026-04-06T16:40:12Z",
"published": "2026-03-31T23:30:03Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-c77m-r996-jr3q"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-34453"
},
{
"type": "WEB",
"url": "https://github.com/siyuan-note/siyuan/issues/17246"
},
{
"type": "PACKAGE",
"url": "https://github.com/siyuan-note/siyuan"
},
{
"type": "WEB",
"url": "https://github.com/siyuan-note/siyuan/releases/tag/v3.6.2"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
],
"summary": "SiYuan: Unauthenticated Access to Password-Protected Bookmarks via /api/bookmark/getBookmark"
}
Mitigation
- Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) [REF-229] to enforce the roles at the appropriate boundaries.
- Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
Mitigation
Ensure that access control checks are performed related to the business logic. These checks may be different than the access control checks that are applied to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor [REF-7].
Mitigation MIT-4.4
Strategy: Libraries or Frameworks
- Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
- For example, consider using authorization frameworks such as the JAAS Authorization Framework [REF-233] and the OWASP ESAPI Access Control feature [REF-45].
Mitigation
- For web applications, make sure that the access control mechanism is enforced correctly at the server side on every page. Users should not be able to access any unauthorized functionality or information by simply requesting direct access to that page.
- One way to do this is to ensure that all pages containing sensitive information are not cached, and that all such pages restrict access to requests that are accompanied by an active and authenticated session token associated with a user who has the required permissions to access that page.
Mitigation
Use the access control capabilities of your operating system and server environment and define your access control lists accordingly. Use a "default deny" policy when defining these ACLs.
No CAPEC attack patterns related to this CWE.