fix(deps): update dependency wagtail to v6 [security]#3777
fix(deps): update dependency wagtail to v6 [security]#3777renovate[bot] wants to merge 1 commit intomasterfrom
Conversation
a17d2b5 to
141bc8a
Compare
01a664d to
1ad836b
Compare
8c8aa32 to
6acf8ba
Compare
poetry.lock
Outdated
| optional = false | ||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" | ||
| groups = ["main", "dev"] | ||
| groups = ["main"] |
There was a problem hiding this comment.
Bug: The wagtail upgrade removes the transitive dependency on html5lib, but the code still explicitly uses the "html5lib" parser, which will cause a runtime error.
Severity: HIGH
Suggested Fix
Explicitly add html5lib as a direct dependency to the pyproject.toml file to ensure it is installed, as it is no longer included transitively by wagtail version 6.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: poetry.lock#L1851
Potential issue: The upgrade of `wagtail` from version 5.2.8 to 6.3.6 removes the
transitive dependency on `html5lib`. The code in `mail/api.py` explicitly uses the
`"html5lib"` parser when calling `BeautifulSoup`. Since `html5lib` is not listed as a
direct dependency in `pyproject.toml`, it will no longer be installed after the upgrade.
This will result in a `bs4.FeatureNotFound` runtime error whenever email-related
functionality, specifically the `render_email_templates` function, is executed.
Did we get this right? 👍 / 👎 to inform future reviews.
650eac7 to
7fdeabb
Compare
| @@ -57,7 +57,7 @@ dependencies = [ | |||
| "user-agents==2.2.0", | |||
There was a problem hiding this comment.
Bug: The after_publish_page hook uses get_edit_handler(), a method removed in Wagtail 6.0, which will cause an AttributeError when publishing pages.
Severity: CRITICAL
Suggested Fix
Refactor the hook in cms/wagtail_hooks.py to stop using the deprecated get_edit_handler(). Instead, use the modern Wagtail API to get the form class. The relevant page models already define a base_form_class, which can likely be used directly, for example: form_class = page.specific_class.base_form_class.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: pyproject.toml#L57
Potential issue: The upgrade to Wagtail 6.3.6 likely removes the `get_edit_handler()`
method, which was deprecated and scheduled for removal. This method is still used in the
`create_product_and_versions_for_courseware_pages` hook, which runs after a course or
program page is published. When this hook is triggered, the call to
`page.specific_class.get_edit_handler()` will raise an `AttributeError`, causing the
page publishing process to fail. While tests exist for this functionality, they may not
be running or may be passing for other reasons, masking this critical runtime error.
532a07e to
9b31459
Compare
9b31459 to
77c7604
Compare
This PR contains the following updates:
==5.2.8→==6.3.8GitHub Vulnerability Alerts
CVE-2026-25517
Impact
Due to a missing permission check on the preview endpoints, a user with access to the Wagtail admin and knowledge of a model's fields can craft a form submission to obtain a preview rendering of any page, snippet or site setting object for which previews are enabled, consisting of any data of the user's choosing. The existing data of the object itself is not exposed, but depending on the nature of the template being rendered, this may expose other database contents that would otherwise only be accessible to users with edit access over the model. The vulnerability is not exploitable by an ordinary site visitor without access to the Wagtail admin.
Patches
Patched versions have been released as Wagtail 6.3.6, 7.0.4, 7.1.3 and 7.2.2. The new 7.3 feature release also incorporates this fix.
Workarounds
No workaround is available.
Acknowledgements
Many thanks to @thxtech for reporting this issue.
For more information
If there are any questions or comments about this advisory:
CVE-2026-28222
Impact
A stored Cross-site Scripting (XSS) vulnerability exists on rendering
TableBlockblocks within a StreamField. A user with access to create or edit pages containingTableBlockStreamField blocks is able to set specially-craftedclassattributes on the block which run arbitrary JavaScript code when the page is viewed. When viewed by a user with higher privileges, this could lead to performing actions with that user's credentials. The vulnerability is not exploitable by an ordinary site visitor without access to the Wagtail admin, and only affects sites using TableBlock.Patches
Patched versions have been released as Wagtail 6.3.8, 7.0.6, 7.2.3 and 7.3.1.
Workarounds
Site owners who are unable to upgrade to the new versions can remediate the vulnerability by setting a
templateattribute on all TableBlock definitions, referencing a template that does not outputclassattributes. For example:Acknowledgements
Many thanks to Guan Chenxian (@GCXWLP) for reporting this issue.
For more information
If there are any questions or comments about this advisory:
CVE-2026-28223
Impact
A stored Cross-site Scripting (XSS) vulnerability exists on confirmation messages within the
wagtail.contrib.simple_translationmodule. A user with access to the Wagtail admin area may create a page with a specially-crafted title which, when another user performs the "Translate" action, causes arbitrary JavaScript code to run. This could lead to performing actions with that user's credentials. The vulnerability is not exploitable by an ordinary site visitor without access to the Wagtail admin.Patches
Patched versions have been released as Wagtail 6.3.8, 7.0.6, 7.2.3 and 7.3.1.
Workarounds
None
Acknowledgements
Many thanks to Guan Chenxian (@GCXWLP) for reporting this issue.
For more information
If there are any questions or comments about this advisory:
Release Notes
wagtail/wagtail (wagtail)
v6.3.8: 6.3.8Compare Source
v6.3.7: 6.3.7Compare Source
v6.3.6: 6.3.6Compare Source
v6.3.5: 6.3.5Compare Source
child_blockkwarg (Matt Westcott)utf8mb4charset and collation for MySQL test database (Sage Abdullah)v6.3.4: 6.3.4Compare Source
v6.3.3Compare Source
StreamChildrenToListBlockOperationfrom duplicating data across multiple StreamField instances (Joshua Munn)RichTextBlockto aStreamField(Matt Westcott)v6.3.2: 6.3.2Compare Source
get_block_by_content_pathonImageBlockto prevent errors on commenting (Matt Westcott)v6.3.1: 6.3.1Compare Source
ImageChooserBlocktoImageBlockdata conversions where all inputs tobulk_to_pythonare null (Storm Heg, Matt Westcott)BlogTagIndexPageexample for clarity (Clifford Gama)wagtailcacheandwagtailpagecacheexamples to not use quotes for thefragment_name(Shiv)v6.3: 6.3 (LTS)Compare Source
ImageBlockwith alt text support (Chiemezuo Akujobi for Google Summer of Code, mentored by Storm Heg, Saptak Sengupta, Thibaud Colas and Matt Westcott)getTextLabelmethod on date / time StreamField blocks (Vaughn Dickson)WAGTAIL_AUTO_UPDATE_PREVIEWsetting, useWAGTAIL_AUTO_UPDATE_PREVIEW_INTERVAL = 0instead (Sage Abdullah)capfirstfor title-casing model verbose names (Sébastien Corbin)copy_for_translation_donesignal when copying translatable models as well as pages (Coen van der Kamp)descriptionfield across all images, to better support accessible image descriptions (Chiemezuo Akujobi)file_sizefield on document model to avoid artificial 2Gb limit (Gabriel Getzie)TypedTableBlockuses the correct API representations of child blocks (Matt Westcott)mediadefinitions (Sage Abdullah)AbstractGroupApprovalTaskto ensurecan_handlechecks for the abstract class correctly (Sumana Sree Angajala)WAGTAIL_WORKFLOW_REQUIRE_REAPPROVAL_ON_EDITdocumentation to state that it defaults toFalse(Matt Westcott)TokenAuthenticationin the Wagtail API v2 Configuration Guide (Krzysztof Jeziorny)zoneinfo.available_timezones(Sage Abdullah)get_prep_valuefor closer alignment with JSONField (Sage Abdullah)IndexViewtoBaseListingView(Sage Abdullah).in_bulk()on specific querysets under Django 5.2a0 (Sage Abdullah)test-mediato .gitignore (Shlomo Markowitz)debounceutil's return type for better TypeScript usage (Sage Abdullah)wagtailConfigvalues from inline scripts to thewagtail_configtemplate tag (LB (Ben) Johnston, Sage Abdullah){% locales %}and{% js_translation_strings %}template tags (LB (Ben) Johnston, Sage Abdullah)window.wagtailConfig.BULK_ACTION_ITEM_TYPEusage in JavaScript to reduce reliance on inline scripts (LB (Ben) Johnston)window.fileupload_optsusage in JavaScript, use data attributes on fields instead to reduce reliance on inline scripts (LB (Ben) Johnston)image_format_name_to_content_typehelper function that duplicates Willow functionality (Matt Westcott)DeleteMenuItemAPI for footer actions (Sage Abdullah)v6.2.4: 6.2.4Compare Source
child_blockkwarg (Matt Westcott)v6.2.3: 6.2.3Compare Source
v6.2.2: 6.2.2Compare Source
USE_THOUSAND_SEPARATORformatting numbers where formatting is invalid (Sébastien Corbin, Matt Westcott)v6.2.1: 6.2.1Compare Source
child_blockbeing passed as a kwarg in ListBlock migrations (Matt Westcott)wagtail.admin.modelsand custom user models (Matt Westcott)v6.2: 6.2Compare Source
HOSTNAMESparameter onWAGTAILFRONTENDCACHEto define which hostnames a backend should respond to (Jake Howard, sponsored by Oxfam America)EditViewand breadcrumbs (Rohit Sharma)ChooseParentViewif only one possible valid parent page is available (Matthias Brück)copy_for_translation_donesignal when a page is copied for translation (Arnar Tumi Þorsteinsson)deactivate()method toProgressController(Alex Morega)ModelViewSet(Sage Abdullah)routable_resolver_matchattribute available on RoutablePageMixin responses (Andy Chosak)UserViewSetvia the app config (Sage Abdullah)StreamBlock/ListBlockmin_num/max_num(Matt Westcott)WAGTAILIMAGES_CHOOSER_PAGE_SIZEsetting functional again (Rohit Sharma)richtexttemplate tag to convert lazy translation values (Benjamin Bach).icoimages (Julie Rymer)verbose_nameonTranslatableMixin.localeso that it is translated when used as a label (Romein van Buren)wagtail_serveview is on a non-root path (Sage Abdullah)for_instancemethod toPageLogEntryManager(Matt Westcott)WAGTAIL_DATE_FORMAT,WAGTAIL_DATETIME_FORMATandWAGTAIL_TIME_FORMATtakeFORMAT_MODULE_PATHinto account (Sébastien Corbin)restriction_typefield on PageViewRestriction (Shlomo Markowitz)Orderableis not required for inline panels (Bojan Mihelac)prefers-reduced-motionto the accessibility documentation (Roel Koper)vary_fieldsproperty for custom image filters (Daniel Kirkham)DjangoJSONEncoderinstead of customLazyStringEncoderto serialize Draftail config (Sage Abdullah)WAGTAILIMAGES_CHOOSER_PAGE_SIZEat runtime (Matt Westcott)client/scssdirectory in Tailwind content config to speed up CSS compilation (Sage Abdullah)contrib.frontend_cache.backendsinto dedicated sub-modules (Andy Babic)docs/autobuild.shscript (Sævar Öfjörð Magnússon)urlparsewithurlsplitto improve performance (Jake Howard)'BlockWidget' object has no attribute '_block_json'from masking errors during StreamField serialization (Matt Westcott)v6.1.3: 6.1.3Compare Source
.icoimages (Julie Rymer)v6.1.2: 6.1.2Compare Source
ChoiceBlock(Matt Westcott)wagtail.contrib.settings(Victor Miti, Matt Westcott, Jake Howard)v6.1.1: 6.1.1Compare Source
v6.1: 6.1Compare Source
WAGTAIL_DATE_FORMAT,WAGTAIL_DATETIME_FORMAT,WAGTAIL_TIME_FORMATare correctly configured (Rohit Sharma, Coen van der Kamp)IndexViewusing thegeneric.IndexView(Rohit Sharma, Sage Abdullah, Storm Heg)IndexViewusing thegeneric.IndexView(Rohit Sharma, Sage Abdullah, Temidayo Azeez)PageListingViewSetfor custom per-page-type page listings (Matt Westcott)ChooseParentViewtoPageListingViewSetto allow creating pages from custom page listings (Abdelrahman Hamada, Sage Abdullah)djangorestframeworkto 3.15.1 (Sage Abdullah)IndexView.list_display(Abdelrahman Hamada)STORAGESalias name forWAGTAILIMAGES_RENDITION_STORAGE(Alec Baron)PASSWORD_REQUIRED_TEMPLATEsetting toWAGTAIL_PASSWORD_REQUIRED_TEMPLATEwith deprecation of previous naming (Saksham Misra, LB (Ben) Johnston)DOCUMENT_PASSWORD_REQUIRED_TEMPLATEsetting toWAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATEwith deprecation of previous naming (Saksham Misra, LB (Ben) Johnston)get_parent(Nigel van Keulen)wagtail.contrib.settingsorModelViewSet(Ben Morse, Joshua Munn, Jake Howard, Sage Abdullah)__str__for MySQL search index (Jake Howard)dateobjects onhuman_readable_datetemplate tag (Jhonatan Lopes)verbose_namein group edit view when listing custom permissions (Sage Abdullah, Neeraj Yetheendran, Omkar Jadhav)make livehtml(Sage Abdullah)LANGUAGE_CODE(Mark Niehues)UnsavedControllerchecks for nested removal/additions of inputs so that the unsaved warning shows in more valid cases when editing a page (Karthik Ayangar)get_add_url()is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah)objectsmanager (Jhonatan Lopes)get_dummy_request's resulting host name when running tests withALLOWED_HOSTS = ["*"](David Buxton)timesince_last_updatetemplate tag (Matt Westcott)w-kbd-scope-valuewith support forglobalso that specific keyboard shortcuts (e.g. ctrl+s/cmd+s) trigger consistently even when focused on fields (Neeraj Yetheendran)WAGTAIL_ALLOW_UNICODE_SLUGSsetting when auto-generating slugs (LB (Ben) Johnston)convert_mariadb_uuidsmanagement command to assist with upgrading to Django 5.0+ on MariaDB (Matt Westcott)--purge-onlyinwagtail_update_image_renditionsmanagement command section (Pranith Beeram)6.3.0with a fix for the missing favicon (Sage Abdullah)wagtail_update_image_renditionsmanagement command on the using images page (LB (Ben) Johnston)html.parser(Jake Howard)html.parser& removehtml5libdependency (Jake Howard)Buttonthat only renders links (a element) toLinkand remove unused prop & behavior that was non-compliant for aria role usage (Advik Kabra)wagtail.models.AbstractWorkflowmodel to support future customizations around workflows (Hossein)classnamestemplate tag to handle nested lists of strings, use template tag for adminbodyelement (LB (Ben) Johnston)UploadedDocumentandUploadedImageinto newUploadedFilemodel for easier shared code usage (Advik Kabra, Karl Hobley)window.chooserUrlsglobals, removing the need for inline scripts (Elhussein Almasri)w-init(InitController) to support adetailvalue to be dispatched on events (Chiemezuo Akujobi)page_breadcrumbstag to use sharedbreadcrumbs.htmltemplate (Sage Abdullah)keyboardicon to admin icon set (Rohit Sharma)SwapController(LB (Ben) Johnston)w-block/BlockController) to instantiateStreamFieldblocks (Karthik Ayangar)w-kbd/KeyboardController) (Neeraj Yetheendran)xregexp(IE11 polyfill) along withwindow.XRegExpglobal util (LB (Ben) Johnston)urlifyto use TypeScript, officially deprecatewindow.URLifyglobal util (LB (Ben) Johnston)v6.0.6: 6.0.6Compare Source
v6.0.5: 6.0.5Compare Source
wagtail.contrib.settings(Victor Miti, Matt Westcott, Jake Howard)v6.0.4: 6.0.4Compare Source
v6.0.3: 6.0.3Compare Source
wagtail.contrib.settingsorModelViewSet(Ben Morse, Joshua Munn, Jake Howard, Sage Abdullah)WAGTAIL_ALLOW_UNICODE_SLUGSsetting when auto-generating slugs (LB (Ben) Johnston)convert_mariadb_uuidsmanagement command to assist with upgrading to Django 5.0+ on MariaDB (Matt Westcott)v6.0.2: 6.0.2Compare Source
make livehtml(Sage Abdullah)get_add_url()is always used to re-render the add button when the listing is refreshed in viewsets (Sage Abdullah)modal-workflow.jsscript usage to base admin template instead of ad-hoc imports so that choosers work inModelViewSets (Elhussein Almasri)InlinePanelis included by default inModelViewSet's create and edit views (Sage Abdullah)extra_footer_actionsblock in page create/edit templates (LB (Ben) Johnston, Sage Abdullah)6.3.0with a fix for the missing favicon (Sage Abdullah)v6.0.1: 6.0.1Compare Source
BooleanRadioSelectuses the same styles asRadioSelect(Thibaud Colas)collectstaticwhenManifestStaticFilesStorageis in use (Matt Westcott)v6.0: 6.0Compare Source
🎉 Special 10th anniversary release! 🎉
search_indexoption to StreamField blocks to control whether the block is indexed for searching (Vedant Pandey)UniqueConstraintin place ofunique_togetherforTranslatableMixin's system check (Temidayo Azeez, Sage Abdullah)IndexView.get_add_url()in snippets index view template (Christer Jensen, Sage Abdullah)Page.permissions_for_user()to be overridden by specific page types (Sébastien Corbin)extra_actionsblocks to Snippets and generic index templates (Bhuvnesh Sharma)panels/edit_handleronModelViewSet(Sage Abdullah)PagePermissionPolicyinwagtail.permissionsmodule (Sage Abdullah)max_length(Elhussein Almasri)TypedTableBlock(Tommaso Amici, Cynthia Kiser)TableBlockheader controls to a field that requires user input (Bhuvnesh Sharma, Aman Pandey, Cynthia Kiser)WAGTAILADMIN_LOGIN_URLsetting to allow customising the login URL (Neeraj Yetheendran)DrilldownControllerandw-drilldowncomponent to support drilldown menus (Thibaud Colas)captionon admin UI Table component (Aman Pandey)SnippetViewSet&ModelViewSetto support being copied (Shlomo Markowitz)STORAGESsetting introduced in Django 4.2 (phijma-leukeleu)index_results.htmlorindex_results_template_nameoverride on initial load (Stefan Hammer)last_published_by_user(Chiemezuo Akujobi)aliasandspecific(Tomasz Knapik)ActionControllerexplicitly checks for elements that allow select functionality (Nandini Arora)FormSubmissionsPanelon Django 5.0 when creating a new form page (Matt Westcott)MultipleChooserPanelmodal works correctly whenUSE_THOUSAND_SEPARATORisTruefor pages with ids over 1,000 (Sankalp, Rohit Sharma)th) for visual spacing, ensure this is ignored by accessibility tooling (V Rohitansh)SiteSetting.DoesNotExisterror when retrieving settings for an unrecognised site (Nick Smith)exclude_fields_in_copyare correctly excluded in new copies, resolving to the default value (Elhussein Almasri)default_orderingset on IndexView is preserved if ModelViewSet does not specify an explicit ordering (Cynthia Kiser)_()within templates (Chiemezuo Akujobi)Pagemodel referenceget_childrendocumentation (Salvo Polizzi)get_upload_tomethods (Osaf AliSayed, Dharmik Gangani)body.ready) from multiple JavaScript implementations to one Stimulus controllerw-init(Chiemezuo Akujobi)arg=_('...')in allwagtailadminmodule templates (Chiemezuo Akujobi)ruffand replaceblackwithruff format(John-Scott Atlakson)Configuration
📅 Schedule: Branch creation - "" in timezone US/Eastern, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.