Arbitrary HTML can be inserted into the DOM by inserting a payload into any allowed attribute of the <tabber>
tag.
The args
provided within the wikitext as attributes to the <tabber>
tag are passed to the TabberComponentTabs class:
https://github.com/StarCitizenTools/mediawiki-extensions-TabberNeue/blob/3a23b703ce36cfc4128e7921841f68230be4059a/includes/Tabber.php#L76
In TabberComponentTabs, the attributes are validated before being supplied to the Tabs template.
https://github.com/StarCitizenTools/mediawiki-extensions-TabberNeue/blob/3a23b703ce36cfc4128e7921841f68230be4059a/includes/Components/TabberComponentTabs.php#L15-L31
However, the validation is insufficient.
What Sanitizer::validateTagAttributes
does is call validateAttributes
, which
* - Discards attributes not on the given list
* - Unsafe style attributes are discarded
* - Invalid id attributes are re-encoded
However, the attribute values are expected to be escaped when inserted into HTML.
The attribute values are then inserted into HTML without being escaped: https://github.com/StarCitizenTools/mediawiki-extensions-TabberNeue/blob/3a23b703ce36cfc4128e7921841f68230be4059a/includes/templates/Tabs.mustache#L1
<tabber class='test123" onmouseenter="alert(1)"'>
|-|First Tab Title=
First tab content goes here.
</tabber>
<tabber class='test123"><script>alert(2)</script>'>
|-|First Tab Title=
First tab content goes here.
</tabber>
Arbitrary HTML can be inserted into the DOM by any user, allowing for JavaScript to be executed.
{ "github_reviewed": true, "nvd_published_at": "2025-06-27T18:15:50Z", "severity": "HIGH", "cwe_ids": [ "CWE-79", "CWE-80" ], "github_reviewed_at": "2025-06-27T20:50:40Z" }