CVE-2026-64339

Linux kernel (GCP) vulnerabilities

Beschreibung

Im Linux-Kernel wurde folgende Schwachstelle behoben:

usb: misc: usbio: Begrenzung der Länge der Antwort auf eine gebundene Bulk IN-Übertragung

usbio_bulk_msg() kopiert bpkt_len = le16_to_cpu(bpkt->len) Bytes aus dem Bulk IN-Puffer (usbio->rxbuf, der mit der Größe usbio->rxbuf_len allokiert wird) in den Puffer des Aufrufers. bpkt_len wird vollständig vom Gerät gesteuert und wird nur gegen ibuf_len geprüft; ibuf_len wiederum wird gegen usbio->txbuf_len, nicht gegen rxbuf_len, überprüft:

if ((obuf_len > (usbio->txbuf_len - sizeof(*bpkt))) ||
    (ibuf_len > (usbio->txbuf_len - sizeof(*bpkt))))
    return -EMSGSIZE;

txbuf_len und rxbuf_len werden unabhängig aus der maximalen Paketgröße (wMaxPacketSize) des Bulk OUT- bzw. Bulk IN-Endpunkts in usbio_probe() entnommen. Ein bösartiges oder fehlerhaftes Gerät, das einen großen Bulk OUT-Endpunkt und einen kleinen Bulk IN-Endpunkt bewirbt (z.B. durch die Angabe eines der IDs ohne Sonderbehandlung wie Lattice NX33U, 0x2ac1:0x20cb), führt dazu, dass ibuf_len und somit die vom Gerät bereitgestellte bpkt_len rxbuf_len überschreitet. memcpy() liest dann bis zu txbuf_len - rxbuf_len Bytes über das Ende des Puffers der Slab-Objekt rxbuf. Die gelesenen zusätzlichen Bytes werden an die i2c-Schicht und weiter in den Benutzerbereich durch i2c-dev zurückgegeben, wodurch benachbarte Speicherbereiche von Slabs offengelegt werden; mit KASAN wird dies als slab-out-of-bounds-Lesevorgang gemeldet.

Die Anzahl der tatsächlich empfangenen Bytes ist bereits bekannt: act entspricht der URB actual_length und ist durch rxbuf_len begrenzt. Jede Antwort, die mehr Payload beansprucht als empfangen wurde, ablehnen, analog zur bestehenden Überprüfung "act < sizeof(*bpkt)" direkt darüber.

Der Steuerpfad (usbio_ctrl_msg()) wird nicht beeinflusst: Er verwendet einen einzelnen Puffer (ctrlbuf) für beide Richtungen, sodass der entsprechende Kopiervorgang niemals die Allokation verlässt.

Durch Code-Review gefunden. Der out-of-bounds-Lesevorgang wurde unter AddressSanitizer mit einem genauen Benutzerraummodell des Empfangspfads von usbio_bulk_msg() bestätigt (ein Puffer der Größe rxbuf_len, dieselben Überprüfungen für act/ibuf_len/bpkt_len und die memcpy). Ein USB raw-gadget + dummy_hcd-Reproduktionsgerät ist ebenfalls verfügbar.

Metriken

Severity
high
kein öffentlicher PoC bekannt
7.1
Quelle: nvd-v3
5.2 %
Niedrig — CVE gehört zu den unteren 10 % der heute bewerteten CVEs.
0.2 %
Niedrig — Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
Veröffentlicht
2026-09-07 09:05 UTC

Re-Analyse & Statuswechsel

Chronologie der NVD-Audit-Events für diese CVE — Reanalyses, CVSS-Updates, CPE-Diffs.

  1. CVE Modified2026-08-17 05:17 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Affected: Linux, LinuxLinux, Linux
  2. New CVE Received2026-07-25 10:17 UTC· 416baaa9-dc9f-4396-8d5f-8c081fb06d67
    • Affected: Linux, Linux
    • Description: In the Linux kernel, the following vulnerability has been resolved: usb: misc: usbio: bound bulk IN response length to the received transfer usbio_bulk_msg() copies bpkt_len = le16_to_cpu(bpkt->len) bytes out of the bulk IN buffer (usbio->rxbuf, allocated with size usbio->rxbuf_len) into the caller's buffer. bpkt_len is fully controlled by the device and is only checked against ibuf_len; ibuf_len in turn is checked against usbio->txbuf_len, not against rxbuf_len: if ((obuf_len > (usbio->txbuf_len - sizeof(*bpkt))) || (ibuf_len > (usbio->txbuf_len - sizeof(*bpkt)))) return -EMSGSIZE; txbuf_len and rxbuf_len are taken independently from the bulk OUT and bulk IN endpoint wMaxPacketSize in usbio_probe(). A malicious or malfunctioning device that advertises a large bulk OUT endpoint and a small bulk IN endpoint (e.g. by claiming one of the quirk-free IDs such as the Lattice NX33U, 0x2ac1:0x20cb) therefore makes ibuf_len, and hence the device-supplied bpkt_len, exceed rxbuf_len. memcpy() then reads up to txbuf_len - rxbuf_len bytes past the end of the rxbuf slab object. The over-read bytes are handed back to the i2c layer and on to user space through i2c-dev, disclosing adjacent slab memory; with KASAN this is reported as a slab-out-of-bounds read. The number of bytes actually received is already known: act equals the URB actual_length and is bounded by rxbuf_len. Reject any response that claims more payload than was received, mirroring the existing "act < sizeof(*bpkt)" check just above. The control path (usbio_ctrl_msg()) is not affected: it uses a single buffer (ctrlbuf) for both directions, so its analogous copy can never leave the allocation. Found by code review. The out-of-bounds read was confirmed under AddressSanitizer with a faithful userspace model of usbio_bulk_msg()'s receive path (an rxbuf_len-sized buffer, the same act/ibuf_len/bpkt_len checks and the memcpy). A USB raw-gadget + dummy_hcd reproducer is also available.
    • Reference: https://git.kernel.org/stable/c/48394f94211cf8fe0ea8604fc441633abf90fc94
    • Reference: https://git.kernel.org/stable/c/8c6314489550fa81d41723a0ff33f655b5b6c7b6

Betroffene Betriebssysteme

  • linux

    redhat / enterprise_linux10.0

  • linux

    redhat / enterprise_linux7.0

  • linux

    redhat / enterprise_linux8.0

  • linux

    redhat / enterprise_linux9.0

  • linux

    ubuntu / linux-aws-6.8jammy

  • linux

    ubuntu / linux-azureresolute

  • linux

    ubuntu / linux-azuretrusty

  • linux

    ubuntu / linux-azurexenial

  • linux

    ubuntu / linux-azure-4.15bionic

  • linux

    ubuntu / linux-azure-5.4bionic

  • linux

    ubuntu / linux-azure-fdenoble

  • linux

    ubuntu / linux-azure-fderesolute

  • linux

    ubuntu / linux-azure-fde-6.8jammy

  • linux

    ubuntu / linux-azure-fipsbionic

  • linux

    ubuntu / linux-azure-fipsfocal

  • linux

    ubuntu / linux-azure-fipsnoble

  • linux

    ubuntu / linux-fipsjammy

  • linux

    ubuntu / linux-gcp-7.0noble

  • linux

    ubuntu / linux-gkejammy

  • linux

    ubuntu / linux-nvidia-tegranoble

  • linux

    ubuntu / linux-raspinoble

  • linux

    ubuntu / linux-raspi-realtimenoble

  • linux

    linux / linux_kernel2.6.12

  • linux

    linux / linux_kernel2.6.15

Quellen & Referenzen

Verknüpfte CVEs

1392 weitere CVEs anzeigen
IDCVE-2026-64339
Linux kernel (GCP) vulnerabilities — CVE-2026-64339 | NEOSEC Intel