CVE-2025-68934

6.5 MEDIUM

📋 TL;DR

This vulnerability allows authenticated users to submit specially crafted payloads to Discourse's drafts endpoint, causing O(n^2) processing that ties up worker threads for 35-60 seconds per request. This affects all users on vulnerable instances as the shared worker pool becomes exhausted, leading to denial of service. The issue impacts Discourse versions prior to 3.5.4, 2025.11.2, 2025.12.1, and 2026.1.0.

💻 Affected Systems

Products:
  • Discourse
Versions: All versions prior to 3.5.4, 2025.11.2, 2025.12.1, and 2026.1.0
Operating Systems: All platforms running Discourse
Default Config Vulnerable: ⚠️ Yes
Notes: All Discourse installations with default configurations are vulnerable. The vulnerability requires authenticated user access.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete service unavailability due to worker pool exhaustion, preventing all legitimate users from accessing the Discourse instance.

🟠

Likely Case

Degraded performance and intermittent service disruptions as workers become tied up processing malicious payloads.

🟢

If Mitigated

Minimal impact with proper patching and monitoring in place to detect and block attack attempts.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated user credentials but is technically simple once access is obtained.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 3.5.4, 2025.11.2, 2025.12.1, or 2026.1.0

Vendor Advisory: https://github.com/discourse/discourse/security/advisories/GHSA-vwjh-vrx9-9849

Restart Required: Yes

Instructions:

1. Backup your Discourse instance. 2. Update to Discourse version 3.5.4, 2025.11.2, 2025.12.1, or 2026.1.0. 3. Restart the Discourse service. 4. Verify the update was successful.

🔧 Temporary Workarounds

Reduce max_draft_length

all

Lower the maximum draft length setting to reduce attack surface (partial mitigation only)

discourse site-setting max_draft_length 1000

🧯 If You Can't Patch

  • Implement rate limiting on /drafts.json endpoint
  • Monitor for abnormal request patterns to /drafts.json and block suspicious IPs

🔍 How to Verify

Check if Vulnerable:

Check Discourse version against affected versions list. Review logs for slow processing of /drafts.json requests.

Check Version:

discourse version

Verify Fix Applied:

Confirm Discourse version is 3.5.4, 2025.11.2, 2025.12.1, or 2026.1.0. Test /drafts.json endpoint with various payloads to ensure normal response times.

📡 Detection & Monitoring

Log Indicators:

  • Slow request processing (35-60 seconds) for POST /drafts.json
  • Worker pool exhaustion warnings
  • Multiple authenticated users submitting drafts simultaneously

Network Indicators:

  • High volume of POST requests to /drafts.json from single or multiple authenticated users
  • Increased response times for all Discourse endpoints

SIEM Query:

source="discourse" AND (uri_path="/drafts.json" AND request_time>35000) OR message="worker pool exhausted"

🔗 References

📤 Share & Export