Server-side ReDoS via user-controlled regex in OIDC Access Policy

Disclosed: 2026-03-26 09:31:22 By 6b_jjj To rubygems
Unknown
Vulnerability Details
The OIDC Access Policy implementation evaluates user-supplied regular expressions against JWT claim values using Ruby’s Regexp engine without any timeout or complexity validation. The vulnerable code path is: Regexp.new(value).match?(claim_value) Where: - `value` is fully user-controlled (defined when creating an OIDC API Key Role using the `string_matches` operator) - `claim_value` is derived from JWT claims and can be influenced via GitHub Actions metadata (e.g. branch names) A malicious regular expression with catastrophic backtracking characteristics can be supplied, causing the server to spend an excessive amount of CPU time evaluating a single request. Example pattern: ^(a+)+$ Example input: refs/heads/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! This causes Ruby’s regex engine to enter exponential backtracking during evaluation. ## Impact A single crafted request can block a Puma worker thread for an extended period of time due to catastrophic regex backtracking. Since RubyGems.org runs with a very small thread pool, a small number of concurrent requests can exhaust all available workers, resulting in partial or full denial of service. This can disrupt gem publishing operations and CI/CD pipelines that rely on RubyGems.org availability.
Actions
View on HackerOne
Report Stats
  • Report ID: 3542546
  • State: Closed
  • Substate: resolved
  • Upvotes: 4
Share this report