CVE-2026-98550 in Linuxinformation

Résumé

par VulDB • 19/10/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

tipc : rejeter les messages GRP_ACK_MSG invalides et inattendus pour prévenir un débordement par défaut (underflow) de bc_ackers

Le commit 48a5fe38772b (« tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG ») rejetait les accusés de réception (ACKs) dupliqués ou périmés dans `tipc_group_proto_rcv()` en retournant prématurément lorsque la condition `less_eq(acked, m->bc_acked)` était vraie.

Cependant, cette vérification reste incomplète à deux égards :

1. Lorsque `grp->bc_ackers` est égal à zéro (par exemple sur un groupe inactif, lorsque les accusés de réception replicast n'ont pas été demandés, ou après que tous les membres attendus ont déjà acquitté), un message GRP_ACK_MSG inattendu avec une valeur `acked > m->bc_acked` passe la condition `less_eq()` et décrémente sans condition `grp->bc_ackers`. Comme `bc_ackers` est un entier non signé sur 16 bits (u16), cela provoque un débordement par défaut jusqu'à 65535, entraînant une congestion permanente signalée par `tipc_group_bc_cong()` et bloquant toutes les futures diffusions de groupe sur la socket.

2. Pendant un tour de diffusion actif (`grp->bc_ackers > 0`), l'émetteur transmet le paquet S et incrémente `grp->bc_snd_nxt` à `S + 1`. Les récepteurs incrémentent leur compteur attendu à `S + 1` après avoir consommé le paquet S, de sorte que la seule valeur ACK valide pour le tour en cours est strictement `acked == grp->bc_snd_nxt`.

Cependant, `tipc_group_update_bc_members()` initialise le champ `m->bc_acked` de chaque membre à `prev = grp->bc_snd_nxt - 1` (soit S - 1 avant l'incrémentation). Cela laisse un écart de séquence de 2 valeurs (de S - 1 à S + 1) dans l'espace des séquences. Un accusé de réception entrant n'est donc ni rejeté comme dupliqué, ni empêché de décrémenter `grp->bc_ackers` si une valeur inattendue ou périmée (telle que S) est reçue. Un membre envoyant un ACK avec la valeur `acked = S`, suivi d'un ACK avec `acked = S + 1`, pourrait ainsi décrémenter `grp->bc_ackers` deux fois au cours du même tour, vidant prématurément `bc_ackers` ou provoquant son débordement par défaut.

Correction apportée en : - Détruisant immédiatement le message GRP_ACK_MSG si `grp->bc_ackers` est égal à zéro. - Exigeant que la condition `acked == grp->bc_snd_nxt` soit respectée et rejetant les doublés où `m->bc_acked == acked`. Les tours de diffusion replicast étant strictement séquentiels, seul `grp->bc_snd_nxt` peut être acquitté, et chaque membre ne peut effectuer qu'une seule opération d'acquittement par tour.

Notez qu'un problème préexistant connexe dans `tipc_group_delete_member()` (où la décrémentation de `grp->bc_ackers` à zéro lors du départ d'un membre ne restaure pas *grp->open ni ne déclenche un réveil de socket) sera traité dans un correctif séparé.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsable

Linux

Réserver

25/09/2026

Divulgation

18/10/2026

Modérer

accepté

Entrée

VDB-422049

EPSS

0.00210

KEV

non

Activités

très faible

Sources

Want to know what is going to be exploited?

We predict KEV entries!