Les chercheurs de la société NCC Group les résultats de l'audit d'un projet libre , un système d'exploitation temps réel (RTOS) destiné à équiper des dispositifs conformes au concept d'« Internet des objets » (IoT). L'audit a révélé dans Zephyr et 1 vulnérabilité dans MCUboot. Le développement de Zephyr est réalisé avec la participation d'Intel.
Au total, 6 vulnérabilités ont été identifiées dans la pile réseau, 4 dans le noyau, 2 dans le shell, 5 dans les gestionnaires d'appels système, 5 dans la sous-système USB et 3 dans le mécanisme de mise à jour du firmware. Deux problèmes ont été classés comme critiques, deux comme élevés, 9 comme modérés, 9 comme faibles et 4 comme à prendre en considération. Les problèmes critiques concernent la pile IPv4 et le parseur MQTT, tandis que les problèmes élevés impliquent les pilotes de stockage de masse USB et USB DFU. Au moment de la divulgation, des correctifs n'avaient été préparés que pour les 15 vulnérabilités les plus critiques, laissant en attente les problèmes pouvant provoquer des déni de service ou liés aux faiblesses des mécanismes de sécurité supplémentaires du noyau.
Dans la pile IPv4 de la plateforme, une vulnérabilité exploitable à distance a été identifiée, provoquant une corruption de la mémoire lors du traitement de paquets ICMP modifiés d'une certaine manière. Un autre problème grave a été trouvé dans le parseur du protocole MQTT, causé par un manque de vérification adéquate de la longueur des champs d'en-tête, ce qui peut conduire à une exécution de code à distance. Des problèmes moins graves, entraînant des dénis de service, ont été trouvés dans la pile IPv6 et l'implémentation du protocole CoAP.
Les autres problèmes peuvent être exploités localement pour provoquer un déni de service ou exécuter du code au niveau du noyau. La plupart de ces vulnérabilités sont liées à l'absence de vérifications adéquates des arguments des appels système, ce qui peut conduire à des écritures et lectures arbitraires dans les zones mémoires du noyau. Les problèmes concernent également directement le code traitant les appels système : des appels avec un numéro négatif peuvent entraîner un dépassement d'entier. Des problèmes ont également été identifiés dans l'implémentation de la protection ASLR (randomisation de l'espace d'adresses) et le mécanisme de mise en place de canaris dans la pile, rendant ces mécanismes inefficaces.
De nombreux problèmes concernent la pile USB et les pilotes spécifiques. Par exemple, un problème dans le stockage de masse USB permet de provoquer un débordement de mémoire tampon et d'exécuter du code au niveau du noyau lorsqu'un dispositif est connecté à un hôte USB contrôlé par un attaquant. Une vulnérabilité dans USB DFU, le pilote pour le chargement d'un nouveau firmware via USB, permet de télécharger une image de firmware modifiée dans la mémoire Flash interne du microcontrôleur sans utiliser de cryptage et en contournant le mode de démarrage sécurisé avec vérification des composants par une signature numérique. En outre, le code du chargeur de démarrage ouvert a été étudié. , où une vulnérabilité non dangereuse a été trouvée,
qui peut conduire à un débordement de mémoire tampon lors de l'utilisation du protocole SMP (Simple Management Protocol) via UART.
Rappelons que dans Zephyr, tous les processus disposent d'un seul espace d'adresses virtuel global partagé (SASOS, Single Address Space Operating System). Le code spécifique aux applications est combiné avec un noyau adapté à l'application spécifique, formant ainsi un fichier exécutable monolithique pour le chargement et l'exécution sur du matériel particulier. Toutes les ressources système sont définies à l'étape de compilation, ce qui réduit la taille du code et augmente les performances. Seules les fonctionnalités du noyau requises pour l'exécution de l'application peuvent être incluses dans l'image système.
Il est remarquable que parmi les principales qualités de Zephyr le développement prend en compte la sécurité. , que toutes les étapes du développement passent par des phases obligatoires de vérification de la sécurité du code : tests de fuzzing, analyse statique, tests de pénétration, révision du code, analyse de l'injection de backdoors et modélisation des menaces.
Source : opennet.ru
