StudioCMS Affected by Privilege Escalation via Insecure API Token Generation
StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.0, the /studiocms_api/dashboard/api-tokens endpoint allows any authenticated user (at least Editor) to generate API tokens for any other user, including owner and admin accounts. The endpoint fails to validate whether the requesting user is authorized to create tokens on behalf of the target user ID, resulting in a full privilege escalation. This vulnerability is fixed in 0.4.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-30944
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 05:45 UTC · Revision 1
Source evidence
StudioCMS Affected by Privilege Escalation via Insecure API Token Generation
core-osv · Original sourcePublished 10 Mar 2026, 16:48 UTC
StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.0, the /studiocms_api/dashboard/api-tokens endpoint allows any authenticated user (at least Editor) to generate API tokens for any other user, including owner and admin accounts. The endpoint fails to validate whether the requesting user is authorized to create tokens on behalf of the target user ID, resulting in a full privilege escalation. This vulnerability is fixed in 0.4.0.
osv:CVE-2026-30944
Complete source record
{
"id": "3be7b02d7742ffcd5d6e108a462e5c7ca0ba2534b3a2992074a04bcd3ba264ad",
"url": "https://osv.dev/vulnerability/CVE-2026-30944",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "StudioCMS Affected by Privilege Escalation via Insecure API Token Generation",
"summary": "StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.0, the /studiocms_api/dashboard/api-tokens endpoint allows any authenticated user (at least Editor) to generate API tokens for any other user, including owner and admin accounts. The endpoint fails to validate whether the requesting user is authorized to create tokens on behalf of the target user ID, resulting in a full privilege escalation. This vulnerability is fixed in 0.4.0.",
"evidence": "osv:CVE-2026-30944",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-30944",
"aliases": [
"CVE-2026-30944",
"GHSA-667w-mmh7-mrr4"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/withstudiocms/studiocms",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "3d6a8680ffb5de718b28f0869f96cb5226a4b625"
},
{
"fixed": "f4a209fc090c90195e2419fff47b48a46eab7441"
}
],
"database_specific": {
"extracted_events": [
{
"cpe": "cpe:2.3:a:studiocms:studiocms:*:*:*:*:*:*:*:*",
"range": [
{
"introduced": "0"
},
{
"fixed": "0.4.0"
}
],
"source": "CPE_RANGE"
},
{
"range": [
{
"fixed": "f4a209fc090c90195e2419fff47b48a46eab7441"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "3d6a8680ffb5de718b28f0869f96cb5226a4b625"
}
],
"source": "REFERENCES_TAG",
"original_tag": "studiocms@0.4.0"
}
]
}
}
],
"versions": [
"studiocms@0.3.0",
"create-studiocms@0.5.0",
"@withstudiocms/internal_helpers@0.1.1",
"@withstudiocms/effect@0.3.0",
"@withstudiocms/component-registry@0.1.3",
"@withstudiocms/buildkit@0.2.0",
"@withstudiocms/auth-kit@0.1.3",
"@withstudiocms/api-spec@0.2.0",
"@studiocms/upgrade@0.2.1",
"@studiocms/s3-storage@0.2.1",
"@studiocms/migrator@0.2.1",
"@studiocms/html@0.2.1",
"@studiocms/devapps@0.2.1",
"studiocms@0.2.0",
"create-studiocms@0.4.0",
"@withstudiocms/sdk@0.2.0",
"@withstudiocms/kysely@0.2.0",
"@withstudiocms/effect@0.2.0",
"@withstudiocms/component-registry@0.1.2",
"@withstudiocms/cli-kit@0.2.0",
"@withstudiocms/auth-kit@0.1.2",
"@withstudiocms/api-spec@0.1.0",
"@studiocms/wysiwyg@0.2.0",
"@studiocms/upgrade@0.2.0",
"@studiocms/s3-storage@0.2.0",
"@studiocms/migrator@0.2.0",
"@studiocms/mdx@0.2.0",
"@studiocms/md@0.2.0",
"@studiocms/markdoc@0.2.0",
"@studiocms/html@0.2.0",
"@studiocms/google@0.2.0",
"@studiocms/github@0.2.0",
"@studiocms/discord@0.2.0",
"@studiocms/devapps@0.2.0",
"@studiocms/cloudinary-image-service@0.2.0",
"@studiocms/blog@0.2.0",
"@studiocms/auth0@0.2.0",
"studiocms@0.1.1",
"@withstudiocms/sdk@0.1.1",
"@withstudiocms/component-registry@0.1.1",
"@withstudiocms/auth-kit@0.1.1",
"@studiocms/wysiwyg@0.1.1",
"@studiocms/s3-storage@0.1.1",
"@studiocms/migrator@0.1.1",
"@studiocms/mdx@0.1.1",
"@studiocms/md@0.1.1",
"@studiocms/markdoc@0.1.1",
"@studiocms/html@0.1.1",
"@studiocms/google@0.1.1",
"@studiocms/github@0.1.1",
"@studiocms/discord@0.1.1",
"@studiocms/devapps@0.1.1",
"@studiocms/cloudinary-image-service@0.1.1",
"@studiocms/blog@0.1.1",
"@studiocms/auth0@0.1.1",
"studiocms@0.1.0",
"@withstudiocms/template-lang@0.1.0",
"@withstudiocms/sdk@0.1.0",
"@withstudiocms/kysely@0.1.0",
"@withstudiocms/internal_helpers@0.1.0",
"@withstudiocms/effect@0.1.0",
"@withstudiocms/config-utils@0.1.0",
"@withstudiocms/component-registry@0.1.0",
"@withstudiocms/buildkit@0.1.0",
"@withstudiocms/auth-kit@0.1.0",
"@studiocms/wysiwyg@0.1.0",
"@studiocms/s3-storage@0.1.0",
"@studiocms/migrator@0.1.0",
"@studiocms/mdx@0.1.0",
"@studiocms/md@0.1.0",
"@studiocms/markdoc@0.1.0",
"@studiocms/html@0.1.0",
"@studiocms/google@0.1.0",
"@studiocms/github@0.1.0",
"@studiocms/discord@0.1.0",
"@studiocms/devapps@0.1.0",
"@studiocms/cloudinary-image-service@0.1.0",
"@studiocms/blog@0.1.0",
"@studiocms/auth0@0.1.0",
"studiocms@0.1.0-beta.31",
"@withstudiocms/sdk@0.1.0-beta.1",
"@withstudiocms/kysely@0.1.0-beta.1",
"@withstudiocms/internal_helpers@0.1.0-beta.4",
"@withstudiocms/effect@0.1.0-beta.7",
"@withstudiocms/config-utils@0.1.0-beta.5",
"@withstudiocms/component-registry@0.1.0-beta.7",
"@withstudiocms/auth-kit@0.1.0-beta.6",
"@studiocms/wysiwyg@0.1.0-beta.31",
"@studiocms/migrator@0.1.0-beta.1",
"@studiocms/mdx@0.1.0-beta.31",
"@studiocms/md@0.1.0-beta.31",
"@studiocms/markdoc@0.1.0-beta.31",
"@studiocms/html@0.1.0-beta.31",
"@studiocms/google@0.1.0-beta.31",
"@studiocms/github@0.1.0-beta.31",
"@studiocms/discord@0.1.0-beta.31",
"@studiocms/devapps@0.1.0-beta.31",
"@studiocms/cloudinary-image-service@0.1.0-beta.31",
"@studiocms/blog@0.1.0-beta.31",
"@studiocms/auth0@0.1.0-beta.31",
"studiocms@0.1.0-beta.30",
"@withstudiocms/effect@0.1.0-beta.6",
"@withstudiocms/component-registry@0.1.0-beta.6",
"@withstudiocms/auth-kit@0.1.0-beta.5",
"@studiocms/wysiwyg@0.1.0-beta.30",
"@studiocms/mdx@0.1.0-beta.30",
"@studiocms/md@0.1.0-beta.30",
"@studiocms/markdoc@0.1.0-beta.30",
"@studiocms/html@0.1.0-beta.30",
"@studiocms/google@0.1.0-beta.30",
"@studiocms/github@0.1.0-beta.30",
"@studiocms/discord@0.1.0-beta.30",
"@studiocms/devapps@0.1.0-beta.30",
"@studiocms/cloudinary-image-service@0.1.0-beta.30",
"@studiocms/blog@0.1.0-beta.30",
"@studiocms/auth0@0.1.0-beta.30",
"studiocms@0.1.0-beta.29",
"@withstudiocms/effect@0.1.0-beta.5",
"@withstudiocms/component-registry@0.1.0-beta.5",
"@withstudiocms/auth-kit@0.1.0-beta.4",
"@studiocms/wysiwyg@0.1.0-beta.29",
"@studiocms/mdx@0.1.0-beta.29",
"@studiocms/md@0.1.0-beta.29",
"@studiocms/markdoc@0.1.0-beta.29",
"@studiocms/html@0.1.0-beta.29",
"@studiocms/google@0.1.0-beta.29",
"@studiocms/github@0.1.0-beta.29",
"@studiocms/discord@0.1.0-beta.29",
"@studiocms/devapps@0.1.0-beta.29",
"@studiocms/cloudinary-image-service@0.1.0-beta.29",
"@studiocms/blog@0.1.0-beta.29",
"@studiocms/auth0@0.1.0-beta.29",
"studiocms@0.1.0-beta.28",
"@withstudiocms/template-lang@0.1.0-beta.1",
"@withstudiocms/internal_helpers@0.1.0-beta.3",
"@withstudiocms/effect@0.1.0-beta.4",
"@withstudiocms/component-registry@0.1.0-beta.4",
"@withstudiocms/buildkit@0.1.0-beta.6",
"@withstudiocms/auth-kit@0.1.0-beta.3",
"@studiocms/wysiwyg@0.1.0-beta.28",
"@studiocms/mdx@0.1.0-beta.28",
"@studiocms/md@0.1.0-beta.28",
"@studiocms/markdoc@0.1.0-beta.28",
"@studiocms/html@0.1.0-beta.28",
"@studiocms/google@0.1.0-beta.28",
"@studiocms/github@0.1.0-beta.28",
"@studiocms/discord@0.1.0-beta.28",
"@studiocms/devapps@0.1.0-beta.28",
"@studiocms/cloudinary-image-service@0.1.0-beta.28",
"@studiocms/blog@0.1.0-beta.28",
"@studiocms/auth0@0.1.0-beta.28",
"studiocms@0.1.0-beta.27",
"@withstudiocms/internal_helpers@0.1.0-beta.2",
"@withstudiocms/effect@0.1.0-beta.3",
"@withstudiocms/config-utils@0.1.0-beta.4",
"@withstudiocms/component-registry@0.1.0-beta.3",
"@withstudiocms/buildkit@0.1.0-beta.5",
"@withstudiocms/auth-kit@0.1.0-beta.2",
"@studiocms/wysiwyg@0.1.0-beta.27",
"@studiocms/mdx@0.1.0-beta.27",
"@studiocms/md@0.1.0-beta.27",
"@studiocms/markdoc@0.1.0-beta.27",
"@studiocms/html@0.1.0-beta.27",
"@studiocms/google@0.1.0-beta.27",
"@studiocms/github@0.1.0-beta.27",
"@studiocms/discord@0.1.0-beta.27",
"@studiocms/devapps@0.1.0-beta.27",
"@studiocms/cloudinary-image-service@0.1.0-beta.27",
"@studiocms/blog@0.1.0-beta.27",
"@studiocms/auth0@0.1.0-beta.27",
"studiocms@0.1.0-beta.26",
"@withstudiocms/internal_helpers@0.1.0-beta.1",
"@withstudiocms/effect@0.1.0-beta.2",
"@withstudiocms/component-registry@0.1.0-beta.2",
"@withstudiocms/auth-kit@0.1.0-beta.1",
"@studiocms/wysiwyg@0.1.0-beta.26",
"@studiocms/mdx@0.1.0-beta.26",
"@studiocms/md@0.1.0-beta.26",
"@studiocms/markdoc@0.1.0-beta.26",
"@studiocms/html@0.1.0-beta.26",
"@studiocms/google@0.1.0-beta.26",
"@studiocms/github@0.1.0-beta.26",
"@studiocms/discord@0.1.0-beta.26",
"@studiocms/devapps@0.1.0-beta.26",
"@studiocms/cloudinary-image-service@0.1.0-beta.26",
"@studiocms/blog@0.1.0-beta.26",
"@studiocms/auth0@0.1.0-beta.26",
"studiocms@0.1.0-beta.25",
"@withstudiocms/effect@0.1.0-beta.1",
"@withstudiocms/config-utils@0.1.0-beta.3",
"@withstudiocms/component-registry@0.1.0-beta.1",
"@withstudiocms/buildkit@0.1.0-beta.4",
"@studiocms/wysiwyg@0.1.0-beta.25",
"@studiocms/mdx@0.1.0-beta.25",
"@studiocms/md@0.1.0-beta.25",
"@studiocms/markdoc@0.1.0-beta.25",
"@studiocms/html@0.1.0-beta.25",
"@studiocms/google@0.1.0-beta.25",
"@studiocms/github@0.1.0-beta.25",
"@studiocms/discord@0.1.0-beta.25",
"@studiocms/devapps@0.1.0-beta.25",
"@studiocms/cloudinary-image-service@0.1.0-beta.25",
"@studiocms/blog@0.1.0-beta.25",
"@studiocms/auth0@0.1.0-beta.25",
"studiocms@0.1.0-beta.24",
"@withstudiocms/config-utils@0.1.0-beta.2",
"@withstudiocms/buildkit@0.1.0-beta.3",
"@studiocms/wysiwyg@0.1.0-beta.24",
"@studiocms/mdx@0.1.0-beta.24",
"@studiocms/md@0.1.0-beta.24",
"@studiocms/markdoc@0.1.0-beta.24",
"@studiocms/html@0.1.0-beta.24",
"@studiocms/google@0.1.0-beta.24",
"@studiocms/github@0.1.0-beta.24",
"@studiocms/discord@0.1.0-beta.24",
"@studiocms/devapps@0.1.0-beta.24",
"@studiocms/cloudinary-image-service@0.1.0-beta.24",
"@studiocms/blog@0.1.0-beta.24",
"@studiocms/auth0@0.1.0-beta.24",
"studiocms@0.1.0-beta.23",
"@studiocms/mdx@0.1.0-beta.23",
"@studiocms/md@0.1.0-beta.23",
"@studiocms/markdoc@0.1.0-beta.23",
"@studiocms/html@0.1.0-beta.23",
"@studiocms/google@0.1.0-beta.23",
"@studiocms/github@0.1.0-beta.23",
"@studiocms/discord@0.1.0-beta.23",
"@studiocms/devapps@0.1.0-beta.23",
"@studiocms/cloudinary-image-service@0.1.0-beta.23",
"@studiocms/blog@0.1.0-beta.23",
"@studiocms/auth0@0.1.0-beta.23",
"studiocms@0.1.0-beta.22",
"@withstudiocms/config-utils@0.1.0-beta.1",
"@withstudiocms/buildkit@0.1.0-beta.2",
"@studiocms/mdx@0.1.0-beta.22",
"@studiocms/md@0.1.0-beta.22",
"@studiocms/markdoc@0.1.0-beta.22",
"@studiocms/html@0.1.0-beta.22",
"@studiocms/devapps@0.1.0-beta.22",
"@studiocms/cloudinary-image-service@0.1.0-beta.22",
"@studiocms/blog@0.1.0-beta.22",
"studiocms@0.1.0-beta.21",
"@studiocms/mdx@0.1.0-beta.21",
"@studiocms/markdoc@0.1.0-beta.21",
"@studiocms/devapps@0.1.0-beta.21",
"@studiocms/cloudinary-image-service@0.1.0-beta.21",
"@studiocms/blog@0.1.0-beta.21",
"studiocms@0.1.0-beta.20",
"@studiocms/mdx@0.1.0-beta.20",
"@studiocms/markdoc@0.1.0-beta.20",
"@studiocms/devapps@0.1.0-beta.20",
"@studiocms/cloudinary-image-service@0.1.0-beta.20",
"@studiocms/blog@0.1.0-beta.20",
"studiocms@0.1.0-beta.19",
"@studiocms/mdx@0.1.0-beta.19",
"@studiocms/markdoc@0.1.0-beta.19",
"@studiocms/devapps@0.1.0-beta.19",
"@studiocms/cloudinary-image-service@0.1.0-beta.19",
"@studiocms/blog@0.1.0-beta.19",
"studiocms@0.1.0-beta.18",
"@studiocms/mdx@0.1.0-beta.18",
"@studiocms/markdoc@0.1.0-beta.18",
"@studiocms/devapps@0.1.0-beta.18",
"@studiocms/blog@0.1.0-beta.18",
"studiocms@0.1.0-beta.17",
"@studiocms/mdx@0.1.0-beta.17",
"@studiocms/markdoc@0.1.0-beta.17",
"@studiocms/devapps@0.1.0-beta.17",
"@studiocms/blog@0.1.0-beta.17",
"studiocms@0.1.0-beta.16",
"@studiocms/mdx@0.1.0-beta.16",
"@studiocms/markdoc@0.1.0-beta.16",
"@studiocms/devapps@0.1.0-beta.16",
"@studiocms/blog@0.1.0-beta.16",
"studiocms@0.1.0-beta.15",
"@withstudiocms/buildkit@0.1.0-beta.1",
"@studiocms/mdx@0.1.0-beta.15",
"@studiocms/markdoc@0.1.0-beta.15",
"@studiocms/devapps@0.1.0-beta.15",
"@studiocms/blog@0.1.0-beta.15",
"studiocms@0.1.0-beta.14",
"@studiocms/mdx@0.1.0-beta.14",
"@studiocms/markdoc@0.1.0-beta.14",
"@studiocms/devapps@0.1.0-beta.14",
"@studiocms/blog@0.1.0-beta.14",
"studiocms@0.1.0-beta.13",
"@studiocms/mdx@0.1.0-beta.13",
"@studiocms/markdoc@0.1.0-beta.13",
"@studiocms/devapps@0.1.0-beta.13",
"@studiocms/blog@0.1.0-beta.13",
"studiocms@0.1.0-beta.12",
"@studiocms/devapps@0.1.0-beta.12",
"@studiocms/blog@0.1.0-beta.12",
"studiocms@0.1.0-beta.11",
"@studiocms/devapps@0.1.0-beta.11",
"@studiocms/blog@0.1.0-beta.11",
"studiocms@0.1.0-beta.10",
"@studiocms/devapps@0.1.0-beta.10",
"@studiocms/blog@0.1.0-beta.10",
"studiocms@0.1.0-beta.9",
"@studiocms/devapps@0.1.0-beta.9",
"@studiocms/blog@0.1.0-beta.9",
"studiocms@0.1.0-beta.8",
"@studiocms/devapps@0.1.0-beta.8",
"@studiocms/blog@0.1.0-beta.8",
"studiocms@0.1.0-beta.7",
"@studiocms/robotstxt@0.1.0-beta.7",
"@studiocms/renderers@0.1.0-beta.7",
"@studiocms/imagehandler@0.1.0-beta.7",
"@studiocms/frontend@0.1.0-beta.7",
"@studiocms/dashboard@0.1.0-beta.7",
"@studiocms/core@0.1.0-beta.7",
"@studiocms/blog@0.1.0-beta.7",
"@studiocms/betaresources@0.1.0-beta.7",
"@studiocms/auth@0.1.0-beta.7",
"@studiocms/assets@0.1.0-beta.7",
"studiocms@0.1.0-beta.6",
"@studiocms/robotstxt@0.1.0-beta.6",
"@studiocms/renderers@0.1.0-beta.6",
"@studiocms/imagehandler@0.1.0-beta.6",
"@studiocms/frontend@0.1.0-beta.6",
"@studiocms/dashboard@0.1.0-beta.6",
"@studiocms/core@0.1.0-beta.6",
"@studiocms/blog@0.1.0-beta.6",
"@studiocms/betaresources@0.1.0-beta.6",
"@studiocms/auth@0.1.0-beta.6",
"@studiocms/assets@0.1.0-beta.6",
"studiocms@0.1.0-beta.5",
"@studiocms/robotstxt@0.1.0-beta.5",
"@studiocms/renderers@0.1.0-beta.5",
"@studiocms/imagehandler@0.1.0-beta.5",
"@studiocms/frontend@0.1.0-beta.5",
"@studiocms/dashboard@0.1.0-beta.5",
"@studiocms/core@0.1.0-beta.5",
"@studiocms/blog@0.1.0-beta.5",
"@studiocms/betaresources@0.1.0-beta.5",
"@studiocms/auth@0.1.0-beta.5",
"@studiocms/assets@0.1.0-beta.5",
"@astrolicious/studiocms@0.1.0-beta.4",
"@astrolicious/studiocms-blog@0.1.0-beta.4",
"@astrolicious/studiocms@0.1.0-beta.3",
"@astrolicious/studiocms-blog@0.1.0-beta.3",
"@astrolicious/studiocms@0.1.0-beta.2",
"@astrolicious/studiocms-blog@0.1.0-beta.2",
"0.1.0-beta.1"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-30944.json"
}
}
],
"modified": "2026-10-28T02:30:26.267174147Z",
"provider": "osv",
"references": [
"https://github.com/withstudiocms/studiocms/releases/tag/studiocms@0.4.0",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/30xxx/CVE-2026-30944.json",
"https://github.com/withstudiocms/studiocms/security/advisories/GHSA-667w-mmh7-mrr4",
"https://nvd.nist.gov/vuln/detail/CVE-2026-30944",
"https://github.com/withstudiocms/studiocms/commit/f4a209fc090c90195e2419fff47b48a46eab7441"
],
"provider_metadata": {
"cwe_ids": [
"CWE-639",
"CWE-863"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/30xxx/CVE-2026-30944.json"
}
},
"related_cves": [
{
"value": "CVE-2026-30944",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 492802,
"published_at": "2026-03-10T16:48:55.353+00:00"
}