GHSA-gcqf-3g44-vc9p: Actix files [actix-files] Panic Triggered By Empty Vulnerability

MODERATE
CWE-20
Published
Advisory Summary

GHSA-gcqf-3g44-vc9p is a MODERATE [actix-files] panic triggered by empty vulnerability (CWE-20: Improper Input Validation) affecting Actix files libraries in the crates.io ecosystem. The issue involves [actix-files] panic triggered by empty range header in get request for static file. Remediation is available by upgrading affected packages to version 0.6.10.

GHSA-gcqf-3g44-vc9p at a Glance

CVE Identifier N/A
GHSA Identifier GHSA-gcqf-3g44-vc9p
Severity MODERATE
CVSS v3.1 Base Score N/A
CWE Classification CWE-20: Improper Input Validation
Affected Product Actix files
Package Ecosystem crates.io
Published Date
Last Updated

How to Fix GHSA-gcqf-3g44-vc9p

To remediate this vulnerability, upgrade all affected Actix files dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

actix-files fixed: 0.6.10
Upgrade actix-files to 0.6.10
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for actix-files

How to Check if You Are Affected

To determine whether your application is affected by GHSA-gcqf-3g44-vc9p, inspect your project dependencies for Actix files:

inspect dependencies for actix-files

Analyze the terminal output to locate any version of Actix files in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.6.10), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-20: Improper Input Validation, where the product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly. In Actix files, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary A GET request for a static file served by `actix-files` with an empty `Range` header triggers a panic. With `panic = "abort"`, a remote user may crash the process on-demand. ### Details `actix-files` assumes that `HttpRange::parse()`, when `Ok`, always returns a vector with at least one element. When `parse()` is called on an empty string, it returns `Ok(vec![])`. This can cause a panic at named.rs:534 when handling an HTTP request with an empty `Range:` header. This shouldn't significantly impact programs built with the default `panic = "unwind"`, as the only effect is that the connection is closed when the worker thread panics and new threads are spooled up on demand. Programs built with `panic = "abort"` are vulnerable to being crashed on-demand by any user with permissions to perform a `GET` request for a static file served by `actix-files`. https://github.com/actix/actix-web/blob/0383f4bdd1210e726143ca1ebcf01169b67a4b6c/actix-files/src/named.rs#L530-L535 ### PoC <details> <summary>Minimal reproduction</summary> `Cargo.toml`: ```toml [package] name = "example" version = "0.1.0" edition = "2021" [dependencies] actix-web = "=4.5.1" actix-files = "=0.6.5" [profile.dev] panic = "abort" ``` `src/main.rs`: ```rust use actix_files::NamedFile; use actix_web::{get, Responder}; #[get("/")] async fn index() -> impl Responder { NamedFile::open("test_file") } #[actix_web::main] async fn main() -> std::io::Result<()> { use actix_web::{App, HttpServer}; HttpServer::new(|| App::new().service(index)) .bind(("127.0.0.1", 8080))? .run() .await } ``` `test.sh`: ```sh #!/bin/bash echo foo > test_file cargo b cargo r& sleep 1 nc 127.0.0.1 8080 << EOF GET / HTTP/1.1 Range: EOF kill %1 ``` Create these files, then run `chmod +x test.sh && ./test.sh`. The server should start, then crash upon receiving the `GET` request from `netcat`. This assumes a reasonably UNIX-like system with Rust, `bash` and `netcat` installed. </details> ### Impact It is believed that only programs compiled with panic = "abort" are affected significantly. The only potential impact that can be seen is Denial of Service, though an attacker able to repeatedly send GET requests without those requests getting blocked by rate limiting, DDoS protection, etc. would be able to keep a server down indefinitely. As only a single unblocked request is needed to trigger the panic, merely having a rate limiter may not be enough to prevent this. Though the impact in the worst case is significant, the real-world risk of this vulnerability appears to be limited, as it would be expected that anyone for whom uptime is a significant concern would not compile their program with panic = "abort".

GHSA-gcqf-3g44-vc9p Affected Actix files Versions

1 component(s)
Fixed Versions:
0.6.10
Product / Package Ecosystem Affected Versions Fixed Version
actix-files
crates.io
< 0.6.10
0.6.10

References

Frequently Asked Questions

What is GHSA-gcqf-3g44-vc9p?
GHSA-gcqf-3g44-vc9p is a security vulnerability in Actix files involving [actix-files] Panic triggered by empty Range header in GET request for static file under CWE-20: Improper Input Validation.
Which Actix files versions are affected?
Affected versions include releases prior to 0.6.10 across affected packages: actix-files.
What version fixes GHSA-gcqf-3g44-vc9p?
Upgrading to 0.6.10 (or the latest patched release for your respective branch) resolves the vulnerability.
Is actix-files affected?
Yes, actix-files is affected in releases prior to 0.6.10. Upgrade your dependency to 0.6.10 or later.
What CWE is associated with GHSA-gcqf-3g44-vc9p?
GHSA-gcqf-3g44-vc9p is classified under CWE-20: Improper Input Validation (The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.).
How can I check crates.io dependencies for GHSA-gcqf-3g44-vc9p?
Run the dependency tree command: 'inspect dependencies for actix-files'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-gcqf-3g44-vc9p",
  "modified" : "2026-02-06T19:00:13Z",
  "published" : "2026-02-06T19:00:12Z",
  "aliases" : [ ],
  "summary" : "[actix-files] Panic triggered by empty Range header in GET request for static file",
  "details" : "### Summary\nA GET request for a static file served by `actix-files` with an empty `Range` header triggers a panic. With `panic = \"abort\"`, a remote user may crash the process on-demand.\n\n### Details\n`actix-files` assumes that `HttpRange::parse()`, when `Ok`, always returns a vector with at least one element. When `parse()` is called on an empty string, it returns `Ok(vec![])`. This can cause a panic at named.rs:534 when handling an HTTP request with an empty `Range:` header. This shouldn't significantly impact programs built with the default `panic = \"unwind\"`, as the only effect is that the connection is closed when the worker thread panics and new threads are spooled up on demand. Programs built with `panic = \"abort\"` are vulnerable to being crashed on-demand by any user with permissions to perform a `GET` request for a static file served by `actix-files`.\nhttps://github.com/actix/actix-web/blob/0383f4bdd1210e726143ca1ebcf01169b67a4b6c/actix-files/src/named.rs#L530-L535\n\n### PoC\n<details>\n<summary>Minimal reproduction</summary>\n\n`Cargo.toml`:\n```toml\n[package]\nname = \"example\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nactix-web = \"=4.5.1\"\nactix-files = \"=0.6.5\"\n\n[profile.dev]\npanic = \"abort\"\n```\n`src/main.rs`:\n```rust\nuse actix_files::NamedFile;\nuse actix_web::{get, Responder};\n\n#[get(\"/\")]\nasync fn index() -> impl Responder {\n    NamedFile::open(\"test_file\")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind((\"127.0.0.1\", 8080))?\n        .run()\n        .await\n}\n```\n`test.sh`:\n```sh\n#!/bin/bash\n\necho foo > test_file\ncargo b\ncargo r&\nsleep 1\nnc 127.0.0.1 8080 << EOF\nGET / HTTP/1.1\nRange:\n\nEOF\nkill %1\n```\n\nCreate these files, then run `chmod +x test.sh && ./test.sh`. The server should start, then crash upon receiving the `GET` request from `netcat`.\n\nThis assumes a reasonably UNIX-like system with Rust, `bash` and `netcat` installed.\n</details>\n\n### Impact\nIt is believed that only programs compiled with panic = \"abort\" are affected significantly. The only potential impact that can be seen is Denial of Service, though an attacker able to repeatedly send GET requests without those requests getting blocked by rate limiting, DDoS protection, etc. would be able to keep a server down indefinitely. As only a single unblocked request is needed to trigger the panic, merely having a rate limiter may not be enough to prevent this.\n\nThough the impact in the worst case is significant, the real-world risk of this vulnerability appears to be limited, as it would be expected that anyone for whom uptime is a significant concern would not compile their program with panic = \"abort\".",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "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"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "crates.io",
      "name" : "actix-files"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.6.10"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 0.6.9"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/actix/actix-web/security/advisories/GHSA-gcqf-3g44-vc9p"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/actix/actix-web"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/actix/actix-web/blob/0383f4bdd1210e726143ca1ebcf01169b67a4b6c/actix-files/src/named.rs#L530-L535"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-20" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-02-06T19:00:12Z",
    "nvd_published_at" : null
  }
}