CVE-2026-55248
Python vulnerability analysis and mitigation

Overview

CVE-2026-55248 is a multi-vector vulnerability in plone.app.portlets, the portlet management package for the Plone CMS, encompassing denial of service (DoS), server-side request forgery (SSRF), and stored cross-site scripting (XSS). An authenticated member with portlet management permissions can configure the RSS portlet's feed URL to point to an arbitrarily large resource, causing excessive memory consumption; use internal hostnames, IP addresses, or explicit ports to probe internal network services; or supply a javascript: URL in a feed item link to execute script in a victim's browser. Affected versions are plone.app.portlets < 5.0.8, >= 6.0.0 and < 6.0.4, and >= 7.0.0 and < 7.0.2. The vulnerability was published on August 28, 2026, and carries a CVSS v3.1 base score of 9.1 (Critical) (GitHub Advisory, Feedly).

Technical details

The root cause is insufficient input validation in the RSS portlet's URL handling logic, classified as CWE-400 (Uncontrolled Resource Consumption) with an estimated secondary weakness of CWE-918 (SSRF). The affected functions — _rss_feed_url_validator, _normal_url_validator, RSSFeed._retrieveFeed, RSSFeed._buildItemDict, and the FEED_DATA in-memory cache — failed to restrict feed URLs to safe external hosts, impose download size limits, or sanitize item link URLs. Specifically, the old _retrieveFeed implementation passed the feed URL directly to feedparser.parse() without a size cap, allowing unbounded memory allocation; the URL validator only checked for multi-line input and non-HTTP schemes, permitting internal IP addresses, single-word hostnames (e.g., http://backend/), and explicit port numbers (e.g., http://internal:8080/). Additionally, _buildItemDict stored item link URLs without validating them, allowing javascript: scheme URLs to persist in the FEED_DATA cache and be rendered to users (GitHub Advisory, Patch Commit).

Impact

Exploitation can result in three distinct impacts: a denial of service by exhausting server memory when the Plone process downloads an unbounded response into the FEED_DATA RAM cache; information disclosure and internal network reconnaissance via SSRF, where the server can be directed to probe internal hosts, private IP ranges, and open ports; and stored XSS, where a javascript: URL embedded in a feed item link is persisted and executed in the browser of any user who clicks the rendered portlet link. The scope is changed (S:C in CVSS terms), meaning the XSS impact extends beyond the Plone application to affect end-user browsers. Availability impact is rated High, while confidentiality and integrity impacts are rated Low (GitHub Advisory).

Exploitability

Exploitation requires low privileges — specifically, the plone.app.portlets.ManageOwnPortlets permission, which may be granted to regular site members depending on site configuration. No public proof-of-concept exploit code has been identified, and there is no evidence of in-the-wild exploitation at this time. The EPSS score is 0.0, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. NVD's SSVC assessment classifies exploitation as "none" and the attack as non-automatable (Feedly, GitHub Advisory).

Exploitation steps

  1. Reconnaissance: Identify a Plone site running a vulnerable version of plone.app.portlets (< 5.0.8, 6.0.0–6.0.3, or 7.0.0–7.0.1). Confirm that the authenticated account has the ManageOwnPortlets or Manage portlets permission.
  2. DoS — Configure oversized feed URL: Log in and navigate to a portlet-manageable page. Add an RSS portlet and set its feed URL to a URL serving a very large file (e.g., a multi-gigabyte HTTP resource). When Plone fetches the feed, RSSFeed._retrieveFeed passes the URL directly to feedparser.parse(), downloading the entire response into the FEED_DATA in-memory cache, exhausting server RAM.
  3. SSRF — Probe internal network: Set the RSS portlet feed URL to an internal address such as http://192.168.1.1/, http://backend/, or http://internal-service:8080/. The server will make an outbound HTTP request to the specified target, allowing the attacker to infer open ports and internal service availability based on response behavior or error messages.
  4. Stored XSS — Inject JavaScript URL: Host a malicious RSS feed containing an item whose <link> element uses a javascript: scheme URL (e.g., <link>javascript:alert(document.cookie)</link>). Configure the RSS portlet to fetch this feed. The _buildItemDict function stores the link without validation. When a victim user views the portlet and clicks the feed item link, the JavaScript executes in their browser context (GitHub Advisory, Patch Commit).

Indicators of compromise

  • Logs: Plone application logs showing feedparser.parse() calls to internal IP addresses (e.g., 10.x.x.x, 192.168.x.x, 172.16.x.x), single-word hostnames, or URLs with explicit port numbers; log entries from _retrieveFeed attempting to load feeds from file:// or javascript: scheme URLs.
  • Logs: Warning log entries matching "Refusing to load stored RSS url" or "Refusing to use link from RSS item" (present only after patching; absence of these on unpatched systems may indicate exploitation without detection).
  • Network: Outbound HTTP requests from the Plone server process to internal RFC-1918 addresses or non-standard ports, particularly to services not normally accessed by the web application.
  • Network: Unusually large or long-duration outbound HTTP connections from the Plone server, consistent with downloading a large file via the RSS portlet fetch mechanism.
  • File System / Memory: Abnormal memory consumption by the Plone/Zope process, potentially leading to OOM conditions or swap usage spikes, correlated with RSS portlet activity.
  • Application: RSS portlet configurations (stored in ZODB) containing feed URLs pointing to internal hosts, IP addresses, or URLs with explicit port numbers; feed item links using javascript: scheme URLs in the FEED_DATA cache (GitHub Advisory, Patch Commit).

Mitigation and workarounds

Upgrade plone.app.portlets to the patched versions: 7.0.2 (for Plone 6.2), 6.0.4 (for Plone 6.1), or 5.0.8 (for Plone 6.0). The patches introduce strict URL validation via _rss_feed_url_validator (blocking IP addresses, single-word domains, explicit ports, and non-HTTP schemes), enforce a configurable download size limit (default 1 MB, adjustable via the MAXIMUM_RSS_FEED_SIZE_BYTES environment variable), and validate feed item link URLs to reject javascript: scheme URLs. If immediate upgrade is not possible, remove the plone.app.portlets.ManageOwnPortlets permission from untrusted roles and restrict portlet management to the Manager and Site Administrator roles only; additionally, unregister the RSS portlet via portlets.xml if it is not needed (GitHub Advisory).

Community reactions

The vulnerability was discovered and disclosed by the Plone Security Team, who identified it by analogy with a similar SSRF/DoS issue previously found in plone.app.event. The advisory was authored by mauritsvanrees and published on June 23, 2026, with patches released on August 28, 2026. No significant broader media coverage or notable external researcher commentary has been identified beyond the official advisory and automated CVE tracking services (GitHub Advisory).

Additional resources


SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-55248CRITICAL9.1
  • Python logoPython
  • plone.app.portlets
NoYesAug 28, 2026
CVE-2026-55247CRITICAL9.1
  • Python logoPython
  • plone.app.event
NoYesAug 28, 2026
CVE-2026-55509HIGH8.8
  • Python logoPython
  • python3-wsgidav
NoYesAug 28, 2026
CVE-2026-55485HIGH8.8
  • Python logoPython
  • piccolo-admin
NoYesAug 28, 2026
CVE-2026-55520HIGH7.1
  • Python logoPython
  • protego
NoYesAug 28, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management