Plane: InstanceAdminSignUpEndpoint TOCTOU race allows two concurrent unauthenticated callers to both bootstrap as Plane instance admins
Plane is an open-source project management tool. From 0.13 until 1.4.0, InstanceAdminSignUpEndpoint in apps/api/plane/license/api/views/admin.py:89-117, 173-229 uses InstanceAdmin.objects.first() for the first-admin check and performs account creation without an atomic transaction, row lock, uniqueness guard, or advisory lock. Two concurrent unauthenticated requests with different email addresses can both observe that no instance administrator exists, create separate User and InstanceAdmin rows, and receive sessions with instance-admin authority. This allows an attacker to share unrestricted instance administration with the legitimate operator. This issue is fixed in 1.4.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-104970
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 01:12 UTC · Revision 1
Source evidence
Plane: InstanceAdminSignUpEndpoint TOCTOU race allows two concurrent unauthenticated callers to both bootstrap as Plane instance admins
core-osv · Original sourcePublished 5 Oct 2026, 16:58 UTC
Plane is an open-source project management tool. From 0.13 until 1.4.0, InstanceAdminSignUpEndpoint in apps/api/plane/license/api/views/admin.py:89-117, 173-229 uses InstanceAdmin.objects.first() for the first-admin check and performs account creation without an atomic transaction, row lock, uniqueness guard, or advisory lock. Two concurrent unauthenticated requests with different email addresses can both observe that no instance administrator exists, create separate User and InstanceAdmin rows, and receive sessions with instance-admin authority. This allows an attacker to share unrestricted instance administration with the legitimate operator. This issue is fixed in 1.4.0.
osv:CVE-2026-104970
Complete source record
{
"id": "cf2aaf83332d2963b9994a8db30ad2a7ffa30a6aeb2a08e88e7a251ab3e91e54",
"url": "https://osv.dev/vulnerability/CVE-2026-104970",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Plane: InstanceAdminSignUpEndpoint TOCTOU race allows two concurrent unauthenticated callers to both bootstrap as Plane instance admins",
"summary": "Plane is an open-source project management tool. From 0.13 until 1.4.0, InstanceAdminSignUpEndpoint in apps/api/plane/license/api/views/admin.py:89-117, 173-229 uses InstanceAdmin.objects.first() for the first-admin check and performs account creation without an atomic transaction, row lock, uniqueness guard, or advisory lock. Two concurrent unauthenticated requests with different email addresses can both observe that no instance administrator exists, create separate User and InstanceAdmin rows, and receive sessions with instance-admin authority. This allows an attacker to share unrestricted instance administration with the legitimate operator. This issue is fixed in 1.4.0.",
"evidence": "osv:CVE-2026-104970",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-104970",
"aliases": [
"CVE-2026-104970",
"GHSA-p548-28jp-wr4p"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/makeplane/plane",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "917b23a6c16d93fc00cef67900eff2755e8b13f7"
},
{
"fixed": "7fbf14a6cb494bbf5866e2b293b28a6d8a7e52c3"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "1.4.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "7fbf14a6cb494bbf5866e2b293b28a6d8a7e52c3"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "917b23a6c16d93fc00cef67900eff2755e8b13f7"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v1.4.0"
}
]
}
}
],
"versions": [
"v1.3.1",
"v1.3.0",
"v1.2.3",
"v1.2.2",
"v1.2.1",
"v1.2.0",
"v1.1.0",
"v1.0.0",
"v0.28.0",
"v0.27.1",
"v0.27.0",
"v0.26.1",
"v0.26.0",
"v0.25.3",
"v0.25.2",
"v0.25.1",
"v0.25.0",
"v0.24.0",
"v0.23.1",
"v0.23.0",
"v0.22-dev",
"v0.21-dev",
"v0.20-dev",
"v0.19-dev",
"v0.18-dev",
"v0.17-dev",
"v0.16-dev",
"v0.15.4-dev",
"v0.15.3-hotfix",
"v0.15.2-dev",
"v0.15.1-dev",
"v0.15-dev",
"v0.14.2-dev",
"v0.14.1-dev",
"v0.14-dev",
"v0.13.2-dev",
"v0.13.1-dev",
"v0.13-dev",
"v0.12.2-dev",
"v0.12.1-dev",
"v0.12-dev",
"v0.11-dev",
"v0.10-dev",
"v0.9-dev",
"v0.8-dev",
"v0.7.1-dev",
"v0.7-dev",
"v0.6-dev",
"v0.5-dev",
"v0.4-dev",
"v0.3.1-dev",
"v0.1-dev"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-104970.json"
}
}
],
"modified": "2026-10-28T02:30:24.793667597Z",
"provider": "osv",
"references": [
"https://github.com/makeplane/plane/releases/tag/v1.4.0",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104970.json",
"https://github.com/makeplane/plane/security/advisories/GHSA-p548-28jp-wr4p",
"https://nvd.nist.gov/vuln/detail/CVE-2026-104970",
"https://github.com/makeplane/plane/commit/7fbf14a6cb494bbf5866e2b293b28a6d8a7e52c3",
"https://github.com/makeplane/plane/pull/9332"
],
"provider_metadata": {
"cwe_ids": [
"CWE-362"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104970.json"
}
},
"related_cves": [
{
"value": "CVE-2026-104970",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 491460,
"published_at": "2026-10-05T16:58:55.97+00:00"
}