{"id":"CVE-2026-54263","aliases":["GHSA-23m2-mghx-vqmf"],"title":"Wagtail: Reflected XSS in dynamic image URL generator view","summary":"Wagtail: Reflected XSS in dynamic image URL generator view","severity":"high","cvss":7.3,"cwe":["CWE-79"],"vendor":"wagtail","product":"wagtail","ecosystem":"pip","affected":["wagtail >= 7.3, < 7.3.3","wagtail >= 7.4, < 7.4.2"],"patched":["wagtail 7.3.3","wagtail 7.4.2"],"published":"2026-08-20","updated":"2026-08-20","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-23m2-mghx-vqmf","references":[{"url":"https://github.com/wagtail/wagtail/security/advisories/GHSA-23m2-mghx-vqmf"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54263"},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/wagtail/PYSEC-2026-616.yaml"},{"url":"https://github.com/advisories/GHSA-23m2-mghx-vqmf"}],"tags":["ghsa","pip"],"epss":0.00204,"epssPercentile":0.10645,"ingestedAt":"2026-08-20T18:59:54.416Z","slug":"CVE-2026-54263","body":"## Overview\n\n### Impact\n\nA reflected cross-site scripting (XSS) vulnerability exists on the dynamic image URL generator view within the Wagtail admin interface. A user with a limited-permission editor account for the Wagtail admin could craft a URL that, when viewed by a user with higher privileges, could perform actions with that user's credentials. The vulnerability is present for all sites, even if they do not enable the [dynamic image serve view](https://docs.wagtail.org/en/stable/advanced_topics/images/image_serve_view.html). The vulnerability is not exploitable by an ordinary site visitor without access to the Wagtail admin.\n\n### Patches\n\nPatched versions have been released as Wagtail 7.3.3 and 7.4.2.\n\n### Workarounds\n\nFor sites that cannot easily upgrade to a current supported version, the vulnerability can be patched by adding the following code to `urls.py` URL pattern declarations to override the vulnerable view. This disables the admin dynamic image preview functionality, while the public-facing dynamic image serve view still works.\n\n```python\nfrom django.http import HttpResponseBadRequest\nfrom django.urls import path\nfrom wagtail.admin import urls as wagtailadmin_urls\n\ndef disabled_output(request, image_id):\n    return HttpResponseBadRequest(\"\", content_type=\"text/plain\")\n\nurlpatterns = [\n    # Example where the CMS admin is at /admin/.\n    # Add this before the Wagtail admin URLs registration, with the same sub-path.\n    path(\"admin/images/<int:image_id>/generate_url/output/\", disabled_output),\n    path(\"admin/\", include(wagtailadmin_urls)),\n]\n```\n\n### Acknowledgements\n\nMany thanks to Thibaud Colas (@thibaudcolas) for reporting this issue.\n\n### For more information\n\nIf you have any questions or comments about this advisory:\n\n- Visit Wagtail's [support channels](https://docs.wagtail.org/en/stable/support.html)\n- Email us at [security@wagtail.org](mailto:security@wagtail.org) (view our [security policy](https://github.com/wagtail/wagtail/security/policy) for more information).\n\n## Affected packages\n\n- `wagtail >= 7.3, < 7.3.3`\n- `wagtail >= 7.4, < 7.4.2`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `wagtail 7.3.3`\n- `wagtail 7.4.2`","depth":"twilight","depthScore":40,"depthScoreParts":{"impact":40.2,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}