Advisory Database
  • Advisories
  • Dependency Scanning
  1. gem
  2. ›
  3. pay
  4. ›
  5. GHSA-mjgf-xj26-9qf9

GHSA-mjgf-xj26-9qf9: pay-rails/pay: non-constant-time HMAC comparison in Paddle Billing webhook signature verifier

July 1, 2026

Pay::Webhooks::PaddleBillingController#valid_signature? (app/controllers/pay/webhooks/paddle_billing_controller.rb) verifies the Paddle Billing webhook signature by computing OpenSSL::HMAC.hexdigest(...) and comparing it to the attacker-supplied header value using Ruby’s String#==. Ruby’s == is non-constant-time — it returns as soon as the first byte mismatches — and exposes a per-byte timing side channel on the webhook signature verification path. The canonical mitigation is to use a constant-time primitive (OpenSSL.fixed_length_secure_compare / ActiveSupport::SecurityUtils.secure_compare).

References

  • github.com/advisories/GHSA-mjgf-xj26-9qf9
  • github.com/pay-rails/pay/security/advisories/GHSA-mjgf-xj26-9qf9

Code Behaviors & Features

Detect and mitigate GHSA-mjgf-xj26-9qf9 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →

Affected versions

All versions up to 11.6.1

Solution

Unfortunately, there is no solution available yet.

Impact 7.4 HIGH

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

Learn more about CVSS

Weakness

  • CWE-208: Observable Timing Discrepancy

Source file

gem/pay/GHSA-mjgf-xj26-9qf9.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Sat, 18 Jul 2026 12:18:04 +0000.