GitHub Advisoryadvisory · PyPI
GHSA-4r4f-gg25-rmg5 plone.app.textfield: Stored XSS by spoofing mime type
MEDIUM
Official page ↗
- Aliases
- CVE-2026-54503
- Ecosystem
- PyPI
- Packages
- plone.app.textfield
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
- Weaknesses
- CWE-80
- Reviewed
- 2026-07-17
Affected packages
• PyPI plone.app.textfield: < 2.0.2 → fixed in 2.0.2
• PyPI plone.app.textfield: >= 3.0.0, < 3.0.2 → fixed in 3.0.2
• PyPI plone.app.textfield: >= 4.0.0, < 4.0.1 → fixed in 4.0.1
Description
Impact
A stored XSS affecting RichText fields. RichTextValue.output returns the raw, unsanitized stored value whenever the stored mimeType equals the outputMimeType. Because the safe-HTML output type (`text/x-html-safe`) is the type that signifies "already sanitized", any value whose stored mimeType equals it bypasses the safe_html transform entirely on render. The transform itself is sound — it correctly strips `on*` event-handler attributes and `javascript:/data:` URIs; the defect is that it is never invoked for these values. The unsanitized value is then emitted via `tal:content="structure ..."`, which performs no escaping, so the payload executes in the viewer's browser.
This can be a problem when a RichText field is wrongly defined in code with a `mimeType` and `outputMimeType` that are the same, or when the REST API is used to the same effect.
Patches
The problem has been patched:
• For Plone 6.0, upgrade `plone.app.textfield` to 2.0.2.
• For Plone 6.1, upgrade `plone.app.textfield` to 3.0.2.
• For Plone 6.2, upgrade `plone.app.textfield` to 4.0.1.
Workarounds
There is no known workaround.
Related
Alias · CVE (1)
- CVE-2026-54503 plone.app.textfield provides a zope.schema-style field type called RichText for storing a value with a related MIME type. vulnerability
Weakness · CWE (1)
- CWE-80 Improper Neutralization of Script-Related HTML Tags in a Web Page weakness