nginx ignition has Unauthenticated Admin Account Creation via Onboarding Race Condition
## Summary `POST /api/users/onboarding/finish` is registered as **anonymous (unauthenticated)** and creates a user with **full ReadWrite admin permissions**. Because the handler uses a check-then-act (TOCTOU) pattern between the "onboarding already completed?" check and the user-creation write, with no atomic guard, a remote unauthenticated attacker who can reach an instance in its pre-onboarding state can create an administrator account for themselves — and concurrent requests can create multiple admin accounts in a single race. ## Affected component - Endpoint: `POST /api/users/onboarding/finish` - Route registration: `api/user/routes.go:49` → `authorizer.AllowAnonymous(http.MethodPost, "/api/users/onboarding/finish")` - Handler: `api/user/onboarding_finish_handler.go` ## Technical details The route is explicitly allowed without authentication: ```go // api/user/routes.go:48-49 authorizer.AllowAnonymous(http.MethodGet, "/api/users/onboarding/status") authorizer.AllowAnonymous(http.MethodPost, "/api/users/onboarding/finish") ``` The handler reads the onboarding state, returns 403 if already finished, and otherwise creates a user with every permission set to ReadWrite: ```go // api/user/onboarding_finish_handler.go func (h onboardingFinishHandler) handle(ctx *gin.Context) { alreadyFinished, err := h.commands.OnboardingCompleted(ctx.Request.Context()) // (1) CHECK if err != nil { panic(err) } if alreadyFinished { ctx.Status(http.StatusForbidden) return } requestPayload := &use
GHSA-pxcx-fv34-x9p5
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:GHSA-pxcx-fv34-x9p5
github.com/lucasdillmann/nginx-ignition
Source reference: /affected/0/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 0.0.0-20260621194639-0586b4e55ab
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"fixed": "0.0.0-20260621194639-0586b4e55ab"
}
]
}
],
"package": {
"name": "github.com/lucasdillmann/nginx-ignition",
"purl": "pkg:golang/github.com/lucasdillmann/nginx-ignition",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-pxcx-fv34-x9p5/GHSA-pxcx-fv34-x9p5.json"
}
}
]- Related CVEs
- CVE-2026-61628
Source reference:
/aliases
Publisher severity
high
Source reference: /database_specific/severity
- Event
- #23404 · Revision 1
- Added to Heist Feed
- Publisher date