CVE-2024-22889
Executive Summary
CVE-2024-22889 is an access control vulnerability in Plone CMS version 6.0.9. Due to improper enforcement of permissions, a remote unauthenticated attacker can list and view all files hosted on the Plone site by sending a crafted HTTP request. This leads to unauthorized disclosure of potentially sensitive data, including configuration files, uploaded documents, and media assets. The vulnerability has a public proof-of-concept but no official patch or CVSS vector has been assigned by the vendor at this time.
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
Plone is a Python-based CMS distributed via PyPI. The vulnerable component is part of the core Plone package. Organizations using Plone v6.0.9 should treat this as a high-risk supply chain issue, as the vulnerability allows direct file enumeration without authentication. No patched version has been released on PyPI as of this report.
CVSS Breakdown & Threat Level
While no official CVSS vector is available, a reasonable assessment based on the impact is:
- Attack Vector (AV): Network (N)
- Attack Complexity (AC): Low (L)
- Privileges Required (PR): None (N)
- User Interaction (UI): None (N)
- Scope (S): Unchanged (U)
- Confidentiality (C): High (H)
- Integrity (I): None (N)
- Availability (A): None (N)
Estimated CVSS Score: 7.5 (High)
Threat Level: High – Exploitation is trivial and requires no authentication.
Deep Dive & Mechanics
The vulnerability resides in Plone's file serving mechanism. Plone uses Zope's traversal and publishing machinery. In version 6.0.9, a crafted request can bypass access control checks for file objects stored in the ZODB (Zope Object Database). By manipulating URL parameters or traversal paths, an attacker can enumerate and retrieve files that should be restricted to authenticated users.
The root cause is a missing permission check in the file view or download view. When a request is made to a file object's URL, the system fails to verify that the current user has the "View" or "Access contents information" permission. This allows any unauthenticated user to list files in a folder and download them.
Vulnerable vs. Patched Code
Vulnerable Code (Plone v6.0.9):
# In Products.CMFPlone.browser.file.py or similar
class FileView(BrowserView):
def __call__(self):
# Missing permission check
return self.index()
Patched Code (Hypothetical fix):
from plone.protect import checkAuthenticator
from Products.CMFCore.utils import getToolByName
class FileView(BrowserView):
def __call__(self):
# Add permission check
mtool = getToolByName(self.context, 'portal_membership')
if not mtool.checkPermission('View', self.context):
raise Unauthorized("You are not allowed to view this file.")
return self.index()
The fix adds a permission check before rendering the file view, ensuring only authorized users can access the file.
Exploitation & Lab Setup
Red Team
Lab Setup:
- Deploy Plone v6.0.9 using Docker:
docker run -d -p 8080:8080 plone/plone:6.0.9 - Create a Plone site and upload a test file (e.g.,
secret.pdf) to a folder. - Note the file's URL:
http://localhost:8080/Plone/folder/secret.pdf
Exploitation: Craft a request to enumerate files. The exact payload may vary, but a common technique is to use traversal or path manipulation:
# Attempt to list files in a folder
curl -v "http://target:8080/Plone/folder/@@files"
# Attempt to download a specific file
curl -v "http://target:8080/Plone/folder/secret.pdf"
If the vulnerability is present, the server will return the file content without authentication.
Blue Team
Detection:
- Monitor for repeated requests to
@@filesor similar listing endpoints from unauthenticated IPs. - Look for unusual traversal patterns in URL paths (e.g.,
../or%2e%2e). - Alert on access to file objects without a valid session cookie.
Hunting:
- Search logs for
GET /Plone/*/@@filesorGET /Plone/*/*.pdf(or other extensions) from IPs not associated with authenticated users. - Correlate with failed login attempts to identify potential scanning.
Indicators of Compromise (IOCs)
- Network:
- HTTP requests to
/Plone/*/@@filesor/Plone/*/@@download - Repeated GET requests for file extensions (
.pdf,.docx,.xlsx,.zip) without prior authentication
- HTTP requests to
- File System:
- Unauthorized access to files in
var/orparts/directories (if Plone is deployed with buildout)
- Unauthorized access to files in
- Logs:
- Access log entries with
200status for file downloads from unauthenticated users - Error log entries showing
Unauthorizedexceptions (if partial fix is applied)
- Access log entries with
Detection Engineering
YARA Rule
rule CVE_2024_22889_Plone_File_Enumeration {
meta:
description = "Detects HTTP requests attempting to enumerate files in Plone v6.0.9"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2024-22889"
strings:
$s1 = "/@@files" ascii wide nocase
$s2 = "/@@download" ascii wide nocase
$s3 = "GET /Plone" ascii wide nocase
condition:
any of ($s1, $s2) and $s3
}
Sigma Rule
title: Plone File Enumeration Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to enumerate files in Plone CMS via CVE-2024-22889
author: Valters IT
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- '/@@files'
- '/@@download'
condition: selection
falsepositives:
- Legitimate file downloads by authenticated users (check for session cookie)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-22889 Plone File Enumeration Attempt"; flow:to_server,established; content:"GET"; http_method; content:"/@@files"; http_uri; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Restrict network access: Place Plone behind a reverse proxy (e.g., Nginx) and block direct access to file-serving endpoints for unauthenticated users.
- Apply virtual patching: Use a WAF rule to block requests containing
/@@filesor/@@downloadunless a valid session cookie is present. - Monitor logs: Actively search for exploitation attempts using the provided Sigma and Suricata rules.
Long-term Fix:
- Upgrade to a patched version of Plone once released.
- If no patch is available, manually apply the code fix shown in the "Vulnerable vs. Patched Code" section to the Plone installation.
Workaround:
- Disable anonymous access to the site entirely if business requirements allow.
Valters IT