CVE-2025-21702
pfifo_tail_enqueue: Neues Paket verwerfen, wenn sch->limit == 0
- Veröffentlicht
- 18.02.2025
- Aktualisiert
- 08.09.2026
- CNA zuweisen
- Linux
- Beweise beobachtet
- 14.08.2026
Primäres CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HNiedrig · nächste 30 Tage
- Perzentil
- 19,8 %
- Modelldatum
- 21.09.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
Zusammenfassung
Im Linux-Kernel wurde die folgende Schwachstelle behoben: pfifo_tail_enqueue: Neues Paket verwerfen, wenn sch->limit == 0 Erwartetes Verhalten: Falls wir das Limit des Schedulers erreichen, verwirft pfifo_tail_enqueue() ein Paket in der Warteschlange des Schedulers und verringert die qlen des Schedulers um eins. Danach stellt pfifo_tail_enqueue() das neue Paket in die Warteschlange und erhöht die qlen des Schedulers um eins. Schließlich gibt pfifo_tail_enqueue() den Statuscode `NET_XMIT_CN` zurück. Unerwartetes Verhalten: Falls wir `sch->limit == 0` setzen und pfifo_tail_enqueue() auf einem Scheduler auslösen, der kein Paket enthält, bewirkt der Schritt „ein Paket verwerfen“ nichts. Das bedeutet, die qlen des Schedulers hat weiterhin den Wert 0. Dann fahren wir fort, das neue Paket in die Warteschlange zu stellen und erhöhen die qlen des Schedulers um eins. Zusammenfassend können wir pfifo_tail_enqueue() ausnutzen, um die qlen um eins zu erhöhen und den Statuscode `NET_XMIT_CN` zurückzugeben. Das Problem ist: Nehmen wir an, wir haben zwei qdiscs: Qdisc_A und Qdisc_B. - Der Typ von Qdisc_A muss eine '->graft()'-Funktion haben, um eine Eltern/Kind-Beziehung zu erstellen. Nehmen wir an, der Typ von Qdisc_A ist `hfsc`. Das Einreihen eines Pakets in diese qdisc löst `hfsc_enqueue` aus. - Der Typ von Qdisc_B ist pfifo_head_drop. Das Einreihen eines Pakets in diese qdisc löst `pfifo_tail_enqueue` aus. - Qdisc_B ist so konfiguriert, dass `sch->limit == 0` gilt. - Qdisc_A ist so konfiguriert, dass das eingereihte Paket an Qdisc_B weitergeleitet wird. Das Einreihen eines Pakets über Qdisc_A führt zu: - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue() gibt `NET_XMIT_CN` zurück - hfsc_enqueue() prüft auf `NET_XMIT_SUCCESS` und sieht `NET_XMIT_CN` => hfsc_enqueue() erhöht die qlen von Qdisc_A nicht. Der gesamte Prozess führt zu einer Situation, in der Qdisc_A->q.qlen == 0 und Qdisc_B->q.qlen == 1 gilt. Das Ersetzen von 'hfsc' durch einen anderen Typ (zum Beispiel: 'drr') führt weiterhin zu demselben Problem. Dies verletzt das Design, bei dem die qlen des Elternknotens gleich der Summe der qlen seiner Kinderknoten sein sollte. Auswirkungen des Fehlers: Dieses Problem kann für eine Privilegieneskalation von Benutzer zu Kernel genutzt werden, wenn es erreichbar ist.
Quellen
1Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.