CVE-2026-33393: 
NixOS vulnerability analysis and mitigation

Overview

CVE-2026-33393 is an improper access control vulnerability in Discourse, an open-source discussion platform, affecting the spam host allowlist domain validation logic. The flaw exists in versions 2026.1.0–2026.1.1, 2026.2.0, and 2026.3.0-latest (pre-patch), where the allowed_spam_host_domains check used Ruby's String#end_with? without proper domain boundary validation. This allows a low-privileged authenticated user to bypass spam protection by registering a domain that merely ends with an allowlisted domain string (e.g., attacker-example.com bypasses an allowlist entry for example.com). It was disclosed on March 19, 2026, with patches released shortly after, and carries a CVSS v3.1 base score of 4.3 (Medium) (GitHub Advisory).

Technical details

The root cause is classified as CWE-284 (Improper Access Control), stemming from the use of Ruby's String#end_with? method in app/models/post.rb to validate whether a linked hostname falls within the allowed_spam_host_domains allowlist. Because end_with? performs a simple string suffix check without enforcing domain boundary semantics, a domain like attacker-example.com satisfies the check for an allowlisted example.com. The fix replaces the vulnerable check with a strict comparison requiring either an exact match (h == w) or a proper subdomain match (h.end_with?(".#{w}")), ensuring the dot boundary is enforced (GitHub Advisory, Patch Commit). Exploitation requires a low-privileged (new user, trust level 0) account and network access to the Discourse instance.

Impact

Successful exploitation allows a low-privileged authenticated attacker to bypass the newuser_spam_host_threshold spam protection mechanism by posting links to lookalike domains that suffix-match an allowlisted domain. This results in a low-integrity impact: spam or malicious links from attacker-controlled domains may reach other users without being filtered, potentially facilitating phishing or malware distribution through the platform. There is no confidentiality or availability impact, and the vulnerability does not enable lateral movement or privilege escalation (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code is known to exist, and there is no evidence of in-the-wild exploitation at this time (Feedly). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The EPSS score is approximately 0.026% (0.000260), indicating a very low probability of exploitation in the near term. Exploitation requires a low-privileged authenticated account, further limiting the attack surface.

Exploitation steps

  1. Register a new account: Create a low-trust (trust level 0) user account on a vulnerable Discourse instance.
  2. Identify allowlisted domains: Determine which domains are configured in the allowed_spam_host_domains site setting (this may be inferred from community context or admin-disclosed settings).
  3. Register a lookalike domain: Acquire a domain that ends with the allowlisted domain string but is not a legitimate subdomain (e.g., register attacker-example.com when example.com is allowlisted).
  4. Post links to the lookalike domain: As the new user, create posts containing links to the attacker-controlled domain (e.g., http://attacker-example.com/malicious-page).
  5. Bypass spam threshold: Because the vulnerable String#end_with? check incorrectly treats attacker-example.com as matching the allowlisted example.com, the post is not flagged by the newuser_spam_host_threshold filter, allowing the spam or malicious content to be published (GitHub Advisory, Patch Commit).

Indicators of compromise

  • Logs: Discourse application logs showing new user (trust level 0) posts containing links to domains that suffix-match but are not legitimate subdomains of entries in allowed_spam_host_domains (e.g., attacker-example.com when example.com is allowlisted).
  • Application Behavior: Posts from new users with external links that bypass the newuser_spam_host_threshold without triggering spam flags, particularly from accounts with no established trust level.
  • Admin Panel: Review of allowed_spam_host_domains site setting combined with post content analysis for domains matching the suffix pattern but lacking a preceding dot boundary.

Mitigation and workarounds

Discourse has released patches in versions 2026.3.0-latest.1, 2026.2.1, and 2026.1.2, which enforce strict domain boundary validation (exact match or proper subdomain match preceded by .). Administrators should upgrade to one of these patched versions immediately. No configuration-based workarounds are available for unpatched versions; upgrading is the only remediation (GitHub Advisory).

Additional resources


Source: This report was generated using AI

Related NixOS vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-116199CRITICAL9.2
  • NixOS logoNixOS
  • cpe:2.3:a:snipeitapp:snipe-it
NoYesOct 25, 2026
CVE-2026-116201HIGH8.7
  • NixOS logoNixOS
  • cpe:2.3:a:snipeitapp:snipe-it
NoYesOct 25, 2026
CVE-2026-116200HIGH8.2
  • NixOS logoNixOS
  • cpe:2.3:a:snipeitapp:snipe-it
NoYesOct 25, 2026
CVE-2026-2270MEDIUM5.9
  • NixOS logoNixOS
  • kubernetes
NoYesOct 26, 2026
CVE-2026-76654MEDIUM5.8
  • NixOS logoNixOS
  • cpe:2.3:a:kubernetes:kubernetes
NoYesOct 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management