CVE-2023-42457
Executive Summary
CVE-2023-42457 is a Denial of Service (DoS) vulnerability in plone.rest, a REST API add-on for the Plone content management system. The flaw exists in the ++api++ traverser mechanism used by plone.rest to route HTTP requests; when this traverser is accidentally or maliciously specified multiple times in a single URL path, the server's request handling time grows non-linearly, consuming increasing amounts of CPU/memory resources and degrading server responsiveness. All deployments running plone.rest 2.x (before 2.0.1) or 3.x (before 3.0.1) are affected, while the 1.x series is not vulnerable. A remote, unauthenticated attacker can trigger the condition by issuing a series of crafted HTTP requests containing repeated ++api++ segments, potentially exhausting server resources and rendering the Plone instance unresponsive to legitimate users. Patched versions 2.0.1 and 3.0.1 have been released, and a server-level redirect workaround is available.
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
Technical Analysis
plone.rest is a Python-based add-on that enables RESTful interaction with Plone, a widely deployed open-source content management system. It implements a custom URL traverser using the ++api++ segment, which acts as a routing marker in the URL path to dispatch requests to the REST API layer instead of the standard Zope/Plone object traversal. When a URL such as https://victim/++api++/some/endpoint is requested, the traverser intercepts the path and activates the API sub-application.
The vulnerability arises from the traversal logic for the ++api++ segment. According to the NVD description, "when the ++api++ traverser is accidentally used multiple times in a url, handling it takes increasingly longer." This indicates a super-linear algorithmic complexity issue inside the traverser's path-parsing or request-routing routine. Each additional occurrence of ++api++ in the URL path triggers additional processing steps — likely re-parsing, re-evaluation of the virtual host or sub-path, or recursive resolution — such that the total handling time grows disproportionately with the number of occurrences. In algorithmic terms, this is characteristic of an O(n²) or worse complexity flaw, where n equals the number of ++api++ segments in the request path.
The attack surface is the public-facing HTTP request handler of any Plone instance that has plone.rest installed and enabled. No authentication is required to trigger the behavior, as the flaw manifests during URL traversal — which happens before any authentication or authorization checks are applied. Because the cost scales with the number of repeated segments, an attacker can amplify the impact of a single request substantially (e.g., a URL containing dozens of ++api++ occurrences), and the cumulative effect of many such requests can starve the server of CPU and memory resources.
The NVD description confirms that the 1.x series is unaffected, meaning the flaw was introduced in the 2.x branch. The official patch — included in release 2.0.1 and 3.0.1 — presumably adds a guard that rejects, normalizes, or collapses repeated ++api++ segments in the URL before expensive processing occurs. The suggested workaround is to configure the front-end web server (Nginx, Apache) to redirect any URL containing multiple /++api++/ occurrences to a single /++api++, preventing the malicious pattern from ever reaching the application.
The NVD entry does not assign a CWE identifier, but the vulnerability class is best mapped to CWE-400 (Uncontrolled Resource Consumption), as the impact is exhaustion of server resources via algorithmic complexity in request handling. The CVSS base score is 7.5 with a vector reflecting network accessibility, low attack complexity, no privileges, and high availability impact.
Exploitation Scenarios
General Scenario Description: The vulnerability is only exploitable by sending HTTP requests with specially constructed URL paths. No authentication, session, or special HTTP verb is required — any of the standard verbs (GET, POST, etc.) can be used. The attack requires no more tooling than a simple HTTP client such as curl or a browser. No public PoC or exploit code has been observed at the time of reporting.
Step 1 — Reconnaissance/Target Identification: An attacker first identifies Plone instances that have plone.rest enabled. Plone sites typically expose a distinctive HTML header, response structure, or behavioral signature (e.g., X-Caching-Rule-Id headers, Via headers, or the standard Plone login page at /login). The ++api++ REST endpoints also respond with JSON when queried at valid sub-paths. Automated scanning with tools like Shodan (dork: http.title:"Plone") or mass scanners enumerating the /++api++ path (e.g., checking HTTP 200/405 responses) can identify vulnerable targets. The absence of a known patch version string in server headers can further confirm suspicion.
Step 2 — Triggering the Flaw: Once a target is identified, the attacker crafts a URL that contains multiple ++api++ segments. Since the NVD description states the issue occurs when the segment "is accidentally used multiple times," the simplest trigger is a URL like https://victim/++api++/++api++ or https://victim/++api++/++api++/++api++. The attack-class mechanism is algorithmic complexity: the traverser's handling time increases "increasingly longer" with each additional occurrence. An attacker can maximize impact by sending a request with a large number (e.g., 20–50) of these segments in a single URL, as permitted by the server's maximum URL-length settings.
Step 3 — Payload/Execution Method: At the vulnerability-class level, there is no "payload" in the traditional injection sense; instead, the malicious input is the URL path itself. The attacker sends a single HTTP request with the malformed path. For example: GET /++api++/++api++/++api++/++api++ HTTP/1.1. The server then spends disproportionately large CPU resources parsing and handling the repeated traverser segments. No public PoC is available; the attack chain is inferred directly from the vulnerability class and description — repeated triggering of an expensive request-handling path.
Step 4 — Post-Exploitation Impact: The immediate effect is degradation or complete unresponsiveness of the Plone server. This constitutes a classic resource-exhaustion denial of service. The attacker can issue a low-volume stream of requests (or a single highly-amplified request) to saturate the CPU, preventing legitimate users from accessing content, publishing, or using the site's management interfaces. Since authentication is not bypassed and no data is read or modified, the impact is purely on availability. A sustained attack of this nature could cause cascading failures — e.g., database connection timeouts, load-balancer health-check failures, or complete process crashes — depending on the deployment's resource limits.
Impact Assessment
CVSS Context: The vulnerability carries a CVSS score of 7.5 (High). The vector is AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — meaning network-exploitable, low complexity, no privileges, no user interaction, single security scope, no confidentiality or integrity impact, and high availability impact. The high availability rating reflects the fact that even a single anomalous request can measurably degrade server performance, and sustained or amplified requests can cause a full outage.
Business Impact: Plone is primarily used by organizations requiring a robust content management platform — including government agencies, universities, non-profits, and enterprises. A DoS against a public-facing Plone site can: (1) block customer or citizen access to critical public information; (2) disrupt editorial workflows if management interfaces are hosted on the same instance; (3) cause reputational damage and SLA violations; (4) potentially impact downstream services that depend on the REST API (e.g., mobile apps or integrated systems consuming Plone content via ++api++ endpoints).
Affected Systems: Any Plone 5.x/6.x deployment running plone.rest 2.0.0 or any 2.x version before 2.0.1, OR any 3.x version before 3.0.1. The 1.x series is confirmed unaffected. Instances behind a caching reverse proxy may be partially shielded if the proxy normalizes or rejects such URLs, but any configuration that forwards the raw path to the backend is vulnerable.
Blast Radius: The attack can affect the entire instance hosting the vulnerable code. In a multi-tenant Plone deployment (e.g., one ZEO server serving multiple Plone sites), the resource consumption on the shared ZServer/WSGI process can degrade service for all tenants. Lateral spread is not applicable — this is purely a resource availability issue, not a remote code execution or data compromise. However, operational resilience is impacted: load balancers may mark the backend as down due to failed health checks, magnifying the outage beyond the single node.
Detection Guidance
Sigma Rule
The following Sigma rule detects web server access logs that contain URLs with multiple ++api++ segments, which may indicate exploitation attempts. The detection leverages the http.url field and looks for two or more occurrences of the marker.
title: Plone REST API Traverser DoS Attempt (Repeated ++api++ Segments)
id: 3bf202bf-e9a4-4f98-a6de-e64c9c2e3fa7
status: experimental
description: Detects HTTP requests containing multiple ++api++ segments in the URL, targeting the plone.rest DoS vulnerability CVE-2023-42457.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2023-42457
author: Valters IT Security Team
date: 2024/05/16
logsource:
category: webserver
product: apache
# Adjust to match IIS, nginx, or generic access log mappings
detection:
selection:
http.url|contains|all:
- '++api++'
filter_expected:
http.url|contains: '/++api++/++api++' # Single double-occurrence may be accidental
condition: selection and not filter_expected
# NOTE: tuning required — count occurrences in URL, trigger on 3+ to reduce false positives
fields:
- client.ip
- http.url
- http.method
- http.user_agent
falsepositives:
- Accidental double-typing in manual browser URL entry (rare)
- Misconfigured reverse proxy rewriting URLs
level: medium
YARA Rule
The YARA rule below targets web server access log files, scanning for lines indicative of exploitation — i.e., numerous /++api++ occurrences in the request path. It is suited for scanning aggregated log archives or honeypot dumps.
rule Plone_REST_API_DoS_CVE_2023_42457 {
meta:
author = "Valters IT Security Team"
description = "Detects repeated ++api++ markers in web logs indicative of CVE-2023-42457 exploitation attempts"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2023-42457"
date = "2024-05-16"
score = 80
strings:
$marker = "++api++"
$http_get = "GET " ascii nocase
$http_post = "POST " ascii nocase
condition:
($http_get or $http_post) and
#marker >= 3
}
Suricata IDS Rule
Detects network traffic that contains repeated ++api++ strings in the HTTP URI. This rule inspects cURL-visible HTTP headers, which Suricata parses for the http.uri field.
alert http any any -> $HOME_NET any (
msg:"CVE-2023-42457 Plone REST API Traverser DoS Attempt";
flow:established,to_server;
http.uri;
content:"++api++";
http.uri;
content:"++api++";
distance:0;
http.uri;
content:"++api++";
distance:0;
classtype:attempted-dos;
reference:cve,2023-42457;
sid:10000001;
rev:1;
metadata:created_at 2024_05_16, updated_at 2024_05_16;
)
Note: The rule requires at least three ++api++ occurrences to fire, significantly reducing false positives from accidental double-segments. It assumes Suricata's HTTP parser exposes duplicate content matches within the same http.uri buffer with proper distance criteria.
Elastic Detection
EQL query to identify requests where the URL path field contains repeated ++api++ occurrences. This is best applied to Elasticsearch documents storing reverse-proxy or web server access logs (e.g., the url.path field).
any where
// Assuming fields from web server access logs indexed into Elastic
startsWith(url.path, "/++api++") and
length(url.path) - length(replace(url.path, "++api++", "")) >= 40
Explanation: The query subtracts the length of the URL string with all ++api++ markers removed from the original length. Each ++api++ is 8 characters; a difference ≥ 40 means at least 5 occurrences — strong signal of abuse.
Splunk SPL Query
index=web sourcetype=access_combined
| eval api_count = (len(uri_path) - len(replace(uri_path, "++api++", ""))) / 8
| where api_count >= 3
| stats count by src_ip, uri_path, useragent
| sort - count
| table _time, src_ip, uri_path, useragent, count
Explanation: The query computes the count of ++api++ occurrences in the URI path by comparing string lengths (each marker is 8 characters), filters for 3 or more, then aggregates by source IP to identify scanning or attack patterns.
Wazuh OSSEC Rule
XML rule for Wazuh to detect the repeated ++api++ pattern in Apache access logs.
<group name="web, plone, dos,">
<rule id="100230" level="10">
<decoded_as>web</decoded_as>
<match>++api++</match>
<regex>\S+ \S+ \S+ "GET /(\S*\+\+api\+\+\S*){3}</regex>
<description>Plone REST API traverser DoS attempt (CVE-2023-42457) - multiple ++api++ segments in request URI.</description>
<mitre>
<id>T1499</id>
</mitre>
<group>dos, web, plone,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 — CLAIMED status. The CNA (Plone Security Team) claims fixes in versions 2.0.1 and 3.0.1, but this is based on a single source (the CNA publication) and has not been independently confirmed by third-party verification or testing. Deployers should verify the fix behavior after upgrade.
1) Immediate Mitigations (before patching):
- Reverse Proxy Redirect/Block: Configure the front-end server (Nginx, Apache) to redirect or reject any URL path containing more than one
++api++occurrence. For example, in Nginx:
(adjust rewrite rules to match your web server). This prevents the malicious pattern from reaching the application layer.location ~ ^/(\+\+api\+\+/){2,} { return 301 /++api++; } - Implement Rate Limiting: Apply rate limiting per IP address at the reverse proxy level (e.g.,
limit_req_zonein Nginx) to dampen the impact of automated attack scripts. - Web Application Firewall (WAF) Rules: If a WAF is in place, add a rule to flag/block requests where the URI contains 3+
++api++segments. Many WAFs can apply regex-based block rules on the URI. - Increase Resource Headroom: As a temporary measure, increase the memory/CPU allocation of the Plone process and adjust Zope thread limits (
zserver-threads) to reduce the likelihood of process-wide starvation.
2) Patch/Upgrade Steps:
- Upgrade
plone.restto version 2.0.1 (for the 2.x line) or 3.0.1 (for the 3.x line). - For installations using Plone's unified installer or
buildout, update theeggspin inbuildout.cfg(e.g.,plone.rest = 3.0.1) and re-runbin/buildoutand restart the instance. - For pip-based deployments:
pip install --upgrade "plone.rest==3.0.1"(adjust version per line) and restart the WSGI/ZServer process. - Note: Series 1.x is unaffected; teams using 1.x do not need to upgrade for this CVE.
- After upgrade, conduct an internal test: request
/++api++/++api++/++api++and confirm the server processes it quickly (e.g., responds with a 404 or redirect) without significant CPU spikes.
3) Long-Term Hardening:
- Centralized DoS Protection: Deploy a CDN or DDoS-mitigation service in front of internet-facing Plone instances to absorb volumetric and low-and-slow algorithmic attacks.
- Monitoring & Alerting: Implement the detection rules above (Sigma/Splunk/Elastic) to trigger alerts on repeated
++api++patterns in logs, allowing proactive response before resources are exhausted. - Patch Management Cadence: Subscribe to the Plone Security Advisories mailing list to receive notifications for similar traversal/algorithmic issues across the Plone ecosystem.
- Secure Deployment Architecture: Isolate public-facing Plone instances from internal management interfaces where feasible, and ensure reverse proxies perform URL normalization before forwarding to the backend.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-42457 — Official NVD record, CVE description, and CVSS scoring.
- Plone Security Advisory (CNA Source): https://plone.org/security/hotfix/20230810 — Plone security hotfix and advisory page detailing the vulnerability and patched versions (2.0.1, 3.0.1).
- plone.rest GitHub Repository: https://github.com/plone/plone.rest (connection failed — verify manually) — Contains release tags and change logs documenting the patch commits for 2.0.1 and 3.0.1.
- CWE-400 Reference: https://cwe.mitre.org/data/definitions/400.html — Uncontrolled Resource Consumption, the vulnerability class for this issue (CWE was not assigned by CNA, mapped by analyst).
- Exploit/Threat Intel Note: At the time of reporting, no known threat-actor campaigns, exploit-in-the-wild evidence, or public exploit code have been observed. The vulnerability is not listed in the CISA KEV catalog. EPSS score of 0.00815 (53.8th percentile) indicates low current exploitation probability in the wild.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.