Skip to content
Heist/ feed
HighFix available

nginx ignition has Unauthenticated Admin Account Creation via Onboarding Race Condition

Type: advisorySource: OSV1 source record

## 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

Announced Source revision 1
Original source ↗

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
Read the original announcement