CVE-2021-32681 Improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks
Editors can inject arbitrary HTML or scripts via StreamField blocks due to improper escaping, potentially leading to code execution or account takeover.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Over the internet
- Victim action needed
- A user has to click or open something
- Fix
- Available
What is CVE-2021-32681?
CVE-2021-32681 is a medium-severity cross-site scripting vulnerability in wagtail, published on 17 Jun 2021. Any signed-in user can exploit it over the network, and only if a user opens a file or follows a link.
Official description
Wagtail is an open source content management system built on Django. A cross-site scripting vulnerability exists in versions 2.13-2.13.1, versions 2.12-2.12.4, and versions prior to 2.11.8. When the `{% include_block %}` template tag is used to output the value of a plain-text StreamField block (`CharBlock`, `TextBlock` or a similar user-defined block derived from `FieldBlock`), and that block does not specify a template for rendering, the tag output is not properly escaped as HTML. This could allow users to insert arbitrary HTML or scripting. This vulnerability is only exploitable by users with the ability to author StreamField content (i.e. users with 'editor' access to the Wagtail admin). Patched versions have been released as Wagtail 2.11.8 (for the LTS 2.11 branch), Wagtail 2.12.5, and Wagtail 2.13.2 (for the current 2.13 branch). As a workaround, site implementors who are unable to upgrade to a current supported version should audit their use of `{% include_block %}` to ensure it is not used to output `CharBlock` / `TextBlock` values with no associated template. Note that this only applies where `{% include_block %}` is used directly on that block (uses of `include_block` on a block _containing_ a CharBlock / TextBlock, such as a StructBlock, are unaffected). In these cases, the tag can be replaced with Django's `{{ ... }}` syntax - e.g. `{% include_block my_title_block %}` becomes `{{ my_title_block }}`.
Weakness: CWE-79
Which versions are affected by CVE-2021-32681?
7 open source packages ship an affected version, including wagtail. It affects 1 product.
| Package | Affected | Fixed in |
|---|---|---|
wagtail PyPI | All versions | 2.11.8, 2.12.5, 2.13.2 |
wagtail PyPI | All versions | 2.11.8 |
wagtail PyPI | All versions | 2.11.8 |
wagtail PyPI | From 2.12 | 2.12.5 |
wagtail PyPI | From 2.12 | 2.12.5 |
wagtail PyPI | From 2.13 | 2.13.2 |
1 more packages
wagtail PyPI | From 2.13 | 2.13.2 |
Products include Torchbox Wagtail.
How do I fix CVE-2021-32681?
Upgrade wagtail to a fixed version for your release line: 2.11.8, 2.12.5 or 2.13.2.
Escape output for the context it lands in and set a strict Content Security Policy. Upgrading the affected component is the real fix. More about Cross-site scripting.
Is CVE-2021-32681 being exploited?
There is no known exploitation of CVE-2021-32681 in the wild and no public exploit code.
Other vulnerabilities in wagtail
- CVE-2026-54263 Wagtail: Reflected XSS in dynamic image URL generator view
- CVE-2026-54261 Wagtail: Improper permission handling in image preview
- CVE-2026-44197 Wagtail: Improper permission handling when comparing revisions
- CVE-2026-44199 Wagtail: Improper permission handling when deleting form submissions
- CVE-2026-44200 Wagtail: Improper permission handling when copying pages
Sources
Also known as GHSA-xfrw-hxr5-ghqf, PYSEC-2021-103.