CVE-2025-25290: @octokit/request has a Regular Expression in fetchWrapper that Leads to ReDoS Vulnerability Due to Catastrophic Backtracking

Published Feb 14, 2025
·
Updated

@octokit/request sends parameterized requests to GitHub’s APIs with sensible defaults in browsers and Node. Starting in version 1.0.0 and prior to version 9.2.1, the regular expression /<([^>]+)>; rel="deprecation"/ used to match the link header in HTTP responses is vulnerable to a ReDoS (Regular Expression Denial of Service) attack. This vulnerability arises due to the unbounded nature of the regex's matching behavior, which can lead to catastrophic backtracking when processing specially crafted input. An attacker could exploit this flaw by sending a malicious link header, resulting in excessive CPU usage and potentially causing the server to become unresponsive, impacting service availability. Version 9.2.1 fixes the issue.

Other sources

@octokit/request sends parameterized requests to GitHub’s APIs with sensible defaults in browsers and Node. Starting in version 1.0.0 and prior to versions 9.2.1 and 8.4.1, the regular expression /<([^>]+)>; rel="deprecation"/ used to match the link header in HTTP responses is vulnerable to a ReDoS (Regular Expression Denial of Service) attack. This vulnerability arises due to the unbounded nature of the regex's matching behavior, which can lead to catastrophic backtracking when processing specially crafted input. An attacker could exploit this flaw by sending a malicious link header, resulting in excessive CPU usage and potentially causing the server to become unresponsive, impacting service availability. Versions 9.2.1 and 8.4.1 fix the issue.

— MITRE

Summary The regular expression /<([^>]+)>; rel="deprecation"/ used to match the link header in HTTP responses is vulnerable to a ReDoS (Regular Expression Denial of Service) attack. This vulnerability arises due to the unbounded nature of the regex's matching behavior, which can lead to catastrophic backtracking when processing specially crafted input. An attacker could exploit this flaw by sending a malicious link header, resulting in excessive CPU usage and potentially causing the server to become unresponsive, impacting service availability. Details The vulnerability resides in the regular expression /<([^>]+)>; rel="deprecation"/, which is used to match the link header in HTTP responses. This regular expression captures content between angle brackets (<>) followed by ; rel="deprecation". However, the pattern is vulnerable to ReDoS (Regular Expression Denial of Service) attacks due to its susceptibility to catastrophic backtracking when processing malicious input. An attacker can exploit this vulnerability by sending a specially crafted link header designed to trigger excessive backtracking. For example, the following headers: js fakeHeaders.set("link", "<".repeat(100000) + ">"); fakeHeaders.set("deprecation", "true"); The crafted link header consists of 100,000 consecutive < characters followed by a closing >. This input forces the regular expression engine to backtrack extensively in an attempt to match the pattern. As a result, the server can experience a significant increase in CPU usage, which may lead to denial of service, making the server unresponsive or even causing it to crash under load. The issue is present in the following code: js const matches = responseHeaders.link && responseHeaders.link.match(/<([^>]+)>; rel="deprecation"/); In this scenario, the link header value triggers the regex to perform excessive backtracking, resulting in resource exhaustion and potentially causing the service to become unavailable.

PoC The gist of PoC.js 1. run npm i @octokit/request 2. run 'node poc.js' result: 3. then the program will stuck forever with high CPU usage js import { request } from "@octokit/request"; const originalFetch = globalThis.fetch; globalThis.fetch = async (url, options) => { const response = await originalFetch(url, options); const fakeHeaders = new Headers(response.headers); fakeHeaders.set("link", "<".repeat(100000) + ">"); fakeHeaders.set("deprecation", "true"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: fakeHeaders }); }; request("GET /repos/octocat/hello-world") .then(response => { // console.log("[+] Response received:", response); }) .catch(error => { // console.error("[-] Error:", error); }); // globalThis.fetch = originalFetch; Impact This is a Denial of Service (DoS) vulnerability caused by a ReDoS (Regular Expression Denial of Service) flaw. The vulnerability allows an attacker to craft a malicious link header that exploits the inefficient backtracking behavior of the regular expression used in the code. The primary impact is the potential for server resource exhaustion, specifically high CPU usage, which can cause the server to become unresponsive or even crash when processing the malicious request. This affects the availability of the service, leading to downtime or degraded performance. The vulnerability impacts any system that uses this specific regular expression to process link headers in HTTP responses. This can include: Web applications or APIs that rely on parsing headers for deprecation information. Users interacting with the affected service, as they may experience delays or outages if the server becomes overwhelmed. Service providers who may face disruption in operations or performance degradation due to this flaw. If left unpatched, the vulnerability can be exploited by any unauthenticated user who is able to send a specially crafted HTTP request with a malicious link header, making it a low-barrier attack that could be exploited by anyone.

— GitHub

Affected Software

2 affected componentsFixes available
npm/@octokit/request>=1.0.0<8.4.1
8.4.1
npm/@octokit/request>=9.0.0-beta.1<9.2.1
9.2.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade npm/@octokit/request to a version that resolves this vulnerability.

    Fixed in 8.4.1
  2. Upgrade

    Upgrade npm/@octokit/request to a version that resolves this vulnerability.

    Fixed in 9.2.1
  3. Upgrade

    Upgrade @octokit/request to a version that resolves this vulnerability.

    Fixed in 9.2.1
  4. Upgrade

    Upgrade @octokit/request to a version that resolves this vulnerability.

    Fixed in 8.4.1

Event History

Feb 14, 2025
Advisory Published
via GitHub·06:00 PM
CVE Published
via MITRE·07:37 PM
Data Sourced
via MITRE·07:37 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·08:15 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

What is the severity of CVE-2025-25290?

CVE-2025-25290 is classified as a moderate severity vulnerability due to its potential for impacting service availability.

2

How do I fix CVE-2025-25290?

To fix CVE-2025-25290, update the @octokit/request package to version 9.2.1 or later.

3

What impact does CVE-2025-25290 have on my application?

CVE-2025-25290 can lead to a Regular Expression Denial of Service attack, potentially causing application unresponsiveness.

4

Which software packages are affected by CVE-2025-25290?

CVE-2025-25290 affects versions of the @octokit/request package before 9.2.1.

5

Is there an exploit available for CVE-2025-25290?

While the details are not fully disclosed, the nature of the vulnerability suggests that it can be exploited through specially crafted HTTP responses.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203