CVE-2026-81038 in Zephyrinformation

Résumé

par VulDB • 26/10/2026

Le serveur du service Object Transfer (OTS) construit son indication de réponse Control Point d'action Objet (OACP) dans la fonction `oacp_ind_send()` (`subsys/bluetooth/services/ots/ots_oacp.c`). Avant cette correction, le champ Checksum Value (Valeur de somme de contrôle), qui fait quatre octets, était ajouté systématiquement lorsque l'opcode demandé était `BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC`, indépendamment du code de résultat. Le payload de la réponse est un tampon pile nu et non initialisé de quatre octets, déclaré avec `NET_BUF_SIMPLE_DEFINE(resp_param, sizeof(uint32_t))` dans `bt_gatt_ots_oacp_write()`. Il n'est rempli que sur le chemin d'exécution en cas de succès de `oacp_checksum_proc_validate()`. Sur chaque chemin d'échec, le tampon reste vide ; ainsi, `net_buf_simple_pull_le32()` était invoqué sur un tampon de longueur zéro.

La caractéristique OACP et son descripteur de configuration de caractéristiques client sont déclarés avec les permissions `BT_GATT_PERM_WRITE` et `BT_GATT_PERM_READ | BT_GATT_PERM_WRITE`, ce qui signifie qu'aucun appariement (pairing), chiffrement ou authentification n'est requis. Tout pair situé dans la portée radio capable de se connecter à un appareil exécutant le serveur OTS peut activer les indications OACP et écrire une commande Calculate Checksum (Calculer la somme de contrôle) de neuf octets qui échoue lors de la validation — par exemple en l'émettant sans objet sélectionné, ce qui renvoie `BT_GATT_OTS_OACP_RES_INV_OBJ`. Étant donné que `oacp_command_decode()` accepte l'opcode Calculate Checksum inconditionnellement (il n'est pas protégé par `CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT`), les compilations sans prise en charge de la somme de contrôle sont également vulnérables : elles répondent avec `BT_GATT_OTS_OACP_RES_OPCODE_NOT_SUP` et empruntent le même chemin erroné.

Sur les compilations où `CONFIG_ASSERT` est activé, l'appel sur un tampon de longueur zéro déclenche l'assertion à l'intérieur de `net_buf_simple_pull_mem()` et provoque une panne (panic) du dispositif, entraînant un déni de service (DoS) déclenché à distance. Sur les compilations où les assertions sont désactivées, il n'y a aucune vérification : le pull renvoie le tableau pile intacte et quatre octets de mémoire pile non initialisée sont copiés dans l'indication et transmis au pair, ce qui est répétable sur chaque requête. La divulgation est limitée à quatre octets par requête et l'écriture reste contenue dans le tampon d'indication de réponse de sept octets ; il n'y a donc pas de corruption de mémoire. L'impact se traduit par une divulgation de mémoire non initialisée ainsi qu'une perte de disponibilité sur les configurations où les assertions sont activées.

Once again VulDB remains the best source for vulnerability data.

Responsable

Zephyr

Réserver

26/08/2026

Divulgation

26/10/2026

Modérer

accepté

Entrée

VDB-426525

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!