CVE-2026-31607

Aliases:UBUNTU-CVE-2026-31607DEBIAN-CVE-2026-31607CGA-4227-vw6r-wjqpCGA-5fpx-qf37-mfjpCGA-7643-w98m-pv65CGA-7gv8-h52p-648gCGA-82fx-j42g-3c82CGA-c77m-wx27-mv6xCGA-cw4m-wgvc-682rCGA-f32x-h5qh-j8w4CGA-jrm3-x324-qmmjCGA-vh8g-6wcg-w8xj
Modified
Published: 24 Apr 2026, 14:42
Last modified:21 Aug 2026, 12:13

Vulnerability Summary

Overall Risk (default)
high
70/100
CVSS Score
9.8 CRITICAL
v3.1 (cve.org)
EPSS Score
0.31% LOW
0% probability 0.00%
KEV
Not listed
Ransomware
No reports
Public exploits
None found
Dark Web
Not detected

Timeline

24 Apr 2026, 14:42
Published
Vulnerability first disclosed
21 Aug 2026, 12:13
Last Modified
Vulnerability information updated

Description

In the Linux kernel, the following vulnerability has been resolved: usbip: validate number_of_packets in usbip_pack_ret_submit() When a USB/IP client receives a RET_SUBMIT response, usbip_pack_ret_submit() unconditionally overwrites urb->number_of_packets from the network PDU. This value is subsequently used as the loop bound in usbip_recv_iso() and usbip_pad_iso() to iterate over urb->iso_frame_desc[], a flexible array whose size was fixed at URB allocation time based on the *original* number_of_packets from the CMD_SUBMIT. A malicious USB/IP server can set number_of_packets in the response to a value larger than what was originally submitted, causing a heap out-of-bounds write when usbip_recv_iso() writes to urb->iso_frame_desc[i] beyond the allocated region. KASAN confirmed this with kernel 7.0.0-rc5: BUG: KASAN: slab-out-of-bounds in usbip_recv_iso+0x46a/0x640 Write of size 4 at addr ffff888106351d40 by task vhci_rx/69 The buggy address is located 0 bytes to the right of allocated 320-byte region [ffff888106351c00, ffff888106351d40) The server side (stub_rx.c) and gadget side (vudc_rx.c) already validate number_of_packets in the CMD_SUBMIT path since commits c6688ef9f297 ("usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input") and b78d830f0049 ("usbip: fix vudc_rx: harden CMD_SUBMIT path to handle malicious input"). The server side validates against USBIP_MAX_ISO_PACKETS because no URB exists yet at that point. On the client side we have the original URB, so we can use the tighter bound: the response must not exceed the original number_of_packets. This mirrors the existing validation of actual_length against transfer_buffer_length in usbip_recv_xbuff(), which checks the response value against the original allocation size. Kelvin Mbogo's series ("usb: usbip: fix integer overflow in usbip_recv_iso()", v2) hardens the receive-side functions themselves; this patch complements that work by catching the bad value at its source -- in usbip_pack_ret_submit() before the overwrite -- and using the tighter per-URB allocation bound rather than the global USBIP_MAX_ISO_PACKETS limit. Fix this by checking rpdu->number_of_packets against urb->number_of_packets in usbip_pack_ret_submit() before the overwrite. On violation, clamp to zero so that usbip_recv_iso() and usbip_pad_iso() safely return early.

CVSS Metrics

  • v4.0HIGHScore: 8.7CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
  • v3.1CRITICALScore: 9.8CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

EPSS Trends

Current EPSS score: 0.31% Percentile: 24%

Techniques & Countermeasures

  • CWE-787Out-of-bounds Write

    The product writes data past the end, or before the beginning, of the intended buffer.

  • CWE-805Buffer Access with Incorrect Length Value

    The product uses a sequential operation to read or write a buffer, but it uses an incorrect length value that causes it to access memory that is outside of the bounds of the buffer.

Affected Systems

  • chainguardlinux-aws-6.12

    < 6.12.85-r0

  • chainguardlinux-aws-6.18

    < 6.18.31-r0

  • chainguardlinux-azure-6.18

    < 6.18.31-r0

  • chainguardlinux-gcp-6.12

    < 6.12.85-r0

  • chainguardlinux-gcp-6.18

    < 6.18.31-r0

  • chainguardlinux-qemu-6.12

    < 6.12.85-r0

  • chainguardlinux-qemu-6.18

    < 6.18.31-r0

  • chainguardlinux-qemu-6.18-bootc-boot-installed

    < 6.18.31-r0

  • chainguardlinux-vmware-6.12

    < 6.12.85-r0

  • chainguardlinux-vmware-6.18

    < 6.18.31-r0

  • debianlinux

    < 5.10.259-1 | < 6.1.176-1 | < 6.12.85-1 | < 6.19.14-1

  • debianlinux-6.1

    < 6.1.176-1~deb11u1

  • ubuntulinux

    all | < 3.13.0-214.265 | < 4.4.0-283.317 | < 4.15.0-253.265 | < 5.4.0-233.253 | < 5.15.0-185.195 | < 6.8.0-134.134 | < 6.17.0-40.40 | < 7.0.0-27.27

  • ubuntulinux-allwinner-5.19

    all

  • ubuntulinux-aws

    all | < 4.4.0-1156.162 | < 4.4.0-1194.209 | < 4.15.0-1194.207 | < 5.4.0-1161.172 | < 5.15.0-1111.118 | < 6.8.0-1060.63 | < 6.17.0-1019.19 | < 7.0.0-1008.8

  • ubuntulinux-aws-5.0

    all

  • ubuntulinux-aws-5.11

    all

  • ubuntulinux-aws-5.13

    all

  • ubuntulinux-aws-5.15

    < 5.15.0-1111.118~20.04.1

  • ubuntulinux-aws-5.19

    all

  • ubuntulinux-aws-5.3

    all

  • ubuntulinux-aws-5.4

    < 5.4.0-1161.172~18.04.1

  • ubuntulinux-aws-5.8

    all

  • ubuntulinux-aws-6.14

    all

  • ubuntulinux-aws-6.17

    < 6.17.0-1019.19~24.04.1

  • ubuntulinux-aws-6.2

    all

  • ubuntulinux-aws-6.5

    all

  • ubuntulinux-aws-6.8

    < 6.8.0-1060.63~22.04.1

  • ubuntulinux-aws-fips

    < 4.15.0-2132.138 | all | < 5.4.0-1161.172+fips1 | < 5.15.0-1111.118+fips1 | < 6.8.0-1060.63+fips1

  • ubuntulinux-aws-hwe

    all | < 4.15.0-1194.207~16.04.1

  • ubuntulinux-azure

    all | < 4.15.0-1205.220~14.04.1 | < 4.15.0-1204.219~16.04.1 | all | < 5.4.0-1166.172 | < 5.15.0-1116.125 | < 6.8.0-1063.71 | all | < 7.0.0-1010.10

  • ubuntulinux-azure-4.15

    < 4.15.0-1204.219

  • ubuntulinux-azure-5.11

    all

  • ubuntulinux-azure-5.13

    all

  • ubuntulinux-azure-5.15

    < 5.15.0-1116.125~20.04.1

  • ubuntulinux-azure-5.19

    all

  • ubuntulinux-azure-5.3

    all

  • ubuntulinux-azure-5.4

    < 5.4.0-1166.172~18.04.1

  • ubuntulinux-azure-5.8

    all

  • ubuntulinux-azure-6.11

    all

  • ubuntulinux-azure-6.14

    all

  • ubuntulinux-azure-6.17

    < 6.17.0-1021.21~24.04.1

  • ubuntulinux-azure-6.2

    all

  • ubuntulinux-azure-6.5

    all

  • ubuntulinux-azure-6.8

    < 6.8.0-1063.71~22.04.1

  • ubuntulinux-azure-edge

    all

  • ubuntulinux-azure-fde

    all | all | < 6.8.0-1062.69 | all | < 7.0.0-1009.9

  • ubuntulinux-azure-fde-5.15

    < 5.15.0-1116.125~20.04.1

  • ubuntulinux-azure-fde-5.19

    all

  • ubuntulinux-azure-fde-6.14

    all

Showing first 50 affected entries in server-rendered view.

References (68)