← Back to Feed CACHED · 2026-09-07 14:29:51 · CACHE_KEY CVE-2023-54391
CVE-2023-54391 · CWE-304 · Disclosed 2026-09-01

Proxmox Virtual Environment

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Someone left the master key under the doormat for three years, and now the whole neighborhood knows

CVE-2023-54391 is an authentication bypass in libpve-access-control (versions 7.0-7 through before 8.0.4) shipped with Proxmox Virtual Environment 7.0–7.4 and the initial 8.0 release. A single unauthenticated POST to /api2/json/access/ticket with an arbitrary tfa-challenge value causes the server to skip password verification entirely and issue a valid session ticket for *any enabled account* — including root@pam. No credentials, no brute-force, no user interaction. The attacker lands directly on the hypervisor management plane with full control of every VM, container, and storage backend. The fix shipped silently in libpve-access-control 8.0.4 in July 2023 as part of a TFA code rework; the security implications weren't formally disclosed until advisory PSA-2026-00043-1 on 1 September 2026.

The vendor's CVSS 9.8 / CRITICAL rating is accurate and, if anything, generous in how calmly it states the situation. This is a zero-click, zero-knowledge, unauthenticated full takeover of a *hypervisor* — the single most privileged tier in a virtualized stack. The only population limiter is that all affected versions are now end-of-life (PVE 7 EOL July 2024, PVE 8.0 superseded). But EOL doesn't mean gone: community reports, Shodan data (~25,000 internet-facing Proxmox instances on port 8006), and the post-VMware migration wave suggest a meaningful tail of PVE 7.x boxes still running in production. The vendor confirmed learning about active exploitation through multiple independent reports within 48 hours of disclosure.

"Unauthenticated single-POST root takeover of any Proxmox hypervisor still on EOL 7.x"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Locate Proxmox management API

The attacker scans for port 8006/tcp (pve-api-daemon) using Shodan, Censys, or FOFA. Proxmox VE's default HTTPS listener on 8006 has a distinctive TLS certificate and server header. Approximately 25,000 instances are indexed on public IPv4. Internal attackers on the LAN can locate it via ARP/mDNS or simply by knowing the infrastructure.
Conditions required:
  • Network reachability to port 8006 on the Proxmox host
Where this breaks in practice:
  • Well-managed enterprises place hypervisor management on an isolated VLAN or behind a VPN
  • Firewall rules should block 8006 from untrusted networks
Detection/coverage: Shodan/Censys dork: port:8006 "pve-api-daemon". Internal: asset inventory should flag any PVE 7.x or early 8.0 host.
STEP 02

Craft tfa-challenge bypass request

The attacker sends POST /api2/json/access/ticket with username=root@pam&tfa-challenge=anything. The libpve-access-control code enters the TFA validation branch but, because the user has no second factor configured (the default), it skips password verification entirely and returns a valid PVEAuthCookie. Public PoC by Nebu Security provides a working curl one-liner.
Conditions required:
  • Target account (e.g. root@pam) must exist and be enabled
  • Target account must NOT have a second factor (TOTP/U2F/WebAuthn) configured — this is the default
Where this breaks in practice:
  • Organizations that enforced MFA on all Proxmox accounts are immune
  • Accounts with TOTP/U2F/WebAuthn configured are not exploitable via this path
Detection/coverage: WAF or reverse-proxy rules can flag POST requests to /api2/json/access/ticket containing tfa-challenge when the account has no TFA enrollment. Proxmox access logs record every ticket issuance.
STEP 03

Obtain valid session ticket

The server responds with a PVEAuthCookie and a CSRFPreventionToken. The attacker now has an authenticated session as root@pam (or whichever user was targeted). This grants full API and web GUI access to the Proxmox cluster management plane.
Conditions required:
  • Successful bypass from Step 2
Where this breaks in practice:
  • None — the response is immediate and deterministic
Detection/coverage: Audit log shows a successful login for root@pam from an unexpected source IP. SIEM correlation on Proxmox pveproxy auth events.
STEP 04

Hypervisor takeover and lateral movement

With root@pam access, the attacker can: create/destroy VMs, access VM consoles, read/write VM disk images, execute commands on the host via the Proxmox shell, pivot to other cluster nodes via the trusted cluster communication channel, and exfiltrate or encrypt all hosted workloads. This is full hypervisor compromise — equivalent to physical access to the server room.
Conditions required:
  • Valid root@pam session from Step 3
Where this breaks in practice:
  • None at this stage — root@pam is the highest-privilege account
Detection/coverage: Host-based IDS on the Proxmox node, unexpected process execution, VM lifecycle events in cluster logs.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationYes. Proxmox confirmed exploitation via multiple independent reports within 48 hours of disclosure (Sept 1–3, 2026). Forum posts on Proxmox Support and LowEndTalk report compromised and encrypted hosts, particularly on OVH infrastructure.
PoC AvailabilityPublic. Researcher Nebu Security published an exploitation summary and working PoC gist on GitHub. The exploit is a single curl command — trivial to weaponize.
EPSS Score0.01747 (top ~5%). Score is climbing post-disclosure; expect significant increase as scanner signatures propagate.
KEV StatusNot listed as of 2026-09-07. CISA enrichment marks exploitation as "none" — likely a lag given confirmed in-the-wild reports.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — Network-accessible, no privileges, no interaction, full CIA impact. Textbook 9.8.
Affected VersionsProxmox VE 7.0–7.4, initial Proxmox VE 8.0. Specifically libpve-access-control 7.0-7 through before 8.0.4.
Fixed Versionlibpve-access-control 8.0.4 (released July 20, 2023). No backport to PVE 7.x branch. All currently supported PVE releases (8.1+, 9.x) are unaffected.
Exposure Data~25,000 Proxmox instances on public IPv4 port 8006 per Shodan (Sept 2024 baseline); ~4,000 on Hetzner alone. Unknown fraction still running vulnerable 7.x.
Disclosure TimelineFix shipped silently July 2023 → PVE 7 EOL July 2024 → Formal advisory PSA-2026-00043-1 published Sept 1, 2026 → PoC and exploitation reports within 48 hours.
Reporting ResearcherNebu Security (PoC and public writeup). Original discovery attributed to the Proxmox security team during TFA code rework; security significance recognized retrospectively.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

The single most decisive factor is the role multiplier: Proxmox VE is a hypervisor by definition — 100% of affected installs sit at the most privileged tier of the virtualization stack, and unauthenticated exploitation yields root-on-hypervisor, which means full control of every hosted VM, container, and storage volume. Active in-the-wild exploitation with a public single-request PoC removes any theoretical friction discount.

HIGH Vulnerability existence, affected versions, and exploit mechanism
HIGH Public PoC availability and trivial exploitation complexity
MEDIUM Scale of in-the-wild exploitation (confirmed but not quantified by CISA/KEV)
LOW Precise count of still-vulnerable PVE 7.x instances in production globally

Why this verdict

  • Zero-friction exploit chain: Single unauthenticated HTTP POST, no credentials needed, no user interaction, deterministic success. Public PoC is a curl one-liner.
  • Role multiplier — hypervisor is the highest-value tier: Proxmox VE is *by definition* a hypervisor. Compromise of root@pam grants control over every VM, container, storage backend, and cluster peer. Blast radius is fleet-scale: one exploited host = every workload on that host and potentially the entire cluster.
  • Active exploitation confirmed: Proxmox acknowledged in-the-wild attacks within 48 hours of disclosure. Community reports of encrypted hosts on hosting providers.
  • Default configuration is vulnerable: Accounts without MFA (the out-of-box default for all Proxmox accounts including root@pam) are exploitable. No non-default hardening is required to be at risk.
  • Internet exposure is real: ~25,000 Proxmox management interfaces indexed on Shodan. Even internal-only instances are reachable by any attacker with LAN access (post-phish, post-VPN compromise).

Why not higher?

The vendor already assigned CVSS 9.8 — there is no higher standard severity bucket. The only theoretical cap-breaker would be a wormable Scope:Changed vector, which this is not (S:U).

Why not lower?

Every downgrade argument fails the floor test. EOL-only versions affected narrows the population but does not change blast radius: a single vulnerable Proxmox host still means total hypervisor compromise. The component is canonically a hypervisor (100% of installs are high-value-role), exploitation is confirmed in the wild, and the PoC is trivial. Friction is effectively zero for any reachable instance with default config. Downgrading below CRITICAL would require evidence that fewer than 1% of the installed base remains on PVE 7.x — no such data exists, and community/forum activity suggests otherwise.

05 · Compensating Control

What to do — in priority order.

  1. Block port 8006 from all untrusted networks immediately — Restrict Proxmox management API access to a dedicated management VLAN or VPN-only. This is the single highest-impact control: if attackers can't reach the API, the exploit fails. Deploy within the noisgate mitigation SLA of ≤ 3 days.
  2. Enforce MFA on all Proxmox accounts, especially root@pam — Accounts with a configured second factor (TOTP, U2F, or WebAuthn) are not exploitable via this path. Enable MFA on every account in the PVE realm configuration. This is a durable control even before patching. Deploy within 3 days.
  3. Disable or rename root@pam if operationally feasible — Create a named admin account with MFA, assign PVEAdmin role, and disable direct root@pam login via PAM configuration. Eliminates the highest-value target account.
  4. Deploy WAF or reverse-proxy rule to block tfa-challenge in unauthenticated ticket requests — If a reverse proxy sits in front of Proxmox, add a rule to reject POST requests to /api2/json/access/ticket containing the tfa-challenge parameter when no prior authenticated session exists. This is a surgical block for this specific exploit.
  5. Upgrade to Proxmox VE 8.2+ or 9.x — The only true remediation is upgrading off EOL. libpve-access-control 8.0.4+ is fixed, but PVE 7.x and initial 8.0 are end-of-life and will receive no further patches for *any* vulnerability. Plan and execute migration within the noisgate remediation SLA of ≤ 90 days.
What doesn't work
  • Network-level rate limiting — the exploit requires exactly one request; rate limiting doesn't help.
  • Password complexity policies — the vulnerability bypasses password verification entirely; strong passwords are irrelevant.
  • Fail2ban on Proxmox — the exploit produces a *successful* login event, not a failed one; Fail2ban won't trigger.
  • TLS/certificate pinning — the exploit uses the legitimate HTTPS endpoint; transport-layer controls don't apply.
06 · Verification

Crowdsourced verification payload.

Run this script on each Proxmox VE host as root (or any user with read access to dpkg). Invoke with: sudo bash check_cve_2023_54391.sh. No arguments needed. Returns exit code 0 for PATCHED, 1 for VULNERABLE, 2 for UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2023_54391.sh — Detect CVE-2023-54391 (Proxmox auth bypass)
# Run on the Proxmox VE host as root or with dpkg read access.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -euo pipefail

PKG="libpve-access-control"
FIXED="8.0.4"

# Check if this is a Proxmox host
if ! command -v pveversion &>/dev/null; then
  echo "UNKNOWN — pveversion not found; this may not be a Proxmox VE host."
  exit 2
fi

# Get installed version of libpve-access-control
INSTALLED=$(dpkg-query -W -f='${Version}' "$PKG" 2>/dev/null || true)

if [ -z "$INSTALLED" ]; then
  echo "UNKNOWN — $PKG is not installed."
  exit 2
fi

echo "Detected $PKG version: $INSTALLED"
echo "Fixed version: >= $FIXED"

# Compare versions using dpkg
if dpkg --compare-versions "$INSTALLED" ge "$FIXED"; then
  echo "PATCHED — $PKG $INSTALLED is at or above the fix ($FIXED)."
  exit 0
else
  echo "VULNERABLE — $PKG $INSTALLED is below the fix ($FIXED). CVE-2023-54391 applies."
  # Additional check: is MFA configured on root@pam?
  if command -v pveum &>/dev/null; then
    TFA_COUNT=$(pveum user tfa list root@pam 2>/dev/null | grep -c 'totp\|u2f\|webauthn' || true)
    if [ "$TFA_COUNT" -gt 0 ]; then
      echo "NOTE: root@pam has $TFA_COUNT TFA method(s) configured — partially mitigated."
    else
      echo "WARNING: root@pam has NO TFA configured — fully exploitable."
    fi
  fi
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: treat this as a fire drill. If you have *any* Proxmox VE 7.x or initial 8.0 hosts in your fleet, assume they are actively targeted. Per the noisgate mitigation SLA for CRITICAL, deploy compensating controls within 3 days: (1) firewall port 8006 to management-only VLANs or VPN, (2) enforce MFA on every Proxmox account, especially root@pam. These two actions neutralize the exploit even on unpatched hosts. Then begin your noisgate remediation SLA of ≤ 90 days: migrate all PVE 7.x hosts to Proxmox VE 8.2+ or 9.x — there is no patch-in-place option because the entire 7.x branch is end-of-life. Given confirmed in-the-wild exploitation, if any of your Proxmox management interfaces are internet-facing, pull them offline *today* — don't wait for the 3-day window. Run the verification script on every Proxmox node to identify your exposure surface, and audit pveproxy access logs for any unexpected root@pam logins since September 1.

Sources

  1. BlackTree — A Three-Year-Old Proxmox Fix Just Became an Emergency
  2. SecurityOnline — Proxmox VE 7 Auth Bypass: PoC Public, Exploited in the Wild
  3. VulnCheck Advisory — Proxmox VE Authentication Bypass via tfa-challenge Parameter
  4. GitHub Advisory Database — GHSA-m457-grcf-698x
  5. IONIX Threat Center — CVE-2023-54391
  6. nFlo Knowledge Base — CVE-2023-54391 Authentication Bypass
  7. runZero — Managing End-of-Life Proxmox Hypervisors
  8. Proxmox Support Forum — PVE 7 Vulnerability Discussion
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.