{"api_version":"1","generated_at":"2026-10-24T16:08:29+00:00","cve":"CVE-2026-115933","urls":{"html":"https://cve.report/CVE-2026-115933","api":"https://cve.report/api/cve/CVE-2026-115933.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-115933","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-115933"},"summary":{"title":"Forged signed tokens let any registered user take over other users and organizations","description":"Postiz signs its session, invitation and password reset tokens with one shared secret and without any marker of what a token is for. A route that refreshes the credentials of a browser-extension channel signed data taken from the request itself and stored the result where the requesting user can read it back. A user could therefore obtain a validly signed token containing any claims they choose, which the application accepts as a session, as an organization invitation with a chosen role, as a password reset or as an enterprise provisioning token.\n\nA second, narrower route that creates team invitations signs extra fields from the request body in the same way.","state":"PUBLISHED","assigner":"postiz","published_at":"2026-10-24 15:17:33","updated_at":"2026-10-24 15:17:33"},"problem_types":["CWE-290","CWE-345","CWE-915","CWE-290 CWE-290","CWE-345 CWE-345","CWE-915 CWE-915"],"metrics":[{"version":"3.1","source":"4cdc9741-f887-419a-a2fd-acbbd2729276","type":"Secondary","score":"9.9","severity":"CRITICAL","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","baseScore":9.9,"baseSeverity":"CRITICAL","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"CHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"CVSS","score":"9.9","severity":"CRITICAL","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","data":{"baseScore":9.9,"baseSeverity":"CRITICAL","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","version":"3.1"}}],"references":[{"url":"https://github.com/gitroomhq/postiz-app","name":"https://github.com/gitroomhq/postiz-app","refsource":"4cdc9741-f887-419a-a2fd-acbbd2729276","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/gitroomhq/postiz-app/releases/tag/v2.25.3","name":"https://github.com/gitroomhq/postiz-app/releases/tag/v2.25.3","refsource":"4cdc9741-f887-419a-a2fd-acbbd2729276","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://gadvisory.org/advisories/PSA-2026-YT2HMH","name":"https://gadvisory.org/advisories/PSA-2026-YT2HMH","refsource":"4cdc9741-f887-419a-a2fd-acbbd2729276","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/gitroomhq/postiz-app/commit/a5affe62c74e39c1e7ac960d50d8418b807d532c","name":"https://github.com/gitroomhq/postiz-app/commit/a5affe62c74e39c1e7ac960d50d8418b807d532c","refsource":"4cdc9741-f887-419a-a2fd-acbbd2729276","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-115933","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115933","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"GitroomHQ","product":"postiz-app","version":"affected 2.15.0 2.25.3 semver","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-10-23T17:45:00.000Z","lang":"en","value":"Anthropic has disclosed a thorough report of this vulnerability including a working PoC to Postiz"},{"source":"CNA","time":"2026-10-23T18:00:00.000Z","lang":"en","value":"Postiz has reproduced the vulnerability and is working on a fix"},{"source":"CNA","time":"2026-10-24T13:27:00.000Z","lang":"en","value":"Postiz has pushed a fix for this vulnerability and verified it"},{"source":"CNA","time":"2026-10-24T14:18:00.000Z","lang":"en","value":"Postiz has created a release and published the advisory"}],"solutions":[],"workarounds":[{"source":"CNA","title":"","value":"If you do not use channels that rely on the Postiz browser extension, block POST /integrations/extension-refresh at your reverse proxy. This removes the main signing route; the team invitation route remains.","time":"","lang":"en"},{"source":"CNA","title":"","value":"Set DISABLE_REGISTRATION=true. The attacker needs an ordinary account, so closing self-registration limits exposure to people who already hold one. This reduces reach, it does not close the issue.","time":"","lang":"en"}],"exploits":[{"source":"CNA","title":"","value":"Exploitation was demonstrated end to end against an unmodified backend build at commit 3a7d28b7ad96: a second self-registered user became super administrator of another user's organization and read its API key. Session, password reset, enterprise and subscription tokens obtained the same way were each accepted by their endpoints.","time":"","lang":"en"}],"credits":[{"source":"CNA","value":"Anthropic, PBC","lang":"en"},{"source":"CNA","value":"Enno Gelhaus","lang":"en"},{"source":"CNA","value":"Nevo David","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","packageName":"postiz-app","product":"postiz-app","repo":"https://github.com/gitroomhq/postiz-app","vendor":"GitroomHQ","versions":[{"lessThan":"2.25.3","status":"affected","version":"2.15.0","versionType":"semver"}]}],"configurations":[{"lang":"en","value":"The instance must be able to reach api2.skool.com, as any instance using the Skool provider can. No setting has to be changed."},{"lang":"en","value":"With Stripe billing configured, the attacker's own plan must allow one channel and the target organization must not be on the STANDARD tier. The session and password reset tokens are not affected by these limits."},{"lang":"en","value":"Self-registration is open unless DISABLE_REGISTRATION is set to true."}],"credits":[{"lang":"en","type":"finder","value":"Anthropic, PBC"},{"lang":"en","type":"coordinator","value":"Enno Gelhaus"},{"lang":"en","type":"remediation developer","value":"Nevo David"}],"datePublic":"2026-10-24T14:16:52.748Z","descriptions":[{"lang":"en","value":"Postiz signs its session, invitation and password reset tokens with one shared secret and without any marker of what a token is for. A route that refreshes the credentials of a browser-extension channel signed data taken from the request itself and stored the result where the requesting user can read it back. A user could therefore obtain a validly signed token containing any claims they choose, which the application accepts as a session, as an organization invitation with a chosen role, as a password reset or as an enterprise provisioning token.\n\nA second, narrower route that creates team invitations signs extra fields from the request body in the same way."}],"exploits":[{"lang":"en","value":"Exploitation was demonstrated end to end against an unmodified backend build at commit 3a7d28b7ad96: a second self-registered user became super administrator of another user's organization and read its API key. Session, password reset, enterprise and subscription tokens obtained the same way were each accepted by their endpoints."}],"impacts":[{"descriptions":[{"lang":"en","value":"A registered user can obtain a validly signed token with claims of their choosing and use it as a login session for another user, without knowing any identifier of the victim when database filter objects are used as claims."}]},{"descriptions":[{"lang":"en","value":"An attacker can join any other organization as super administrator, using an organization id that is exposed by any shared post preview link, read its API key and channel list and schedule posts through its connected social accounts."}]},{"descriptions":[{"lang":"en","value":"An attacker can reset the password of a user whose id they know, and can obtain an organization with a lifetime top-tier subscription through the enterprise provisioning endpoint."}]},{"descriptions":[{"lang":"en","value":"Forged tokens do not expire and cannot be told apart from genuine ones."}]},{"descriptions":[{"lang":"en","value":"The narrower invitation route lets a user who may invite team members repeatedly stop the scheduled posts of a channel of another organization, and lift the channel limit of their own plan."}]}],"metrics":[{"cvssV3_1":{"baseScore":9.9,"baseSeverity":"CRITICAL","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","version":"3.1"},"format":"CVSS"}],"problemTypes":[{"descriptions":[{"cweId":"CWE-290","description":"CWE-290","lang":"en","type":"CWE"},{"cweId":"CWE-345","description":"CWE-345","lang":"en","type":"CWE"},{"cweId":"CWE-915","description":"CWE-915","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-10-24T14:29:17.141Z","orgId":"4cdc9741-f887-419a-a2fd-acbbd2729276","shortName":"postiz"},"references":[{"name":"Postiz","tags":["product"],"url":"https://github.com/gitroomhq/postiz-app"},{"name":"v2.25.3","tags":["release-notes"],"url":"https://github.com/gitroomhq/postiz-app/releases/tag/v2.25.3"},{"name":"a5affe62","tags":["patch"],"url":"https://github.com/gitroomhq/postiz-app/commit/a5affe62c74e39c1e7ac960d50d8418b807d532c"},{"name":"GAdvisory","tags":["vendor-advisory"],"url":"https://gadvisory.org/advisories/PSA-2026-YT2HMH"}],"timeline":[{"lang":"en","time":"2026-10-23T17:45:00.000Z","value":"Anthropic has disclosed a thorough report of this vulnerability including a working PoC to Postiz"},{"lang":"en","time":"2026-10-23T18:00:00.000Z","value":"Postiz has reproduced the vulnerability and is working on a fix"},{"lang":"en","time":"2026-10-24T13:27:00.000Z","value":"Postiz has pushed a fix for this vulnerability and verified it"},{"lang":"en","time":"2026-10-24T14:18:00.000Z","value":"Postiz has created a release and published the advisory"}],"title":"Forged signed tokens let any registered user take over other users and organizations","workarounds":[{"lang":"en","value":"If you do not use channels that rely on the Postiz browser extension, block POST /integrations/extension-refresh at your reverse proxy. This removes the main signing route; the team invitation route remains."},{"lang":"en","value":"Set DISABLE_REGISTRATION=true. The attacker needs an ordinary account, so closing self-registration limits exposure to people who already hold one. This reduces reach, it does not close the issue."}]}},"cveMetadata":{"assignerOrgId":"4cdc9741-f887-419a-a2fd-acbbd2729276","assignerShortName":"postiz","cveId":"CVE-2026-115933","datePublished":"2026-10-24T14:17:05.755Z","dateReserved":"2026-10-23T21:21:06.893Z","dateUpdated":"2026-10-24T14:29:17.141Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-24 15:17:33","lastModifiedDate":"2026-10-24 15:17:33","problem_types":["CWE-290","CWE-345","CWE-915","CWE-290 CWE-290","CWE-345 CWE-345","CWE-915 CWE-915"],"metrics":{"cvssMetricV31":[{"source":"4cdc9741-f887-419a-a2fd-acbbd2729276","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","baseScore":9.9,"baseSeverity":"CRITICAL","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"CHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":3.1,"impactScore":6}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"115933","Ordinal":"1","Title":"Forged signed tokens let any registered user take over other use","CVE":"CVE-2026-115933","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"115933","Ordinal":"1","NoteData":"Postiz signs its session, invitation and password reset tokens with one shared secret and without any marker of what a token is for. A route that refreshes the credentials of a browser-extension channel signed data taken from the request itself and stored the result where the requesting user can read it back. A user could therefore obtain a validly signed token containing any claims they choose, which the application accepts as a session, as an organization invitation with a chosen role, as a password reset or as an enterprise provisioning token.\n\nA second, narrower route that creates team invitations signs extra fields from the request body in the same way.","Type":"Description","Title":"Forged signed tokens let any registered user take over other use"}]}}}