Skip to content
Heist/ feed
Back to feed
High

Security advisory

Type: advisorySources: OSVCVE: CVE-2020-26281

async-h1 is an asynchronous HTTP/1.1 parser for Rust (crates.io). There is a request smuggling vulnerability in async-h1 before version 2.3.0. This vulnerability affects any webserver that uses async-h1 behind a reverse proxy, including all such Tide applications. If the server does not read the body of a request which is longer than some buffer length, async-h1 will attempt to read a subsequent request from the body content starting at that offset into the body. One way to exploit this vulnerability would be for an adversary to craft a request such that the body contains a request that would not be noticed by a reverse proxy, allowing it to forge forwarded/x-forwarded headers. If an application trusted the authenticity of these headers, it could be misled by the smuggled request. Another potential concern with this vulnerability is that if a reverse proxy is sending multiple http clients' requests along the same keep-alive connection, it would be possible for the smuggled request to specify a long content and capture another user's request in its body. This content could be captured in a post request to an endpoint that allows the content to be subsequently retrieved by the adversary. This has been addressed in async-h1 2.3.0 and previous versions have been yanked.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2020-26281, CVE-2020-36202
Confirmed fixed CVEs
Not specified
Updated in this feed
31 Oct 2026, 11:08 UTC · Revision 1

Source evidence

CVE-2020-26281

core-osv · Original source

Published 21 Dec 2020, 22:15 UTC

async-h1 is an asynchronous HTTP/1.1 parser for Rust (crates.io). There is a request smuggling vulnerability in async-h1 before version 2.3.0. This vulnerability affects any webserver that uses async-h1 behind a reverse proxy, including all such Tide applications. If the server does not read the body of a request which is longer than some buffer length, async-h1 will attempt to read a subsequent request from the body content starting at that offset into the body. One way to exploit this vulnerability would be for an adversary to craft a request such that the body contains a request that would not be noticed by a reverse proxy, allowing it to forge forwarded/x-forwarded headers. If an application trusted the authenticity of these headers, it could be misled by the smuggled request. Another potential concern with this vulnerability is that if a reverse proxy is sending multiple http clients' requests along the same keep-alive connection, it would be possible for the smuggled request to specify a long content and capture another user's request in its body. This content could be captured in a post request to an endpoint that allows the content to be subsequently retrieved by the adversary. This has been addressed in async-h1 2.3.0 and previous versions have been yanked.

osv:CVE-2020-26281
Complete source record
{
  "id": "5096957d2325effe6543dcd8667053273111e2810c2de7d15494d69cc88dea04",
  "url": "https://osv.dev/vulnerability/CVE-2020-26281",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "CVE-2020-26281",
    "summary": "async-h1 is an asynchronous HTTP/1.1 parser for Rust (crates.io). There is a request smuggling vulnerability in async-h1 before version 2.3.0. This vulnerability affects any webserver that uses async-h1 behind a reverse proxy, including all such Tide applications. If the server does not read the body of a request which is longer than some buffer length, async-h1 will attempt to read a subsequent request from the body content starting at that offset into the body. One way to exploit this vulnerability would be for an adversary to craft a request such that the body contains a request that would not be noticed by a reverse proxy, allowing it to forge forwarded/x-forwarded headers. If an application trusted the authenticity of these headers, it could be misled by the smuggled request. Another potential concern with this vulnerability is that if a reverse proxy is sending multiple http clients' requests along the same keep-alive connection, it would be possible for the smuggled request to specify a long content and capture another user's request in its body. This content could be captured in a post request to an endpoint that allows the content to be subsequently retrieved by the adversary. This has been addressed in async-h1 2.3.0 and previous versions have been yanked.",
    "evidence": "osv:CVE-2020-26281",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2020-26281",
      "aliases": [
        "CVE-2020-26281",
        "CVE-2020-36202",
        "GHSA-4vr9-8cjf-vf9c",
        "GHSA-c8rq-crxj-mj9m",
        "RUSTSEC-2020-0093"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/http-rs/async-h1",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "b1651f3f786a0654f80dec7cbacc1f9097fecab2"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:rust-lang:async-h1:*:*:*:*:*:rust:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.3.0"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "b1651f3f786a0654f80dec7cbacc1f9097fecab2"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v2.3.0"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v2.2.1",
            "v2.2.0",
            "v2.1.4",
            "v2.1.3",
            "v2.1.2",
            "v2.1.1",
            "v2.1.0",
            "v2.0.2",
            "v2.0.1",
            "v2.0.0",
            "v1.1.2",
            "v1.1.1",
            "v1.1.0",
            "v1.0.2",
            "v1.0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2020-26281.json"
          }
        }
      ],
      "modified": "2026-10-20T10:52:57.015672978Z",
      "provider": "osv",
      "references": [
        "https://github.com/http-rs/async-h1/releases/tag/v2.3.0",
        "https://github.com/http-rs/async-h1/security/advisories/GHSA-4vr9-8cjf-vf9c"
      ],
      "provider_metadata": {}
    },
    "related_cves": [
      {
        "value": "CVE-2020-26281",
        "evidence": "/id"
      },
      {
        "value": "CVE-2020-36202",
        "evidence": "/aliases"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 384082,
  "published_at": "2020-12-21T22:15:13.407+00:00"
}