Citizen vulnerable to stored XSS in sticky header button messages
Moderate severity
GitHub Reviewed
Published
Oct 17, 2025
in
StarCitizenTools/mediawiki-skins-Citizen
•
Updated Oct 20, 2025
Package
Affected versions
>= 3.3.0, < 3.9.0
Patched versions
3.9.0
Description
Published by the National Vulnerability Database
Oct 17, 2025
Published to the GitHub Advisory Database
Oct 20, 2025
Reviewed
Oct 20, 2025
Last updated
Oct 20, 2025
Summary
The JS implementation for copying button labels to the sticky header in the Citizen skin unescapes HTML characters, allowing for stored XSS through system messages.
Details
In the
copyButtonAttributesfunction instickyHeader.js, when copying the button labels, theinnerHTMLof the new element is set to thetextContentof the old element:https://github.com/StarCitizenTools/mediawiki-skins-Citizen/blob/f4cbcecf5aca0ae69966b23d4983f9cb5033f319/resources/skins.citizen.scripts/stickyHeader.js#L29-L41
This unescapes any escaped HTML characters and causes the contents of the system messages to be interpreted as HTML.
PoC
citizen-share,citizen-view-history,citizen-view-edit,nstab-talk) to the following payload:<img src="" onerror="alert('Sticky Header Button XSS')">.Impact
This impacts wikis where a group has the
editinterfacebut not theeditsitejsuser right. By default, this is the case for thesysopgroup.References