Plone Classic Portlet Flaw Allows TALES Injection RCE (CVE-2026-57149)
A newly disclosed GitHub Security Advisory (GHSA-rr49-f9g6-c9r5, CVE-2026-57149) affects plone.app.portlets, specifically the Classic portlet (plone.app.portlets.portlets.classic). According to the advisory, the Classic portlet builds a TALES path expression from a user-supplied template/macro field and passes it to the TAL path() helper for evaluation. Because the input is interpreted as a full TALES expression rather than a constrained path, it can be crafted to escape simple path traversal and evaluate as arbitrary code in the Plone process. The advisory assigns a CVSS score of 9.9 and lists the status as PoC-public. It was discovered by Giuseppe Caruso and reported to the Plone/Zope Security Team.
Why it matters
This is a privilege-escalation vector across the authenticated-user/server trust boundary, not just an admin-only issue. The advisory states any authenticated user who can add or edit a Classic portlet is a potential attacker — and with Plone's default role map, that includes regular users configuring portlets on their own personal dashboard. Given the reported CVSS of 9.9 and public PoC status, sites running affected versions of plone.app.portlets on Plone 6.0, 6.1, or 6.2 should treat this as urgent.
What defenders should do now
- Upgrade
plone.app.portletsimmediately per the advisory: 7.0.2 for Plone 6.2, 6.0.4 for Plone 6.1, 5.0.8 for Plone 6.0. - If upgrading isn't immediate, apply the advisory's workarounds: remove the
plone.app.portlets.ManageOwnPortletspermission from untrusted roles, restrict portlet management to trusted admin roles, and/or unregister or neutralize the Classic portlet template (the advisory describes customizingclassic.ptviaportal_view_customizationsas an effective, if non-standard, stopgap). - Hunt for anomalous portlet configuration changes by non-admin accounts, especially edits to Classic portlet template/macro fields containing unusual TALES syntax (e.g. unexpected use of
python:, string modifiers, or path expressions beyond simple object traversal). - Review server-side process logs for unexpected code execution or outbound activity correlated with portlet management actions, since successful exploitation runs in the context of the Plone process itself.
This is fresh, developing intel published the same day as this write-up — details on exploitation in the wild, if any, are not yet established. For the authoritative technical writeup, patched versions, and workaround instructions, see the original GitHub Security Advisory: GHSA-rr49-f9g6-c9r5.