CVE-2026-55445: Qinglong panel: unauth admin credential reset bypass

GHSA-v667-gc2r-2xm7CRITICALCISA: ATTEND
Published August 20, 2026
CISO Take

Qinglong's initialization guard, meant to block credential resets after first setup, only checks the `/api/user/init` path — but the panel also accepts `/open/user/init`, which is whitelisted from JWT auth and silently rewritten to `/api/user/init` after the guard has already passed, so an unauthenticated request can reset the admin account on any already-initialized instance. The advisory rates this Medium, but the practical outcome is full administrative takeover, including the ability to run arbitrary cron jobs and scripts on the host — a severity mismatch CISOs should not anchor on. There is no public exploit or Nuclei template yet and EPSS sits at 0.4% (bottom of the exploitation-likelihood distribution), and it is not in CISA KEV, so this is not an active-exploitation emergency, but the bug is trivial to weaponize (a single unauthenticated PUT request) once attackers notice it. Patch to commit `6bec52dca158` / package version `>=2.20.1` immediately on any internet-facing Qinglong instance, and in the interim take the panel off the public internet or front it with an allowlist/VPN and alert on unexpected `PUT /open/user/init` requests. If you cannot confirm the instance was never re-initialized by an attacker, rotate admin credentials and audit cron job history for unrecognized entries.

Sources:NVDGitHub AdvisoryEPSSATLASOpenSSF

What is the risk?

Advisory severity is Medium, but the actual blast radius is high: successful exploitation grants full administrative control of the panel, which in turn allows arbitrary script/cron execution on the underlying host — functionally equivalent to remote code execution. Exploitability is trivial (single unauthenticated HTTP request, no special tooling), which pushes real-world risk above what the Medium label suggests for any exposed instance. Mitigating factors: no public PoC beyond the researcher's demonstration script, no Nuclei template, EPSS is low (0.404%), and it is not listed in CISA KEV, so there's no evidence of active mass scanning yet. Risk is concentrated entirely on internet-exposed, already-initialized Qinglong instances — internal-only deployments behind a VPN or firewall are not reachable by this vector.

How does the attack unfold?

Initial Access
Attacker sends an unauthenticated PUT request to /open/user/init against an internet-exposed, already-initialized Qinglong panel.
AML.T0049
Auth Bypass / Credential Reset
JWT whitelist and a flawed init-guard path check let the request slip through before a URL rewrite routes it to the real init handler, resetting admin credentials to attacker-chosen values.
Privileged Access
Attacker logs in with the new admin credentials, gaining full control of the panel.
AML.T0012
Impact — Arbitrary Code Execution
Attacker creates or modifies cron jobs/scripts to execute arbitrary commands on the host, enabling data theft, credential harvesting, or lateral movement.
AML.T0050

What systems are affected?

PackageEcosystemVulnerable RangePatched
Panelnpm< 2.20.12.20.1
5.8KOpenSSF 6.5514 dependentsPushed 4d ago67% patched~15d to patchFull package profile →

Do you use Panel? You're affected.

How severe is it?

CVSS 3.1
N/A
EPSS
0.5%
chance of exploitation in 30 days
Higher than 45% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Trivial
Exploitation Confidence
medium
○CISA SSVC: Public PoC
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What should I do?

1 step
  1. 1) Patch: upgrade to whyour/qinglong commit 6bec52dca158 or later (package version >=2.20.1), which adds /open/user/init and /open/user/notification/init to the init-guard checklist. 2) Workaround if patching is delayed: do not expose the Qinglong panel directly to the internet — place it behind a VPN, IP allowlist, or reverse-proxy authentication; explicitly block PUT /open/user/init and /open/user/notification/init at the reverse proxy/WAF layer. 3) Detection: alert on any PUT request to /open/user/init or /open/user/notification/init in access logs, and monitor for unexpected admin login events or newly created/modified cron jobs. 4) If exposure cannot be ruled out, rotate admin credentials and review cron job/script history for unauthorized entries or secrets exfiltration.

What does CISA's SSVC say?

DecisionAttend
Exploitationpoc
AutomatableYes
Technical Impacttotal

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

ISO 42001
A.6.2.4-Security of AI system infrastructure
NIST AI RMF
MANAGE-2.1-Third-party component risk management

Frequently Asked Questions

What is CVE-2026-55445?

Qinglong's initialization guard, meant to block credential resets after first setup, only checks the `/api/user/init` path — but the panel also accepts `/open/user/init`, which is whitelisted from JWT auth and silently rewritten to `/api/user/init` after the guard has already passed, so an unauthenticated request can reset the admin account on any already-initialized instance. The advisory rates this Medium, but the practical outcome is full administrative takeover, including the ability to run arbitrary cron jobs and scripts on the host — a severity mismatch CISOs should not anchor on. There is no public exploit or Nuclei template yet and EPSS sits at 0.4% (bottom of the exploitation-likelihood distribution), and it is not in CISA KEV, so this is not an active-exploitation emergency, but the bug is trivial to weaponize (a single unauthenticated PUT request) once attackers notice it. Patch to commit `6bec52dca158` / package version `>=2.20.1` immediately on any internet-facing Qinglong instance, and in the interim take the panel off the public internet or front it with an allowlist/VPN and alert on unexpected `PUT /open/user/init` requests. If you cannot confirm the instance was never re-initialized by an attacker, rotate admin credentials and audit cron job history for unrecognized entries.

Is CVE-2026-55445 actively exploited?

No confirmed active exploitation of CVE-2026-55445 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-55445?

1) Patch: upgrade to `whyour/qinglong` commit `6bec52dca158` or later (package version `>=2.20.1`), which adds `/open/user/init` and `/open/user/notification/init` to the init-guard checklist. 2) Workaround if patching is delayed: do not expose the Qinglong panel directly to the internet — place it behind a VPN, IP allowlist, or reverse-proxy authentication; explicitly block `PUT /open/user/init` and `/open/user/notification/init` at the reverse proxy/WAF layer. 3) Detection: alert on any `PUT` request to `/open/user/init` or `/open/user/notification/init` in access logs, and monitor for unexpected admin login events or newly created/modified cron jobs. 4) If exposure cannot be ruled out, rotate admin credentials and review cron job/script history for unauthorized entries or secrets exfiltration.

What systems are affected by CVE-2026-55445?

This vulnerability affects the following AI/ML architecture patterns: ml_ui / self-hosted admin dashboards, automation and cron-orchestration platforms used to run AI-adjacent scripts/bots.

What is the CVSS score for CVE-2026-55445?

No CVSS score has been assigned yet.

What is the AI security impact?

Affected AI Architectures

ml_ui / self-hosted admin dashboardsautomation and cron-orchestration platforms used to run AI-adjacent scripts/bots

MITRE ATLAS Techniques

AML.T0012Valid Accounts
AML.T0049Exploit Public-Facing Application
AML.T0050Command and Scripting Interpreter

Compliance Controls Affected

ISO 42001: A.6.2.4
NIST AI RMF: MANAGE-2.1

What are the technical details?

Original Advisory

### Summary The init guard middleware in Qinglong only checks `/api/user/init` paths but not `/open/user/init`, which is whitelisted from JWT authentication and rewritten to `/api/user/init` after the guard has already passed, allowing unauthenticated admin credential reset on initialized instances. ### Affected Package - **Ecosystem:** npm - **Package:** whyour/qinglong - **Affected versions:** < 6bec52dca158 - **Patched versions:** >= 6bec52dca158 ### Severity Medium ### CWE CWE-287 — Improper Authentication ### Details The Qinglong panel has an initialization endpoint (`/api/user/init`) that allows setting admin credentials. Once the system is initialized, an init guard middleware is supposed to block further calls. The middleware in `back/loaders/express.ts` only checks: ```javascript !['/api/user/init', '/api/user/notification/init'].includes(pathLower) ``` However, the application also has a URL rewrite rule: `rewrite('/open/*', '/api/$1')`. The `/open/*` paths are whitelisted from JWT authentication. The middleware ordering creates the bypass: first, JWT auth sees `/open/*` paths match the whitelist regex and skips authentication. Second, the init guard only checks for `/api/user/init` -- `/open/user/init` passes through as "not an init path". Third, the URL rewrite transforms `/open/user/init` to `/api/user/init` after the guard has already passed. This means an unauthenticated attacker can send `PUT /open/user/init` with new credentials to reset the admin account on any Qinglong panel instance, gaining full administrative access. ### PoC ```javascript /** * CVE-2026-3965 - Qinglong Panel /open/user/init Auth Bypass * * The init guard middleware only checks /api/user/init paths. * But /open/user/init is whitelisted from JWT auth and rewritten * to /api/user/init via express-urlrewrite AFTER the guard. */ "use strict"; // Simulate the init guard middleware exactly as in the source function initGuardMiddleware(reqPath, authInfo) { const pathLower = reqPath.toLowerCase(); // Exact check from the vulnerable source if (!['/api/user/init', '/api/user/notification/init'].includes(pathLower)) { return { action: "next" }; // passes through } let isInitialized = true; if ( Object.keys(authInfo).length === 2 && authInfo.username === 'admin' && authInfo.password === 'admin' ) { isInitialized = false; } if (isInitialized) { return { action: "block", code: 450, message: "Error" }; } else { return { action: "next" }; } } const authInfo = { username: "realAdmin", password: "str0ngP@ss!" }; console.log("System state: initialized (non-default credentials)"); // Test 1: Direct /api/user/init is blocked const test1 = initGuardMiddleware("/api/user/init", authInfo); console.log("\n[Test 1] PUT /api/user/init:"); console.log(" Guard result:", test1.action); console.log(" Blocked:", test1.action === "block"); // Test 2: /open/user/init BYPASSES init guard const test2 = initGuardMiddleware("/open/user/init", authInfo); console.log("\n[Test 2] PUT /open/user/init:"); console.log(" Guard result:", test2.action); console.log(" Bypassed guard:", test2.action === "next"); if (test2.action === "next") { const rewrittenPath = "/open/user/init".replace(/^\/open\//, "/api/"); console.log(" After rewrite:", rewrittenPath); console.log(" Reaches init handler: true"); } if (test1.action === "block" && test2.action === "next") { console.log("\nVULNERABILITY CONFIRMED: /open/user/init bypasses the init guard"); console.log("An attacker can reset admin credentials on an initialized instance."); process.exit(0); } else { console.log("\nVULNERABILITY NOT CONFIRMED"); process.exit(1); } ``` **Steps to reproduce:** 1. `git clone https://github.com/whyour/qinglong /tmp/qinglong_test` 2. `cd /tmp/qinglong_test && git checkout 6bec52dc~1` 3. `node poc.js` **Expected output:** ``` VULNERABILITY CONFIRMED /open/user/init bypasses the init guard; the guard only checks /api/user/init but /open/ path is whitelisted and rewritten after. ``` ### Impact An unauthenticated attacker can send `PUT /open/user/init` with new credentials to reset the admin account on any Qinglong panel instance. This provides full administrative access, enabling the attacker to execute arbitrary cron jobs and scripts on the server. ### Suggested Remediation Add `/open/user/init` and `/open/user/notification/init` to the init guard check list. Alternatively, move the URL rewrite middleware to run before the init guard. Consider implementing the init guard at the handler level rather than as path-based middleware. ### References - Incomplete fix commit: https://github.com/whyour/qinglong/commit/6bec52dca158481258315ba0fc2f11206df7b719 - Original CVE: CVE-2026-3965

Exploitation Scenario

An attacker scans the internet for exposed Qinglong panels (a common self-hosted tool, often left publicly reachable for convenience). Finding an initialized instance, they send an unauthenticated `PUT /open/user/init` request with attacker-chosen admin credentials; the JWT middleware whitelists the `/open/*` prefix and skips authentication, the init guard doesn't recognize `/open/user/init` as a protected path and lets the request through, and the URL rewrite then routes it to the real init handler, which happily resets the admin account since the guard already passed. The attacker logs in with the new credentials, gains full admin access to the panel, and creates or modifies cron jobs to execute arbitrary shell commands on the host — potentially exfiltrating stored API keys/secrets (including any LLM API keys or automation credentials configured in the panel) or pivoting further into the network.

Weaknesses (CWE)

CWE-287 — Improper Authentication: When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.

  • [Architecture and Design] Use an authentication framework or library such as the OWASP ESAPI Authentication feature.

Source: MITRE CWE corpus.

Timeline

Published
August 20, 2026
Last Modified
August 20, 2026
First Seen
August 20, 2026

Related Vulnerabilities