Sceawere
Vulnerability Detail
CVE-2026-70658UPDATED Verified Sceawere Triage Sources: NVD / CISA KEV
Pay Timing Side-Channel Vulnerability
Vulnerability Metadata
- Severity
- High
- Score / CVSS
- 7.4
- Creation Date
- 3h ago
- Vendor
- pay-rails
- Product
- pay
- Attack Type
- CWE-208: Observable Timing Discrepancy
- Vector String
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
- Attack Complexity
- HIGH
Narrative and Response
Description
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.
Executive Summary
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Technical Details
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Mitigations
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
References
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Additional Metadata
{
"score": "7.4",
"pubDate": "2026-09-14T18:19:45.213Z",
"pubdate": "2026-09-14T18:19:45.213Z",
"executiveSummary": "A timing side-channel vulnerability exists in Pay versions prior to 11.6.2, specifically within the Pay::Webhooks::PaddleBillingController#valid_signature? method. The vulnerability arises from the use of insecure string comparison for HMAC validation of Paddle-Signature headers.\nBy measuring the time taken for the server to reject invalid signatures, an unauthenticated remote attacker can perform a statistical timing attack to recover a valid HMAC signature byte-by-byte. Successful exploitation allows an attacker to bypass signature verification, enabling the injection of arbitrary, forged webhook payloads.\nThe impact is critical, as it allows attackers to manipulate billing states, provision unauthorized services, trigger false refunds, or send malicious customer notifications. The vulnerability is exploitable over a network without requiring authentication, necessitating an immediate update to version 11.6.2 or later.",
"technicalDetails": "The root cause of this vulnerability is the implementation of HMAC signature verification using the standard Ruby String#== operator within the Pay::Webhooks::PaddleBillingController#valid_signature? method located in app/controllers/pay/webhooks/paddle_billing_controller.rb. In Ruby, the standard equality operator for strings performs a short-circuit comparison; it returns false as soon as the first non-matching character is identified. This behavior introduces a measurable discrepancy in execution time proportional to the length of the matching prefix in the HMAC digest.\nThe exploitation process follows a side-channel methodology. An attacker sends a series of forged HTTP requests to the /pay/webhooks/paddle_billing endpoint, providing an arbitrary Paddle-Signature header containing a 64-character SHA-256 HMAC. By repeatedly submitting these requests and conducting high-precision timing measurements, the attacker can differentiate between comparisons that fail at the first byte versus those that fail at the second, third, and so on. Over multiple iterations, the attacker can statistically determine the correct character for each position in the signature, eventually reconstructing a valid HMAC hash that the application will accept as authentic.\nOnce the attacker successfully crafts a valid signature, the security controls governing the webhook process are bypassed. The application proceeds to enqueue the forged request through the Pay::Webhooks::ProcessJob. Because the application believes the request originated from a trusted source, it proceeds to execute sensitive backend logic.\nThe attack flow proceeds as follows: 1) The attacker targets the public webhook endpoint. 2) The attacker iteratively tests signature values while measuring server response time via timing analysis. 3) The attacker derives the valid signature after sufficient samples. 4) The attacker submits a malicious webhook payload using the recovered signature. 5) The application processes the forged job, leading to unauthorized state transitions, feature provisioning, or financial discrepancies. This vulnerability affects all versions of the Pay payments engine prior to 11.6.2."
}