CVE Catalog

CVE-2026-70658

HighCVSS 7.4
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.58%

46th percentile - higher than 46% of all known CVEs

Summary

In the Pay library (Ruby on Rails) prior to 11.6.2, Pay::Webhooks::PaddleBillingController compares the SHA-256 HMAC with the attacker-controlled h1 token from the Paddle-Signature header using String#==, allowing an attacker to recover a valid signature via timing measurements. A forged webhook can alter billing state, provision paid features, or trigger notifications.

Risk Assessment

An unauthenticated remote attacker can forge Paddle webhooks, leading to unauthorized billing changes, activation of paid features, or customer data exposure.

Recommendation

Upgrade the Pay library to version 11.6.2, which replaces String#== with a timing-safe comparison.

Related vulnerabilities

Original NVD description (English source)

Pay is a payments engine for Ruby on Rails 6.0 and higher. Prior to 11.6.2, Pay::Webhooks::PaddleBillingController#valid_signature? in app/controllers/pay/webhooks/paddle_billing_controller.rb compares the computed 64-character SHA-256 HMAC with the attacker-controlled h1 token from the Paddle-Signature header using Ruby String#==. An unauthenticated remote attacker who can repeatedly submit requests to /pay/webhooks/paddle_billing and obtain sufficiently precise timing measurements can infer matching digest prefixes and recover a valid signature. A forged accepted webhook is enqueued through Pay::Webhooks::ProcessJob and can cause a host application to update billing state, provision paid features, record refunds, or trigger customer notifications. This issue is fixed in version 11.6.2.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS