Skip to content
Heist/ feed
Back to feed
High

py-libp2p: yamux connection DoS via oversized data frame

Type: advisorySources: OSV

py-libp2p is the Python implementation of the libp2p networking stack. In 0.7.0 and earlier, the yamux handle_incoming() method in libp2p/stream_muxer/yamux/yamux.py reads an attacker-controlled 32-bit DATA frame length with read_exactly() before validating it against MAX_WINDOW_SIZE or checking whether stream_id exists. A peer that completes the standard Noise handshake can send a 12-byte frame declaring a 0xFFFFFFFF body and then withhold the body, causing the sequential yamux read loop used by the default new_host() configuration to block and preventing every stream on that connection from making progress. No fixed version is available as of this review.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-73568
Confirmed fixed CVEs
Not specified
Updated in this feed
8 Nov 2026, 03:46 UTC · Revision 1

Source evidence

py-libp2p: yamux connection DoS via oversized data frame

core-osv · Original source

Published 13 Aug 2026, 17:43 UTC

py-libp2p is the Python implementation of the libp2p networking stack. In 0.7.0 and earlier, the yamux handle_incoming() method in libp2p/stream_muxer/yamux/yamux.py reads an attacker-controlled 32-bit DATA frame length with read_exactly() before validating it against MAX_WINDOW_SIZE or checking whether stream_id exists. A peer that completes the standard Noise handshake can send a 12-byte frame declaring a 0xFFFFFFFF body and then withhold the body, causing the sequential yamux read loop used by the default new_host() configuration to block and preventing every stream on that connection from making progress. No fixed version is available as of this review.

osv:CVE-2026-73568
Complete source record
{
  "id": "788cf62b18f2ea1fb5e6fea02d1b6b07b4fb302523871aaa02aa0a1114c99b93",
  "url": "https://osv.dev/vulnerability/CVE-2026-73568",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "py-libp2p: yamux connection DoS via oversized data frame",
    "summary": "py-libp2p is the Python implementation of the libp2p networking stack. In 0.7.0 and earlier, the yamux handle_incoming() method in libp2p/stream_muxer/yamux/yamux.py reads an attacker-controlled 32-bit DATA frame length with read_exactly() before validating it against MAX_WINDOW_SIZE or checking whether stream_id exists. A peer that completes the standard Noise handshake can send a 12-byte frame declaring a 0xFFFFFFFF body and then withhold the body, causing the sequential yamux read loop used by the default new_host() configuration to block and preventing every stream on that connection from making progress. No fixed version is available as of this review.",
    "evidence": "osv:CVE-2026-73568",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-73568",
      "aliases": [
        "CVE-2026-73568",
        "GHSA-hmj8-5xmh-5573",
        "PYSEC-2026-3681"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/libp2p/py-libp2p",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "146ea87d1a20cc7dacf684ecf7c204543be04b37"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "last_affected": "0.7.0"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "146ea87d1a20cc7dacf684ecf7c204543be04b37"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v0.6.0",
            "v0.5.0",
            "v0.4.0",
            "v0.3.0",
            "v0.2.10",
            "v0.2.9",
            "v0.2.8",
            "v0.2.7",
            "v0.2.6",
            "v0.2.5",
            "v0.2.4",
            "v0.2.3",
            "v0.2.2",
            "v0.2.1",
            "v0.2.0",
            "v0.1.5",
            "v0.1.4",
            "v0.1.3",
            "v0.1.2",
            "v0.1.1",
            "v0.1.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-73568.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:53.325139705Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73568.json",
        "https://github.com/libp2p/py-libp2p/security/advisories/GHSA-hmj8-5xmh-5573",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-73568",
        "https://github.com/libp2p/py-libp2p/commit/146ea87d1a20cc7dacf684ecf7c204543be04b37"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-400"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73568.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-73568",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 522328,
  "published_at": "2026-08-13T17:43:26.065+00:00"
}