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·42 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

•about 2 hours ago•CVE-2026-47347
5.3

CVE-2026-47347: Open Redirect Vulnerability in TYPO3 CMS GeneralUtility::sanitizeLocalUrl

CVE-2026-47347 is an open redirect vulnerability affecting multiple TYPO3 CMS versions. The issue resides in GeneralUtility::sanitizeLocalUrl, where an insufficient blocklist validation implementation fails to prevent browsers from normalizing malformed relative paths into external protocol-relative redirections. Attackers can exploit this to conduct phishing, session hijacking, or credential harvesting campaigns.

Alon Barad
Alon Barad
2 views•7 min read
•about 2 hours ago•CVE-2026-47349
5.3

CVE-2026-47349: Missing Authorization in TYPO3 CMS DataHandler Record Restoration

An authenticated backend user with access to the Recycler module in TYPO3 CMS can bypass write restrictions and restore soft-deleted records on pages or database tables they are not authorized to modify. This vulnerability resides in the core DataHandler class due to missing permission checks during 'undelete' operations.

Alon Barad
Alon Barad
2 views•7 min read
•about 3 hours ago•CVE-2026-11607
7.6

CVE-2026-11607: Broken Access Control in TYPO3 CMS Form Framework

CVE-2026-11607 is a critical broken access control vulnerability in TYPO3 CMS's Form Framework (ext:form). Authenticated backend users with access to the Form Framework can load unauthorized YAML configurations, bypassing file extension restrictions. This allows the execution of arbitrary SQL commands via the SaveToDatabase finisher, leading to privilege escalation to administrator level.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 3 hours ago•GHSA-G7R4-M6W7-QQQR
7.5

GHSA-G7R4-M6W7-QQQR: Path Traversal and Arbitrary File Read in esbuild Development Server on Windows

Improper validation of backslash character separators in esbuild's local development server allows path traversal on Windows systems.

Alon Barad
Alon Barad
3 views•7 min read
•about 5 hours ago•GHSA-GV7W-RQVM-QJHR
8.1

GHSA-GV7W-RQVM-QJHR: Remote Code Execution via Missing Binary Integrity Verification in esbuild Deno Integration

An issue was discovered in the Deno integration of the esbuild package. The module fails to verify the integrity of downloaded native binary packages from NPM registries before writing and executing them on the local filesystem. This allows an attacker who controls the NPM_CONFIG_REGISTRY environment variable or intercepts the network connection to execute arbitrary native code on the host machine.

Amit Schendel
Amit Schendel
10 views•6 min read
•about 5 hours ago•GHSA-CHGR-C6PX-7XPP
5.9

GHSA-chgr-c6px-7xpp: Thread-Safety Data Race in PyO3 Closure Wrapping

A thread-safety vulnerability exists in the PyO3 library versions prior to 0.29.0 due to a missing Sync trait bound on closure type parameters. This omission allows safe Rust code to register non-thread-safe closures as Python callables, leading to concurrent shared mutation and data races during multithreaded execution.

Amit Schendel
Amit Schendel
3 views•11 min read