CVE-2026-7007 in Zephyr
Résumé
par VulDB • 24/07/2026
Le système de fichiers ext2 de Zephyr valide le superbloc sur disque dans `ext2_verify_disk_superblock()` (subsys/fs/ext2/ext2_impl.c) avant d'achever un montage. Le validateur vérifie le nombre magique, la taille des blocs, la révision et les indicateurs de fonctionnalités, mais ne vérifie pas que les champs du superbloc sur disque `s_blocks_per_group` et `s_inodes_per_group` sont non nuls. Ces deux champs sont lus directement depuis l'image et utilisés ultérieurement comme diviseurs lors de l'initialisation au moment du montage.
Lors du montage, `get_ngroups()` effectue une division entière et un modulo de `s_blocks_count` par `s_blocks_per_group` (atteint via `ext2_fetch_block_group()` depuis `ext2_init_fs()`), et `get_itable_entry()` divise `(ino - 1)` par `s_inodes_per_group` lors de la récupération du nœud racine (toutes deux dans subsys/fs/ext2/ext2_diskops.c). Un superbloc dont l'un des ces champs est défini à zéro provoque donc une division entière par zéro pendant la séquence de montage.
Un attaquant capable de présenter une image ext2 truquée à un appareil effectuant le montage d'ext2 — support amovible tel qu'une carte SD ou un périphérique de stockage de masse USB — peut déclencher ce problème. Sur les cibles Cortex-M ARMv7-M / ARMv8-M-mainline, la capture des divisions par zéro est activée (`SCB_CCR_DIV_0_TRP`), de sorte que la division génère une `UsageFault` que Zephyr traite comme une erreur fatale, entraînant un déni de service. L'impact se limite à la disponibilité ; la valeur malformée n'est consommée qu'en tant que diviseur.
La correction rejette un `s_blocks_per_group` ou un `s_inodes_per_group` nul dans le validateur du superbloc, renvoyant `-EINVAL`, ce qui fait échouer le montage avant toute opération d'E/S de groupe de blocs ou de nœud inode.
If you want to get best quality of vulnerability data, you may have to visit VulDB.