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-25882

Panic at the Router: Crashing Go Fiber with a Single Request

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 24, 2026·5 min read·49 visits

Executive Summary (TL;DR)

Fiber, a high-performance Go web framework, has a hard limit of 30 parameters per route. Before the fix, the router didn't check this limit during request processing. Sending a request to a route with 31+ parameters causes a specific `index out of range` panic, killing the Go routine or the entire application. Update to v2.52.12 or v3.1.0 to fix it.

A critical Denial of Service (DoS) vulnerability exists in the Fiber web framework (v2 and v3) due to an unchecked array index write. By defining a route with more than 30 parameters and sending a matching request, an attacker can trigger a runtime panic, crashing the application. This stems from a hardcoded limit in Fiber's context structure that was not enforced during request routing.

The Hook: Speed Kills

In the world of Go web frameworks, Fiber sells itself on one thing: raw, unadulterated speed. It’s the drag racer of the ecosystem, stripping away the heavy safety features of net/http in favor of fasthttp and zero-allocation practices. To achieve this blistering performance, Fiber makes assumptions. It pre-allocates memory. It avoids garbage collection overhead like the plague.

But here is the thing about drag racers: they don't handle unexpected bumps very well. In their quest to avoid heap allocations, the Fiber developers made a classic optimization trade-off. They decided that no reasonable web developer would ever need more than 30 parameters in a single URL route. I mean, who writes /api/:a/:b/:c.../:z? That would be madness, right?

Well, madness is a security researcher's bread and butter. It turns out that by hardcoding this limit but failing to enforce it at runtime, Fiber left the door open for a trivial Denial of Service. It’s not a complex memory corruption exploit involving ROP chains; it’s a simple case of the code running off the edge of a cliff because it forgot to look down.

The Flaw: A Tale of Fixed Arrays

To understand this bug, you have to look at how Fiber handles request contexts. In a standard Go web server, you might allocate a map or a slice to hold route parameters (like :id or :user). Maps are flexible, but they are slow (relatively speaking) and involve memory allocation. Fiber hates allocation.

So, in ctx.go, Fiber defines its context with a fixed-size array. Not a slice, an array. This is a stack-allocated, fixed-memory structure. Here is the smoking gun:

const maxParams = 30
 
type DefaultCtx struct {
    values [maxParams]string  // The trap is set here
    // ... other fields
}

The values array can hold exactly 30 strings. No more. The vulnerability arises in the routing logic found in path.go. When an HTTP request comes in, Fiber tries to match the URL path against registered routes. If it matches a wildcard or a parameter segment, it iterates a counter and saves the value into this array.

The logic failure (CWE-129) is stunningly simple: Nobody checked if the counter exceeded 30.

The router happily increments the index paramsIterator for every match. If you have a route with 35 parameters, the loop runs 35 times. On the 31st iteration, it tries to write to values[30]. In C or C++, this would be a heap buffer overflow or stack smash, potentially leading to Remote Code Execution. In Go, it triggers a runtime panic: runtime error: index out of range [30] with length 30.

The Exploit: Crashing the Party

Exploiting this is almost too easy. First, we need a target application that has defined a route with a ridiculous number of parameters. You might think, "Nobody does that." But consider:

  1. Auto-generated code: API generators based on database schemas often create deep, nested routes.
  2. SEO spam: Applications handling complex categories like /shop/:category/:subcategory/:brand/:model/:year/....
  3. GraphQL-ish endpoints: REST APIs trying to emulate graph depth.

If an application has a route like this:

app.Get("/:p1/:p2/.../:p35", handler)

The application will start successfully. The bomb is planted. The trigger is a simple HTTP request.

# The payload is just a URL. No shellcode required.
curl http://target.com/v1/v2/v3/v4/v5/v6/v7/v8/v9/v10/v11/v12/v13/v14/v15/v16/v17/v18/v19/v20/v21/v22/v23/v24/v25/v26/v27/v28/v29/v30/v31

When the server receives this, the router iterates. p1 goes to index 0. p30 goes to index 29. p31 attempts to go to index 30. BOOM.

The Go runtime panics. Depending on the middleware configuration (specifically if Recover middleware is used and positioned correctly), this might just kill the request. However, if the panic occurs deep in the routing logic before the recovery middleware wraps the execution, or if the panic unwinds the stack in a way that bypasses the handler, the entire Go routine crashes. In some configurations, this brings down the whole process.

The Fix: Fail Fast, Fail Loud

The remediation chosen by the Fiber team is interesting. They didn't increase the array size (which would increase memory usage for every single request). They didn't change the array to a slice (which would kill performance).

Instead, they implemented a Fail-Fast check at startup. They modified the route registration logic to count the parameters before the server even starts listening.

Here is the diff in path.go:

func parseRoute(pattern string, ...) routeParser {
    // ... existing parsing logic ...
 
    // The Fix: Stop the developer from shooting themselves in the foot
    if len(parser.params) > maxParams {
        panic(fmt.Errorf("Route '%s' has %d parameters, which exceeds the maximum of %d",
            pattern, len(parser.params), maxParams))
    }
    return parser
}

Now, if a developer tries to register that 35-parameter route, the application crashes immediately on boot. This is the correct engineering decision: prevent the vulnerable state from ever existing in a running application.

Takeaway for Developers: Input validation isn't just for user data. It's for developer data too. If your system has hard limits (like a buffer size), you must enforce them at the API boundary, not hope the caller is polite.

Official Patches

Go FiberFiber v2 Patch Release
Go FiberFiber v3 Patch Release

Fix Analysis (1)

Technical Appendix

CVSS Score
5.5/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:P
EPSS Probability
0.04%
Top 85% most exploited
50,000
via Shodan

Affected Systems

Fiber v2 < 2.52.12Fiber v3 < 3.1.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
Fiber
gofiber
>= 2.0.0, < 2.52.122.52.12
Fiber
gofiber
>= 3.0.0, < 3.1.03.1.0
AttributeDetail
CWE IDCWE-129
Attack VectorNetwork
CVSS Score5.5 (Medium)
ImpactDenial of Service (DoS)
VulnerabilityIndex Out of Bounds Panic
ComponentFiber Router (getMatch)

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-129
Improper Validation of Array Index

Improper Validation of Array Index

Known Exploits & Detection

GitHubOriginal issue discussion and PoC

Vulnerability Timeline

Vulnerability Discovered
2024-12-24
PoC Confirmed
2024-12-25
Fix Commit Pushed
2025-12-25
Public Disclosure
2026-02-24

References & Sources

  • [1]GHSA Advisory
  • [2]NVD Detail

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

•41 minutes ago•CVE-2026-14669
8.8

CVE-2026-14669: PostgreSQL to_char() Timezone Abbreviation Heap-Based Buffer Overflow

CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.

Alon Barad
Alon Barad
1 views•6 min read
•2 days ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
8 views•8 min read
•2 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•2 days ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
13 views•5 min read
•2 days ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
6 views•7 min read