CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-61629

CVE-2026-61629: CPU Amplification Denial of Service via ParseAcceptLanguage Underscore Bypass

Alon Barad
Alon Barad
Software Engineer

Sep 21, 2026·7 min read·19 visits

Executive Summary (TL;DR)

Unauthenticated remote CPU amplification vulnerability in nginx-ignition version 2.29.0 through 2.40.0 allowed attackers to trigger a Denial of Service (DoS) by sending crafted Accept-Language headers with excessive underscore separators.

A vulnerability exists in the i18n middleware of nginx-ignition, enabling CPU amplification attacks. By transmitting a crafted Accept-Language header containing malformed tags separated by underscores, an unauthenticated remote attacker can bypass the length-guard threshold of the underlying Go parsing library. Normalization of underscores to hyphens occurs after the initial validation checks, forcing the parser into expensive quadratic-time loops that consume 100% of available CPU resources. This leads to a complete denial of service for the administrative API and potentially degrades the availability of the hosting system. This vulnerability has been resolved in version 2.40.1.

Vulnerability Overview

The administrative user interface nginx-ignition exposes several API endpoints for managing Nginx configurations, system status, and administrative routing. Among these components is an internationalization middleware, denoted as i18nMiddleware, designed to detect and apply language preferences dynamically based on the client's request headers. This middleware intercepts all incoming HTTP traffic prior to routing execution, meaning that both authenticated and unauthenticated endpoints execute this component upon receiving a request.\n\nThe attack surface is highly exposed because the middleware acts globally. Any user capable of establishing a TCP connection to the nginx-ignition API port can trigger the vulnerability without providing credentials or session identifiers. This exposes the system to unauthenticated remote exploitation, specifically targeting resource management mechanisms.\n\nThe vulnerability is classified under CWE-770 (Allocation of Resources Without Limits or Throttling). By failing to validate the structure and composition of the Accept-Language header before parsing, the system allows the underlying parsing library to allocate excessive CPU cycles. The vulnerability results in a total exhaustion of CPU resources on the hosting machine, degrading service availability for legitimate administrative tasks.

Root Cause Analysis

To comprehend the root cause of CVE-2026-61629, one must examine the internal parser logic of the Go text processing package golang.org/x/text/language. When a client transmits an HTTP request, the global middleware extracts the Accept-Language header and immediately passes it to the language.ParseAcceptLanguage function. This function is responsible for parsing BCP 47 language tags, which are typically formatted with hyphen-separated subtags, such as en-US or zh-CN.\n\nThe parsing algorithm utilizes an internal tokenization loop that identifies and processes individual language subtags. If the parser encounters subtags that do not conform to the expected format, it enters error-recovery routines. In earlier versions of the library, processing exceptionally long malformed sequences led to quadratic-time complexity due to repeated calls to an internal function named gobble. This function performs buffer shifting via runtime.memmove to slice and discard invalid inputs, resulting in extreme CPU cycle consumption when handling large payloads.\n\nA previous vulnerability, tracked as CVE-2022-32149, was addressed by capping the number of hyphen characters processed during parsing to 1,000. However, the parser's scanner normalizes underscore separators into hyphens during tokenization. This normalization occurs after the initial input-validation checks. Because the initial delimiter count check only scanned for hyphens and did not account for underscores, an attacker can substitute underscores for hyphens to bypass the 1,000-delimiter threshold entirely.\n\nmermaid\ngraph LR\n A[\"Client Request\"] --> B[\"i18nMiddleware Interception\"]\n B --> C[\"Check Accept-Language Header\"]\n C --> D[\"Verify Delimiter Count\"]\n D --> E[\"Normalized Tokenization\"]\n E --> F[\"golang.org/x/text/language Parser\"]\n F --> G[\"Quadratic Loop (gobble)\"]\n G --> H[\"CPU Exhaustion\"]\n

Code-Level Analysis of Vulnerable and Patched Code

The vulnerability manifests in api/common/server/i18n.go within the nginx-ignition codebase. In the vulnerable version, the Accept-Language header is retrieved and immediately evaluated without prior length or delimiter validation.\n\ngo\n// Vulnerable Implementation\nfunc i18nMiddleware(commands i18n.Commands) gin.HandlerFunc {\n\treturn func(ginCtx *gin.Context) {\n\t\tlang := commands.DefaultLanguage()\n\n\t\tlangHeader := ginCtx.GetHeader(\"Accept-Language\")\n\t\t// The unvalidated header string is passed directly to the parser\n\t\ttags, _, err := language.ParseAcceptLanguage(langHeader)\n\n\nTo remediate this vulnerability at the application layer, the developer introduced a check to limit the cumulative count of both hyphens and underscores before the library parser is invoked. The workaround establishes a maximum threshold of 10 delimiters, discarding the header if it exceeds this count.\n\ngo\n// Patched Implementation\nconst maximumLanguageTags = 10\n\nfunc i18nMiddleware(commands i18n.Commands) gin.HandlerFunc {\n\treturn func(ginCtx *gin.Context) {\n\t\tlang := commands.DefaultLanguage()\n\n\t\tlangHeader := ginCtx.GetHeader(\"Accept-Language\")\n\t\t// Count both hyphens and underscores to prevent delimiter-based bypasses\n\t\tif strings.Count(langHeader, \"-\")+strings.Count(langHeader, \"_\") > maximumLanguageTags {\n\t\t\tlangHeader = \"\"\n\t\t}\n\n\t\ttags, _, err := language.ParseAcceptLanguage(langHeader)\n\n\nThe application-level fix effectively mitigates the issue by truncating the parsed header to an empty string when anomalous delimiter patterns are detected. A secondary, more robust fix was applied by upgrading the compiler environment to Go 1.25.6. This upgrade forces the compilation of dependencies against patched versions of golang.org/x/text where the upstream parser natively accounts for underscore characters during the initial input verification phase.

Exploitation and Attack Path Analysis

Exploitation of CVE-2026-61629 is straightforward and requires no prior authentication, special configuration, or specific state. The attacker must construct a malformed Accept-Language header containing a high density of underscore characters. This payload takes advantage of the fact that Go's HTTP server implementation permits large headers (up to 1 MiB by default), allowing the attacker to send a substantial payload within a single request.\n\nThe sequence of the attack starts with target identification. The attacker probes the nginx-ignition administrative interface to confirm that the API service is reachable. Once identified, the attacker crafts a single HTTP GET request targeting any public endpoint, such as /api/i18n or /api/healthcheck, injecting the malformed header into the transaction.\n\nbash\ncurl -H \"Accept-Language: ________________________________________________________________________________\" http://target-host:8080/api/i18n\n\n\nWhen this request is processed, the i18nMiddleware extracts the header and invokes the parser. The parser converts each underscore into a hyphen, enters the error recovery state, and executes expensive memory-shifting operations. A single HTTP request containing a dense underscore payload of approximately 65,000 characters is sufficient to block a single CPU core for approximately 2.4 seconds. Multiple concurrent requests can easily saturate all available cores on the host, rendering the service completely unresponsive.

Security Impact and Consequences

The primary impact of CVE-2026-61629 is a severe Denial of Service affecting the availability of the host operating system's CPU resources. Because nginx-ignition runs as an administrative control panel, CPU starvation prevents administrators from executing commands, viewing logs, or modifying configurations. If the UI is deployed on the same system running the core Nginx proxy, the high CPU load can degrade proxying capabilities, leading to packet loss and high latency for transit traffic.\n\nThe CVSS v3.1 score is evaluated at 7.5, reflecting a High severity rating. The vector is defined as CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. The attack is network-accessible, requires low complexity, lacks authentication requirements, and demands no user interaction. The scope remains unchanged because the impacted resource is the application server itself.\n\nWhile confidentiality and integrity remain unaffected by this vulnerability, the low barrier to entry and the absence of pre-requisites make it an attractive target for automated disruption campaigns. Because the payload size is small relative to the CPU cycles consumed, the attack yields an amplification factor of approximately 75x, making it highly effective even when initiated from low-bandwidth connections.

Mitigation and Remediation Strategies

The primary and recommended resolution for CVE-2026-61629 is to upgrade the nginx-ignition deployment to version 2.40.1 or later. This release incorporates the application-level delimiter filter and upgrades the Go base image to version 1.25.6, ensuring that the upstream golang.org/x/text package contains the official fix for the parsing bypass.\n\nFor environments where immediate binary updates are not feasible, network-level and proxy-level mitigations should be implemented. Administrators can configure front-end load balancers or upstream reverse proxies, such as Nginx or HAProxy, to inspect and filter incoming Accept-Language headers. This blocks the malicious payload before it reaches the nginx-ignition middleware.\n\nAn exemplary Nginx configuration block can be placed in the reverse proxy configuration to detect and drop requests containing an excessive number of underscores or hyphens:\n\nnginx\n# Drop requests with suspicious Accept-Language headers\nif ($http_accept_language ~* \"([_-].*?){10,}\") {\n return 400;\n}\n\n\nDeploying this rule effectively terminates the request at the reverse proxy layer, saving the backend API from executing the resource-intensive parsing operations. Additionally, administrators should restrict access to the nginx-ignition port, ensuring that it is only accessible from trusted IP addresses or internal networks.

Technical Appendix

CVSS Score
7.5/ 10
120
via Shodan

Affected Systems

nginx-ignition versions 2.29.0 through 2.40.0
AttributeDetail
CWE IDCWE-770
Attack VectorNetwork
CVSS Score7.5
EPSS Score0.0
Exploit StatusPoC
KEV StatusNot Listed

Vulnerability Timeline

Delimiters checks implemented in the nginx-ignition repository
2026-05-26
CVE published and NVD entries updated
2026-09-21

References & Sources

  • [1]GitHub Security Advisory GHSA-jr34-h97m-9hpx
  • [2]Commit 0c988fc1277c7d291725e8373313f8486fa1b31a
  • [3]Commit cbaf0fc16ed873f7178a2ca9b0d00a696e44b485
  • [4]Release v2.40.1

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 4 hours ago•CVE-2026-12411
8.4

CVE-2026-12411: Cross-Guest Volume Hijack via DevLXD Device PATCH in Canonical LXD

CVE-2026-12411 is a broken access control vulnerability in the DevLXD interface of Canonical LXD versions 6.6 through 6.8. The flaw resides in the devLXDInstancePatchHandler component, which fails to verify storage volume ownership when an instance attaches a new disk device via the /dev/lxd guest socket. When the security.devlxd.management.volumes configuration option is enabled, an untrusted guest or DevLXD identity can issue a crafted HTTP PATCH request referencing another tenant's custom storage volume. The LXD host daemon subsequently mounts the target volume into the requesting guest, permitting unauthorized cross-tenant read and write operations.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 4 hours ago•CVE-2026-105769
9.3

CVE-2026-105769: Azure Entra ID Token Exfiltration in Kaniko via Unanchored ACR Hostname Regex

CVE-2026-105769 (GHSA-5q7h-w9jf-cx97, GO-2026-6225) is an origin validation error and credential exfiltration vulnerability affecting Kaniko prior to version 1.25.20. The flaw stems from an unanchored regular expression in the integrated Azure Container Registry (ACR) credential helper (github.com/chrismellard/docker-credential-acr-env). When Kaniko processes a Dockerfile containing an image reference hosted on a lookalike domain containing an ACR suffix as a substring (e.g., x.azurecr.io.attacker.com), the credential helper acquires a Microsoft Entra ID access token for Azure Resource Manager and transmits it via HTTP POST to the attacker-controlled host.

Amit Schendel
Amit Schendel
9 views•11 min read
•about 6 hours ago•CVE-2026-62300
6.5

CVE-2026-62300: Uncontrolled Resource Consumption in filecoin-pin Daemon

CVE-2026-62300 is an uncontrolled resource consumption vulnerability (CWE-400) affecting the daemon mode of filecoin-pin in versions up to and including 1.1.0. The daemon implements the IPFS Pinning Service API to store content on Filecoin's Proof of Data Possession (PDP) service. Due to the absence of rate limits, concurrency caps, execution timeouts, and Directed Acyclic Graph (DAG) traversal limits, an authenticated user—or an unauthenticated user when authentication is disabled—can exhaust system resources via crafted POST /pins requests.

Amit Schendel
Amit Schendel
6 views•11 min read
•about 7 hours ago•CVE-2026-61536
7.5

CVE-2026-61536: Remote Code Execution via Unsafe Reflection in masci/banks CompletionExtension

CVE-2026-61536 is a high-severity Remote Code Execution (RCE) vulnerability in the masci/banks Python library prior to version 2.4.3. The flaw exists within the CompletionExtension component, which parses JSON-serialized Tool definitions directly from rendered Jinja template bodies inside {% completion %} blocks. When handling tool calls returned by an LLM, the library dynamically resolves the target callable using importlib.import_module() and getattr() based on an unvalidated import_path string. An attacker who can supply or modify prompt templates can inject a malicious Tool JSON object pointing to arbitrary Python functions (such as os.system), bypassing the Jinja SandboxedEnvironment introduced in version 2.4.2 and achieving arbitrary code execution when the LLM invokes the tool.

Alon Barad
Alon Barad
6 views•10 min read
•1 day ago•CVE-2026-93363
4.3

CVE-2026-93363: Improper Access Control in Payload CMS Storage Upload Route

Payload CMS contains a missing authorization vulnerability (CWE-862) in its client-side upload instructions endpoint and the `@payloadcms/storage-vercel-blob` storage adapter. Two distinct logic defects allow authenticated users lacking collection-level `create` or `update` permissions to generate signed upload tokens and upload arbitrary files directly to external cloud storage.

Alon Barad
Alon Barad
7 views•9 min read
•1 day ago•CVE-2026-55098
6.5

CVE-2026-55098: Cross-Database Authorization Bypass via DuckDB Table-Valued I/O Functions in Basekick-Labs Arc

CVE-2026-55098 (GHSA-93cm-2v4m-c56c) is an authorization bypass and sensitive information disclosure vulnerability in Basekick-Labs Arc prior to version 26.06.2. The flaw stems from an incomplete remediation of CVE-2026-47735, which failed to restrict the full suite of DuckDB table-valued filesystem I/O functions and quoted-identifier invocations. Because Arc's query parser ignores function calls during table reference extraction, authenticated users with minimal or empty permissions can invoke functions like parquet_scan(), glob(), and read_blob() to read, enumerate, and extract telemetry data across all tenant databases residing within the shared local storage root.

Alon Barad
Alon Barad
7 views•10 min read