CVE-2025-21702
pfifo_tail_enqueue : Supprimer le nouveau paquet lorsque sch->limit == 0
- Publié
- 18 févr. 2025
- Mise à jour
- 8 sept. 2026
- Attribution de CNA
- Linux
- Preuve observée
- 14 août 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HFaible · 30 prochains jours
- Percentile
- 19,8 %
- Date du modèle
- 21 sept. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Dans le noyau Linux, la vulnérabilité suivante a été résolue : pfifo_tail_enqueue : abandonner le nouveau paquet lorsque sch->limit == 0 Comportement attendu : si nous atteignons la limite du planificateur, pfifo_tail_enqueue() abandonnera un paquet dans la file du planificateur et diminuera qlen du planificateur de un. Ensuite, pfifo_tail_enqueue() met en file le nouveau paquet et augmente qlen du planificateur de un. Enfin, pfifo_tail_enqueue() renvoie le code de statut `NET_XMIT_CN`. Comportement étrange : si nous définissons `sch->limit == 0` et déclenchons pfifo_tail_enqueue() sur un planificateur qui n'a aucun paquet, l'étape « abandonner un paquet » ne fera rien. Cela signifie que qlen du planificateur a toujours une valeur égale à 0. Ensuite, nous continuons à mettre en file le nouveau paquet et augmentons qlen du planificateur de un. En résumé, nous pouvons exploiter pfifo_tail_enqueue() pour augmenter qlen de un et renvoyer le code de statut `NET_XMIT_CN`. Le problème est le suivant : disons que nous avons deux qdiscs : Qdisc_A et Qdisc_B. - Le type de Qdisc_A doit avoir une fonction '->graft()' pour créer la relation parent/enfant. Disons que le type de Qdisc_A est `hfsc`. Mettre un paquet en file sur ce qdisc déclenchera `hfsc_enqueue`. - Le type de Qdisc_B est pfifo_head_drop. Mettre un paquet en file sur ce qdisc déclenchera `pfifo_tail_enqueue`. - Qdisc_B est configuré pour avoir `sch->limit == 0`. - Qdisc_A est configuré pour router le paquet mis en file vers Qdisc_B. Mettre un paquet en file via Qdisc_A conduira à : - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue() renvoie `NET_XMIT_CN` - hfsc_enqueue() vérifie `NET_XMIT_SUCCESS` et voit `NET_XMIT_CN` => hfsc_enqueue() n'augmente pas qlen de Qdisc_A. L'ensemble du processus conduit à une situation où Qdisc_A->q.qlen == 0 et Qdisc_B->q.qlen == 1. Remplacer 'hfsc' par un autre type (par exemple : 'drr') conduit toujours au même problème. Cela viole la conception selon laquelle qlen du parent doit être égal à la somme des qlen de ses enfants. Impact du bogue : ce problème peut être utilisé pour une élévation de privilèges utilisateur->noyau lorsqu'il est accessible.
Sources
1Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.