Feb 27, 2026·5 min read·68 visits
CVE-2026-27449 permits unauthenticated attackers to query internal Umbraco Engage API endpoints. By manipulating ID parameters, attackers can scrape sensitive form and analytics data. Immediate patching to versions 16.2.1 or 17.1.1 is required.
A critical access control failure has been identified in Umbraco Engage (formerly uMarketingSuite), specifically affecting the Forms component. The vulnerability arises from missing authentication and authorization checks on sensitive API endpoints, allowing unauthenticated remote attackers to access proprietary marketing data and form submissions. By exploiting this flaw, attackers can bypass intended security boundaries and enumerate records via Insecure Direct Object References (IDOR), leading to significant data leakage of business intelligence and potentially personally identifiable information (PII).
Umbraco Engage, a marketing automation and business intelligence extension for the Umbraco CMS, contains a high-severity Broken Access Control vulnerability. The flaw exists within the Umbraco.Engage.Forms package and general Engage API layers. These components are responsible for handling marketing analytics, tracking user engagement, and processing form submissions.
The core issue is the exposure of internal API endpoints to the public network without adequate access controls. While these endpoints typically serve legitimate administrative or headless frontend functions, they lack the necessary authentication middleware to verify the requester's identity. Furthermore, they fail to implement attribute-based authorization, meaning the server processes requests from any source as if they were trusted.
This oversight classifies the vulnerability under CWE-284 (Improper Access Control) and CWE-306 (Missing Authentication for Critical Function). The impact is strictly limited to confidentiality; the integrity of the data and the availability of the service remain unaffected. However, the sensitivity of the exposed data—ranging from marketing strategies to customer form inputs—presents a substantial risk to organizations relying on Umbraco for digital marketing operations.
The vulnerability stems from a failure to enforce security policies at the controller level within the ASP.NET Core application structure of Umbraco Engage. In the affected versions, specific API controllers responsible for retrieving form data and analytics records were deployed without the [Authorize] attribute or equivalent policy-based security filters.
In a secure Umbraco implementation, backoffice API endpoints are protected by the Umbraco Backoffice authentication scheme, which ensures that only logged-in administrators or editors can access administrative APIs. In this instance, the developers likely intended for the endpoints to be internal or restricted but omitted the specific middleware registration required to reject anonymous HTTP requests.
Compounding this missing authentication is the use of predictable resource identifiers. The endpoints accept input parameters—often sequential integers or standard UUIDs—to identify specific records (e.g., ?id=1001). Because the application implicitly trusts the request, it performs the database lookup and returns the record without verifying if the anonymous user has ownership or permission to view that specific object. This combination of missing authentication and predictable IDs creates a classic Insecure Direct Object Reference (IDOR) scenario (CWE-639).
The flaw resides in how the API controllers define their accessibility. Below is a conceptual representation of the vulnerable code pattern versus the secure implementation found in the patched versions.
Vulnerable Implementation (Conceptual):
The controller inherits from a standard base class but fails to apply security attributes. The GetSubmission action accepts an id and returns data directly.
// VULNERABLE CONTROLLER PATTERN
[Route("umbraco/engage/api/forms")]
public class EngageFormsApiController : Controller
{
// Lacks [Authorize] attribute
// Accessible by any unauthenticated client
[HttpGet("getsubmission")]
public IActionResult GetSubmission(int id)
{
// No check to see if User has access to 'id'
var submission = _repository.GetById(id);
if (submission == null) return NotFound();
// Returns sensitive JSON data directly
return Ok(submission);
}
}Patched Implementation:
The fix involves applying the [Authorize] attribute, specifically enforcing the Umbraco Backoffice policy. This ensures the request pipeline validates the session cookie or bearer token before the action method is ever invoked.
// SECURE CONTROLLER PATTERN
[Route("umbraco/engage/api/forms")]
// Enforces authentication. Only backoffice users can access.
[Authorize(Policy = "UmbracoBackoffice")]
public class EngageFormsApiController : Controller
{
[HttpGet("getsubmission")]
public IActionResult GetSubmission(int id)
{
// Request is now pre-validated by middleware.
// Additional checks for specific permissions (e.g., Content Read)
// may also be implemented here.
var submission = _repository.GetById(id);
return Ok(submission);
}
}The remediation effectively shifts the security responsibility to the framework's middleware, preventing the execution of the business logic for unauthorized requests.
Exploitation of CVE-2026-27449 is trivial due to the lack of complex prerequisites. An attacker requires only network access to the Umbraco instance and knowledge of the endpoint structure.
Step 1: Endpoint Enumeration
The attacker identifies the target server runs Umbraco Engage. They probe for common Engage API paths. Since the vulnerability is in a standard package, the paths are consistent across installations (e.g., /umbraco/engage/api/...).
Step 2: ID Manipulation The attacker sends a GET request to a vulnerable endpoint, supplying a guessed ID.
curl -X GET "https://target.com/umbraco/engage/api/forms/details?id=500" -H "Accept: application/json"Step 3: Data Exfiltration
If the ID exists, the server returns a 200 OK response with a JSON payload containing the form submission or analytics data. The attacker then automates this process using a script (e.g., Python or Burp Intruder) to iterate through a range of IDs (1 to 10000), scraping the entire database of submissions without triggering standard login failure alerts.
The primary impact of this vulnerability is a high-severity loss of confidentiality. The specific nature of the data exposed depends on how the organization utilizes Umbraco Engage, but the potential scope is significant.
Data Types at Risk:
CVSS v3.1 Breakdown (7.5 High):
Although Integrity and Availability are not directly impacted, the reputational damage and regulatory compliance violations (GDPR, CCPA) resulting from the leak of user PII constitute a critical business risk.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Umbraco.Engage.Forms Umbraco | < 16.2.1 | 16.2.1 |
Umbraco.Engage.Forms Umbraco | >= 17.0.0, < 17.1.1 | 17.1.1 |
| Attribute | Detail |
|---|---|
| CVE ID | CVE-2026-27449 |
| CVSS v3.1 | 7.5 (High) |
| CWE IDs | CWE-284, CWE-306, CWE-639 |
| Attack Vector | Network |
| Privileges Required | None |
| Impact | Confidentiality (High) |
Improper Access Control
netfoil, an allowlist-based DNS proxy, failed to sanitize ALPN fields parsed from untrusted DNS-over-HTTPS (DoH) HTTPS Resource Records. This allowed attackers to inject ANSI escape sequences into log files or trigger Denial of Service (DoS) via uncontrolled memory allocations.
An issue was discovered in the tokio-postgres library for Rust prior to version 0.7.18. A trust assumption mismatch between the PostgreSQL protocol messages sent by a server and how they are parsed and indexed by the client-side library allows a rogue or compromised database server to trigger a Denial of Service (DoS) crash via an unhandled out-of-bounds slice indexing panic.
CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.
An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.
CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.
Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.