CVE-2026-74677 in Linux
Zusammenfassung
von VulDB • 23.08.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net: usb: ipheth: Use-After-Free (UAF) von carrier_work bei Trennung beheben
ipheth_sndbulk_callback() stellt die Carrier-Prüfungsarbeit (carrier-check work) bei jedem nicht-null URB-Status wieder in den Wartezustand:
else schedule_delayed_work(&dev->carrier_work, 0);
Dies ist jedoch nicht an den Zustand der Schnittstelle gebunden. Daher kann die Arbeit erneut aktiviert werden, nachdem ipheth_close() sie bereits geleert hat, und bleibt aktiviert, bis das netdev, dessen privater Bereich es enthält, freigegeben wird.
Beim Abziehen mit einem laufenden TX-URB leert ipheth_disconnect() die Arbeit über unregister_netdev() -> ipheth_close() -> cancel_delayed_work_sync(), und erst danach werden ipheth_kill_urbs() aufgerufen. usb_kill_urb() beendet das laufende TX-URB mit -ENOENT, sodass ipheth_sndbulk_callback() nach dem Leeren ausgeführt wird und carrier_work erneut aktiviert.
Die gleiche Beendigung aktiviert die Arbeit auch neu, wenn die Schnittstelle nur heruntergefahren wird, während ein TX-URB im Flug ist, und ipheth_carrier_check_work() stellt sich dann einmal pro Sekunde wieder in die Warteschlange. unregister_netdev() ruft bei einer bereits abgeschalteten Schnittstelle kein ipheth_close() auf, sodass beim späteren Abziehen ebenfalls nichts sie leert.
In beiden Fällen wird free_netdev() das netdev freigegeben, während carrier_work noch aussteht, und ipheth_carrier_check_work() dereferenziert daraufhin freigegebenen Speicher (Use-After-Free).
Bindung der Arbeit an den Schnittstellenzustand statt dem Abschlussereignis nachzulaufen: Deaktivieren in ipheth_close() und Aktivieren in ipheth_open(), sodass ein schedule_delayed_work() aus der URB-Abschlussbehandlung immer dann eine No-Op ist, wenn die Schnittstelle nicht aktiviert ist. disable_delayed_work_sync() wartet zudem auf eine laufende Instanz, wodurch es cancel_delayed_work_sync(), das es ersetzt, vollständig ablöst. Die Arbeit wird in ipheth_probe() zunächst deaktiviert gestartet, sodass sich die Aktivierungs-/Deaktivierungszählungen ab dem ersten Öffnen ausgleichen.
Reproduziert unter KASAN auf linux-next (next-20260731) mit dummy_hcd und raw-gadget als Ersatz für das Gerät, wobei der zweite Pfad oben getriggert wurde (die Schnittstelle ist bereits heruntergefahren, daher ruft unregister_netdev() kein ipheth_close() auf): 15 von 15 unpatcheten Starts meldeten ein slab-use-after-free in __run_timers(), freigegeben durch ipheth_disconnect() und neu aktiviert aus ipheth_sndbulk_callback() über queue_delayed_work_on(). Derselbe Trigger auf einem Kernel, der sich nur durch diesen Patch unterscheidet, meldete 0 von 15, und die Carrier-Prüfung funktioniert weiterhin korrekt über Open/Close-Zyklen.
Der Reproducer benötigt ein angeschlossenes USB-Gerät, das das Leeren von Bulk OUT stoppt, sowie einen Link-Down und Abzug, ausgeführt als root. Es handelt sich nicht um eine Überschreitung der Privilegiengrenze (Privilege Boundary Crossing), und es wurde keine Exploit-Primitive entwickelt.
Gefunden von 0sec (https://0sec.ai).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.