CVE-2026-94455
📛 CVE Title
Unauthenticated /enterprise/create-user mints lifetime top-tier organizations and discloses their API key
Description
An HTTP endpoint intended for provisioning enterprise and reseller organisations is reachable without any session. The authentication middleware is bound only to an explicit list of controllers, and the enterprise controller is not on that list, so no authentication runs for these routes. The endpoint's only check is that the request body carries a token bearing a valid signature from the instance secret. It does not check what that token was issued for. Login tokens are signed with the same secret and carry no purpose, audience or expiry claim, so an ordinary user's own session token satisfies the check. Presented with such a token, the endpoint creates a new organisation holding the highest subscription tier, flagged as lifetime and with a channel allowance far above any sold plan, creates an organisation-owner account alongside it, and returns the new organisation's API key in the response body. That key is immediately valid against the public API.
Overview
- State
- PUBLISHED
- Assigner (CNA)
- postiz
- CVSS severity
- HIGH
- CVSS score
- 7.1 / 10
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L- Effective score
- 7.1 / 10 HIGH source: CNA overview
- CWE(s)
-
CWE-306,CWE-1390,CWE-345,CWE-770 - Reserved
- 2026-09-21
- Published
- 2026-09-22 16:17 UTC
- Last updated
- 2026-09-22 18:14 UTC
- Source
- https://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/94xxx/CVE-2026-94455.json
- Linked Threat
- CVE-2026-94455 — Unauthenticated /enterprise/create-user mints lifetime top-tier organizations and discloses their API key
NVD triage scoring NVD CVE 2.0
Layer NVD adds on top of the CNA's CVE record — published / last-modified timestamps, exploitability / impact subscores, and the FIRST.org EPSS probability that this CVE will be exploited in the wild in the next 30 days.
- NVD published
- 2026-09-22 17:17:31 UTC
- NVD last modified
- 2026-09-22 19:37:36 UTC
- NVD CVSS v3.1
- 7.1 / 10 HIGH source: 4cdc9741-f887-419a-a2fd-acbbd2729276
- NVD CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L- Exploitability subscore
- 2.8 / 10
- Impact subscore
- 4.2 / 10
NVD / KEV / EPSS data refreshed 2026-09-23 02:31 UTC. Re-run the 🛰 Backfill from NVD button above to refresh.
European Union Vulnerability Database ENISA EUVD
ENISA's official EU repository for curated vulnerability intelligence. Carries a separate identifier (EUVD-YYYY-NNNN) and frequently exposes an earlier-published description + CVSS than NVD does.
- EUVD ID
-
EUVD-2026-84547 - Assigner
- postiz
- Published
- Sep 22, 2026, 4:17:00 PM
- Updated
- Sep 22, 2026, 6:14:13 PM
- EUVD base score (CVSS 3.1)
-
7.1 / 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L - EUVD-reported EPSS
- 0.0000
- Vendors
- gitroomhq
- Products
-
postiz-app (0 <2.4.0)
ENISA description: An HTTP endpoint intended for provisioning enterprise and reseller organisations is reachable without any session. The authentication middleware is bound only to an explicit list of controllers, and the enterprise controller is not on that list, so no authentication runs for these routes. The endpoint's only check is that the request body carries a token bearing a valid signature from the instance secret. It does not check what that token was issued for. Login tokens are signed with the same secret and carry no purpose, audience or expiry claim, so an ordinary user's own session token satisfies the check. Presented with such a token, the endpoint creates a new organisation holding the highest subscription tier, flagged as lifetime and with a channel allowance far above any sold plan, creates an organisation-owner account alongside it, and returns the new organisation's API key in the response body. That key is immediately valid against the public API.
Affected products (1)
| Vendor | Product | Versions | Platforms |
|---|---|---|---|
| GitroomHQ | postiz-app |
0 (affected)
|
— |
Vendor references (4)
References embedded in the original CVE record by the assigning CNA.
Web references (0)
DuckDuckGo results ranked by threat-intel / vendor advisory domains. Generated by the 🔎 Find references (web) button above — same flow as the Remediations search.
No web references attached yet.
NVD-tagged references (4)
Reference list NVD curates from the CNA record, vendor advisories, and third-party reports. The tag chips below are NVD's analyst-assigned categories.
- https://gadvisory.org/advisories/PSA-2026-P8W1J0 4cdc9741-f887-419a-a2fd-acbbd2729276
- https://github.com/gitroomhq/postiz-app 4cdc9741-f887-419a-a2fd-acbbd2729276
- https://github.com/gitroomhq/postiz-app/commit/9259cf2429e8cc0c88414e88d5e6c783d7ffba63 4cdc9741-f887-419a-a2fd-acbbd2729276
- https://github.com/gitroomhq/postiz-app/releases/tag/v2.24.0 4cdc9741-f887-419a-a2fd-acbbd2729276
Remediations (10)
Remediations are stored against the linked Threat row; the list below is deduplicated across both pages.
-
web:app.opencve.io
The flaw appears in all versions prior to the v2.24. release that contains the authentication fix . Any instance running an older version of the application is affected, regardless of the deployment environment.
2026-09-23 15:13 UTC -
web:blogs.oracle.com
For more information about the Critical Patch Update program, see the security vulnerability remediation practices page located on the Oracle Trust Center.
2026-09-23 15:13 UTC -
web:cvetodo.com
CVE-2026-94455 : Missing Authentication for Critical Function in GitroomHQ Postiz App. Includes technical details, affected versions, and mitigation steps.
2026-09-23 15:13 UTC -
web:sec.cloudapps.cisco.com
On September 16, 2026 , the Cisco Product Security Incident Response Team (PSIRT) published the advisories that are listed in the following tables. To remediate these vulnerabilities, Cisco strongly recommends that customers upgrade to the fixed software that is indicated in the advisories. For more information about changes in Cisco PSIRT vulnerability disclosure, see Strengthening the ...
2026-09-23 15:13 UTC -
web:senserva.com
Every Microsoft security patch (KB) and the CVEs it fixes, with severity, CVSS, and CISA KEV status. Cross-linked to the CVE reference.
2026-09-23 15:13 UTC -
web:support.sap.com
SAP security Patch Day Bulletin This post shares the information on security notes that remediate vulnerabilities discovered in SAP products. SAP strongly recommends that the customer visits the support portal and applies patches on priority to protect their SAP landscape. On 9th of June 2026 , SAP security patch day saw the release of 15 new security notes.
2026-09-23 15:13 UTC -
web:windowsforum.com
Microsoft tracked YellowKey as CVE - 2026 -45585 and initially issued a mitigation while it prepared a full update. The important date for administrators is June 9, 2026 : Microsoft included a fix in its June Patch Tuesday security releases.
2026-09-23 15:13 UTC -
web:www.openhands.dev
Compare 8 automated vulnerability remediation tools for 2026 on fixes, prioritization, integrations, and deployment control.
2026-09-23 15:13 UTC -
web:www.oracle.com
This Critical Patch Update contains 1448 new security patches across the product families listed below. Please note that a My Oracle Support (MOS) note summarizing the content of this Critical Patch Update and other Oracle Software Security Assurance activities is located at July 2026 Critical Patch Update: Executive Summary and Analysis.
2026-09-23 15:13 UTC -
web:www.oracle.com
Additional CVEs addressed are: The patch for CVE - 2026 -34481 also addresses CVE - 2026 -34477, CVE - 2026 -34478, CVE - 2026 -34479, and CVE - 2026 -34480. Oracle Fusion Middleware Risk Matrix This Critical Security Patch Update contains 106 new security patches for Oracle Fusion Middleware. 53 of these vulnerabilities may be remotely exploitable without authentication, i.e., may be exploited over a ...
2026-09-23 15:13 UTC
AI Forensic Analysis
Only Available for Registered Users. Sign in to view.
Raw JSON
The full cvelistV5 record. Download as CVE-2026-94455.json.
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-94455",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-22T18:13:58.426768Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T18:14:13.947Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"packageName": "postiz-app",
"product": "postiz-app",
"repo": "https://github.com/gitroomhq/postiz-app",
"vendor": "GitroomHQ",
"versions": [
{
"lessThan": "2.4.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"value": "You are affected if your deployment has billing enabled, that is if STRIPE_PUBLISHABLE_KEY or STRIPE_SECRET_KEY is set. This covers the hosted Postiz service and any self-hoster running Postiz commercially."
},
{
"lang": "en",
"value": "You are not meaningfully affected if you run a default self-hosted instance with no Stripe configuration. In that mode Postiz does not enforce subscription entitlements at all, so an organisation created through this endpoint holds no privileges your users do not already have."
},
{
"lang": "en",
"value": "Exposure is wider if self-registration is open, that is if DISABLE_REGISTRATION is unset or not set to 'true', because anyone on the internet can then obtain the account needed. With registration closed, the issue is reachable only by people who already hold an account on your instance."
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Santosh Kumar Puppala"
},
{
"lang": "en",
"type": "coordinator",
"value": "Enno Gelhaus"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Nevo David"
}
],
"datePublic": "2026-09-22T14:36:13.452Z",
"descriptions": [
{
"lang": "en",
"value": "An HTTP endpoint intended for provisioning enterprise and reseller organisations is reachable without any session. The authentication middleware is bound only to an explicit list of controllers, and the enterprise controller is not on that list, so no authentication runs for these routes.\n\nThe endpoint's only check is that the request body carries a token bearing a valid signature from the instance secret. It does not check what that token was issued for. Login tokens are signed with the same secret and carry no purpose, audience or expiry claim, so an ordinary user's own session token satisfies the check.\n\nPresented with such a token, the endpoint creates a new organisation holding the highest subscription tier, flagged as lifetime and with a channel allowance far above any sold plan, creates an organisation-owner account alongside it, and returns the new organisation's API key in the response body. That key is immediately valid against the public API."
}
],
"exploits": [
{
"lang": "en",
"value": "1. Register an ordinary account on the target instance and capture that account's own login JWT."
},
{
"lang": "en",
"value": "2. POST /api/enterprise/create-user with body {\"params\": \"<that login JWT, verbatim>\"}."
},
{
"lang": "en",
"value": "3. The response is 200 with {\"id\": \"<new organisation id>\", \"apiKey\": \"<key>\"}."
},
{
"lang": "en",
"value": "4. Confirm the new organisation carries subscriptionTier=ULTIMATE, isLifetime=true and totalChannels=1000000, and that it is distinct from the caller's own registration organisation."
},
{
"lang": "en",
"value": "5. Send the returned apiKey as the Authorization header against a public API endpoint and confirm 200, versus 401 for an invalid key."
},
{
"lang": "en",
"value": "Controls: an absent token, a malformed token, and a token with a valid-looking payload but a wrong signature all fail with no organisation created, confirming signature verification is the only gate."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Billing-integrity bypass. Any registered user can provision an organisation at the highest subscription tier, flagged as lifetime, with a channel allowance of 1,000,000 against the 100 provisioned for a genuine paying customer at that same tier."
}
]
},
{
"descriptions": [
{
"lang": "en",
"value": "Recurring unmetered resource consumption. The per-organisation AI allowance (500 image generations, 60 video generations, 600 clipping minutes) refills on a rolling monthly window, and the lifetime flag exempts the organisation from subscription reconciliation, so each provisioned organisation is an indefinite draw on the operator's model and GPU budget rather than a one-off."
}
]
},
{
"descriptions": [
{
"lang": "en",
"value": "Disclosure of a usable organisation API key in the response body, valid immediately against the public API without an interactive session."
}
]
},
{
"descriptions": [
{
"lang": "en",
"value": "No confidentiality impact on existing tenants. The provisioned organisation is empty; no other organisation's channels, posts, media or account data become reachable."
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.1,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L",
"version": "3.1"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-1390",
"description": "CWE-1390",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-345",
"description": "CWE-345",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-770",
"description": "CWE-770",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T16:17:00.413Z",
"orgId": "4cdc9741-f887-419a-a2fd-acbbd2729276",
"shortName": "postiz"
},
"references": [
{
"name": "Postiz",
"tags": [
"product"
],
"url": "https://github.com/gitroomhq/postiz-app"
},
{
"name": "v2.24.0",
"tags": [
"release-notes"
],
"url": "https://github.com/gitroomhq/postiz-app/releases/tag/v2.24.0"
},
{
"name": "9259cf2",
"tags": [
"patch"
],
"url": "https://github.com/gitroomhq/postiz-app/commit/9259cf2429e8cc0c88414e88d5e6c783d7ffba63"
},
{
"name": "GAdvisory",
"tags": [
"vendor-advisory"
],
"url": "https://gadvisory.org/advisories/PSA-2026-P8W1J0"
}
],
"timeline": [
{
"lang": "en",
"time": "2026-09-21T13:34:00.000Z",
"value": "Postiz has received and acknowledged the report."
},
{
"lang": "en",
"time": "2026-09-21T20:15:00.000Z",
"value": "Postiz has verified the report."
},
{
"lang": "en",
"time": "2026-09-22T04:32:00.000Z",
"value": "Postiz has developed and verified the patch."
},
{
"lang": "en",
"time": "2026-09-22T14:17:00.000Z",
"value": "Postiz has released the patch notes and published the advisory."
}
],
"title": "Unauthenticated /enterprise/create-user mints lifetime top-tier organizations and discloses their API key",
"workarounds": [
{
"lang": "en",
"value": "Block POST /enterprise/create-user, and preferably all of /enterprise/*, at your reverse proxy, ingress or WAF. If you do not use Postiz's enterprise or reseller provisioning integration, nothing legitimate calls these routes, so blocking them has no user-visible effect."
},
{
"lang": "en",
"value": "Set DISABLE_REGISTRATION=true. The caller needs an ordinary account on your instance to obtain a usable token, so closing self-registration limits exposure to people who already have one. This reduces reach, it does not close the issue."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4cdc9741-f887-419a-a2fd-acbbd2729276",
"assignerShortName": "postiz",
"cveId": "CVE-2026-94455",
"datePublished": "2026-09-22T16:17:00.413Z",
"dateReserved": "2026-09-21T17:10:50.156Z",
"dateUpdated": "2026-09-22T18:14:13.947Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}