GHSA-jcvh-xf52-2cwm: High severity go/github.com/ffuf/ffuf vulnerability

Published Sep 3, 2026
·
Updated

Summary

A malicious or attacker-controlled target server can crash ffuf with an out-of-memory condition by returning a compressed HTTP response that decompresses to a very large body (a decompression bomb). This works against default usage with no special flags.

### Details

The response body size guard in pkg/runner/simple.go only checks the server-supplied Content-Length header, which reflects the compressed size and is absent for chunked responses or when Go's net/http transport transparently decompresses the body. After that check, io.ReadAll reads the entire decompressed stream into memory with no upper bound, so a small compressed body that expands to gigabytes causes unbounded allocation and the process is terminated by the OS OOM killer.

The guard is bypassed in three independent ways:

1. gzip (default configuration): the transport requests gzip on its own and transparently decompresses the response, stripping Content-Encoding and Content-Length, so the size check is skipped and the already-decoded body is read unbounded. 2. brotli/deflate (or gzip with headers preserved): Content-Length reflects the small compressed size and passes the check; the body is then manually decompressed into an unbounded io.ReadAll. 3. chunked transfer encoding: no Content-Length header is present, so the numeric parse fails and the check is skipped entirely.

### Impact

Denial of service against the operator running ffuf. A single hostile endpoint can OOM-kill ffuf on a default invocation such as ffuf -u http://target/FUZZ -w wordlist.txt, discarding all in-memory scan results. Because the crash recurs on every attempt against that target, a server can effectively make itself immune to ffuf-based content discovery. There is no confidentiality or integrity impact; only the availability of the scanning process is affected. CVSS 3.1 base score 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), CWE-409 (Improper Handling of Highly Compressed Data).

### Patches

Fixed in ffuf 2.2.0 (https://github.com/ffuf/ffuf/releases/tag/v2.2.0) via https://github.com/ffuf/ffuf/pull/897. The response body read is now bounded with io.LimitReader to the existing 5 MB download cap regardless of Content-Encoding, chunked framing, or transport-level decompression; responses exceeding the cap are dropped rather than read into memory. Upgrade to 2.2.0 or later.

### Workarounds

There is no configuration flag that fully mitigates this in affected versions. Until upgrading, limit ffuf usage against untrusted or attacker-influenced targets. Upgrading to 2.2.0 is the fix.

### Credits

Reported by João Tricta (Hakai Offensive Security).

Affected Software

2 affected componentsFixes available
go/github.com/ffuf/ffuf<=1.5.0
go/github.com/ffuf/ffuf/v2<=2.1.0
2.2.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/ffuf/ffuf/v2 to a version that resolves this vulnerability.

    Fixed in 2.2.0
  2. Upgrade

    Upgrade ffuf to a version that resolves this vulnerability.

    Fixed in 2.2.0Patch https://github.com/ffuf/ffuf/pull/897
  3. Compensating control

    Until upgrading, limit ffuf usage against untrusted or attacker-influenced targets.

Event History

Sep 3, 2026
Advisory Published
via GitHub·06:02 PM
Data Sourced
via GitHub·06:02 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Is ffuf vulnerable when used with its default settings?

Yes. A target server can trigger the issue through gzip responses during default usage, without requiring special ffuf flags.

2

What does an attacker need to control to trigger the condition?

The attacker needs to control, or cause ffuf to scan, a target HTTP server that returns a compressed response which expands to a very large body when decompressed. No authentication or user interaction is required.

3

Why does the response-size check not prevent this?

The check relies on the server-supplied Content-Length value, which can describe only the small compressed payload or be absent. ffuf then reads the decompressed response into memory without an upper bound, allowing memory exhaustion.

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