Read the docs
TI-2026-49359 Aliases CVE-2026-70658

pay-rails/pay: non-constant-time HMAC comparison in Paddle Billing webhook signature verifier

Priority HIGH 68CWE-208Published · Updated

Key facts

Attack vector
Network
Privileges required
None
User interaction
None
Attack complexity
High
Impact type
Information disclosure
Confidentiality · integrity · availability
High · High · None
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-208.

Summary

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.

Why it matters now

Exploitation Proof of concept CISA SSVC · not in CISA KEV
EPSS 0.00578 47th percentileScored 2026-11-07
Fix Fixed pay (pay-rails): 11.6.2

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
Poc
Automatable
No
Technical impact
Total

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
pay-railspaybefore 11.6.211.6.2Patch availableCNA
  • pay Vendorpay-rails Affected before 11.6.2 Fixed in 11.6.2 Patch available CNA

Remediation

  • Fix · CNA pay (pay-rails) Fixed in 11.6.2

Timeline

  1. 2026-10-02 Threatist record created from CVE-2026-70658

References

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences