Skip to content
Heist/ feed
Back to feed
Medium

libusb < 1.0.30 Out-of-Bounds Read in parse_iad_array()

Type: advisorySources: OSV

libusb before version 1.0.30 contains a one-byte out-of-bounds read vulnerability in parse_iad_array() in descriptor.c that allows attackers to trigger a denial of service by supplying a malformed USB descriptor whose bLength equals size minus one, causing the bounds check to use the original buffer size instead of the remaining size. Attackers in virtualized environments with USB passthrough can supply crafted descriptors through libusb_get_active_interface_association_descriptors or libusb_get_interface_association_descriptors to read one byte past the end of the malloc allocation, resulting in a denial of service.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-47104
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 10:52 UTC · Revision 1

Source evidence

libusb < 1.0.30 Out-of-Bounds Read in parse_iad_array()

core-osv · Original source

Published 27 May 2026, 13:20 UTC

libusb before version 1.0.30 contains a one-byte out-of-bounds read vulnerability in parse_iad_array() in descriptor.c that allows attackers to trigger a denial of service by supplying a malformed USB descriptor whose bLength equals size minus one, causing the bounds check to use the original buffer size instead of the remaining size. Attackers in virtualized environments with USB passthrough can supply crafted descriptors through libusb_get_active_interface_association_descriptors or libusb_get_interface_association_descriptors to read one byte past the end of the malloc allocation, resulting in a denial of service.

osv:CVE-2026-47104
Complete source record
{
  "id": "8297bce2ca18396d003b464fa2dfa551a1bf0335eb298a612866d33056432eff",
  "url": "https://osv.dev/vulnerability/CVE-2026-47104",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "libusb < 1.0.30 Out-of-Bounds Read in parse_iad_array()",
    "summary": "libusb before version 1.0.30 contains a one-byte out-of-bounds read vulnerability in parse_iad_array() in descriptor.c that allows attackers to trigger a denial of service by supplying a malformed USB descriptor whose bLength equals size minus one, causing the bounds check to use the original buffer size instead of the remaining size. Attackers in virtualized environments with USB passthrough can supply crafted descriptors through libusb_get_active_interface_association_descriptors or libusb_get_interface_association_descriptors to read one byte past the end of the malloc allocation, resulting in a denial of service.",
    "evidence": "osv:CVE-2026-47104",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-47104",
      "aliases": [
        "CVE-2026-47104",
        "PYSEC-2026-3979"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/libusb/libusb",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "87a55632db62c9bdc58cd31d3ccfa673f1bb017f"
                },
                {
                  "fixed": "578ab76b4c434f8b204137ab6d7310689c7a9704"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:libusb:libusb:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.0.30"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "578ab76b4c434f8b204137ab6d7310689c7a9704"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "87a55632db62c9bdc58cd31d3ccfa673f1bb017f"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v1.0.30"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v1.0.30-rc1",
            "v1.0.29",
            "v1.0.28",
            "v1.0.28-rc1",
            "v1.0.27",
            "v1.0.27-rc2",
            "v1.0.27-rc1",
            "v1.0.26",
            "v1.0.26-rc1",
            "v1.0.25",
            "v1.0.25-rc1",
            "v1.0.24",
            "v1.0.24-rc1",
            "v1.0.23",
            "v1.0.23-rc3",
            "v1.0.23-rc2",
            "v1.0.23-rc1",
            "v1.0.22",
            "v1.0.22-rc4",
            "v1.0.22-rc3",
            "v1.0.22-rc2",
            "v1.0.22-rc1",
            "v1.0.21",
            "v1.0.21-rc6",
            "v1.0.21-rc5",
            "v1.0.21-rc4",
            "v1.0.21-rc3",
            "v1.0.21-rc2",
            "v1.0.21-rc1",
            "v1.0.20",
            "v1.0.20-rc3",
            "v1.0.20-rc2",
            "v1.0.20-rc1",
            "v1.0.19",
            "v1.0.19-rc2",
            "v1.0.19-rc1",
            "v1.0.18",
            "v1.0.18-rc1",
            "v1.0.17",
            "v1.0.17-rc1",
            "v1.0.16",
            "v1.0.16-rc3",
            "v1.0.16-rc2",
            "v1.0.16-rc1",
            "v1.0.15",
            "v1.0.15-rc3",
            "v1.0.15-rc2",
            "v1.0.15-rc1",
            "v1.0.14",
            "v1.0.13",
            "v1.0.13-rc2",
            "v1.0.13-rc1",
            "v1.0.12",
            "v1.0.12-rc1",
            "v1.0.11",
            "v1.0.11-rc1",
            "v1.0.10",
            "v1.0.10-rc1",
            "v1.0.9",
            "v1.0.9-rc5",
            "v1.0.9-rc4",
            "v1.0.8",
            "v1.0.7",
            "v1.0.6",
            "v1.0.5",
            "v1.0.4",
            "v1.0.3",
            "v1.0.2",
            "v1.0.1",
            "v1.0.0",
            "v0.9.4",
            "v0.9.3",
            "v0.9.2",
            "v0.9.1",
            "v0.9.0",
            "academic-demo"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-47104.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:28.154220756Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47104.json",
        "https://github.com/libusb/libusb/releases/tag/v1.0.30",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-47104",
        "https://www.vulncheck.com/advisories/libusb-out-of-bounds-read-in-parse-iad-array",
        "https://github.com/libusb/libusb/issues/1813",
        "https://github.com/libusb/libusb/pull/1814",
        "https://github.com/libusb/libusb/commit/578ab76b4c434f8b204137ab6d7310689c7a9704",
        "https://github.com/libusb/libusb"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-125"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47104.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-47104",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 494656,
  "published_at": "2026-05-27T13:20:44.432+00:00"
}