CVE-2023-34089

8.1 HIGH

📋 TL;DR

CVE-2023-34089 is a cross-site scripting (XSS) vulnerability in Decidim's processes filter feature that allows remote attackers to execute JavaScript in the context of logged-in users. This could enable attackers to make users endorse or support proposals without their consent. All Decidim instances with vulnerable versions are affected.

💻 Affected Systems

Products:
  • Decidim
Versions: All versions before 0.26.7 and 0.27.3
Operating Systems: All operating systems running Decidim
Default Config Vulnerable: ⚠️ Yes
Notes: Affects the processes filter feature specifically; requires user interaction to trigger the XSS.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could perform actions as authenticated users, including unauthorized endorsements, data theft via session hijacking, or account takeover.

🟠

Likely Case

Attackers trick users into endorsing proposals they didn't intend to support, potentially manipulating participatory democracy outcomes.

🟢

If Mitigated

With proper input validation and output encoding, the XSS payloads would be neutralized before execution.

🌐 Internet-Facing: HIGH - Decidim is typically deployed as public-facing participatory democracy platforms accessible over the internet.
🏢 Internal Only: LOW - Decidim is designed for public participation, not internal-only systems.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

XSS vulnerabilities are commonly exploited; the advisory provides enough detail for attackers to craft payloads.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 0.26.7 or 0.27.3

Vendor Advisory: https://github.com/decidim/decidim/security/advisories/GHSA-5652-92r9-3fx9

Restart Required: Yes

Instructions:

1. Backup your Decidim instance and database. 2. Update Gemfile to require 'decidim' version '~> 0.26.7' or '~> 0.27.3'. 3. Run 'bundle update decidim'. 4. Restart the Rails application server.

🔧 Temporary Workarounds

Input Sanitization Enhancement

all

Implement additional input validation and output encoding for the processes filter parameters

# Add custom sanitization in relevant controller/helper files
# Example: sanitize(params[:filter]) before processing

🧯 If You Can't Patch

  • Implement a web application firewall (WAF) with XSS protection rules to block malicious payloads.
  • Disable or restrict the processes filter feature if not essential for your deployment.

🔍 How to Verify

Check if Vulnerable:

Check your Gemfile.lock or run 'bundle show decidim' to see the installed version. If version is below 0.26.7 (for 0.26.x) or below 0.27.3 (for 0.27.x), you are vulnerable.

Check Version:

bundle show decidim | grep -o 'decidim ([0-9.]*)'

Verify Fix Applied:

After updating, verify the version with 'bundle show decidim' shows 0.26.7 or higher, or 0.27.3 or higher. Test the processes filter feature with safe test payloads.

📡 Detection & Monitoring

Log Indicators:

  • Unusual JavaScript payloads in filter parameters in Rails logs
  • Multiple endorsement/support actions from single user sessions

Network Indicators:

  • HTTP requests with JavaScript in filter query parameters
  • Unexpected redirects or script tags in responses

SIEM Query:

source="rails.log" AND ("filter" AND ("script" OR "javascript" OR "onerror" OR "onload"))

🔗 References

📤 Share & Export