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. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →

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 Sun, 08 Nov 2026 00:16:09 +0000.