StudioCMS: REST API Missing Rank Check Allows Admin to Create Peer Admin Accounts
StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.3, the REST API createUser endpoint uses string-based rank checks that only block creating owner accounts, while the Dashboard API uses indexOf-based rank comparison that prevents creating users at or above your own rank. This inconsistency allows an admin to create additional admin accounts via the REST API, enabling privilege proliferation and persistence. This vulnerability is fixed in 0.4.3.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-32106
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 17:59 UTC · Revision 1
Source evidence
StudioCMS: REST API Missing Rank Check Allows Admin to Create Peer Admin Accounts
core-osv · Original sourcePublished 11 Mar 2026, 20:09 UTC
StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.3, the REST API createUser endpoint uses string-based rank checks that only block creating owner accounts, while the Dashboard API uses indexOf-based rank comparison that prevents creating users at or above your own rank. This inconsistency allows an admin to create additional admin accounts via the REST API, enabling privilege proliferation and persistence. This vulnerability is fixed in 0.4.3.
osv:CVE-2026-32106
Complete source record
{
"id": "45bd60ead59c8268597d196ddae41471681c8e6b2674bfebd632ebef927a7183",
"url": "https://osv.dev/vulnerability/CVE-2026-32106",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "StudioCMS: REST API Missing Rank Check Allows Admin to Create Peer Admin Accounts",
"summary": "StudioCMS is a server-side-rendered, Astro native, headless content management system. Prior to 0.4.3, the REST API createUser endpoint uses string-based rank checks that only block creating owner accounts, while the Dashboard API uses indexOf-based rank comparison that prevents creating users at or above your own rank. This inconsistency allows an admin to create additional admin accounts via the REST API, enabling privilege proliferation and persistence. This vulnerability is fixed in 0.4.3.",
"evidence": "osv:CVE-2026-32106",
"products": [],
"severity": "medium",
"structured": {
"id": "CVE-2026-32106",
"aliases": [
"CVE-2026-32106",
"GHSA-wj56-g96r-673q"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:L"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/withstudiocms/studiocms",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "3fd987c7a8fddef8366e2ce9544293ee290067fa"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "0.4.3"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"cpe": "cpe:2.3:a:studiocms:studiocms:*:*:*:*:*:*:*:*",
"range": [
{
"introduced": "0"
},
{
"fixed": "0.4.3"
}
],
"source": "CPE_RANGE"
}
]
}
}
],
"versions": [
"studiocms@0.4.2",
"effectify@0.1.1",
"@withstudiocms/api-spec@0.3.1",
"@studiocms/markdown-remark@1.3.1",
"studiocms@0.4.1",
"studiocms@0.4.0",
"effectify@0.1.0",
"create-studiocms@0.6.0",
"@withstudiocms/sdk@0.3.0",
"@withstudiocms/kysely@0.2.1",
"@withstudiocms/internal_helpers@0.2.0",
"@withstudiocms/effect@0.4.0",
"@withstudiocms/config-utils@0.2.0",
"@withstudiocms/component-registry@0.1.4",
"@withstudiocms/cli-kit@0.2.1",
"@withstudiocms/buildkit@0.2.1",
"@withstudiocms/auth-kit@0.1.4",
"@withstudiocms/api-spec@0.3.0",
"@studiocms/wysiwyg@0.3.0",
"@studiocms/s3-storage@0.3.0",
"@studiocms/mdx@0.3.0",
"@studiocms/md@0.3.0",
"@studiocms/markdown-remark@1.3.0",
"@studiocms/markdoc@0.3.0",
"@studiocms/html@0.3.0",
"@studiocms/google@0.3.0",
"@studiocms/github@0.3.0",
"@studiocms/discord@0.3.0",
"@studiocms/devapps@0.3.0",
"@studiocms/cloudinary-image-service@0.3.0",
"@studiocms/blog@0.3.0",
"@studiocms/auth0@0.3.0",
"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-32106.json"
}
}
],
"modified": "2026-10-28T02:30:31.269060639Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/32xxx/CVE-2026-32106.json",
"https://github.com/withstudiocms/studiocms/security/advisories/GHSA-wj56-g96r-673q",
"https://nvd.nist.gov/vuln/detail/CVE-2026-32106"
],
"provider_metadata": {
"cwe_ids": [
"CWE-269"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/32xxx/CVE-2026-32106.json"
}
},
"related_cves": [
{
"value": "CVE-2026-32106",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 498102,
"published_at": "2026-03-11T20:09:12.095+00:00"
}