Le chasseur de bogues IA de Microsoft découvre une faille dans Rust qui n’a pas été détectée pendant près de 11 ans

Lucas Morel

if ( !emtpy($headline_subheadline ) ) : ?>

FORGE Lab a également identifié des failles de sécurité de la mémoire dans la version stable de Rust, notamment un problème qui pourrait amener les applications à accéder à la mémoire libérée.

endif; ?>

Microsoft researchers have uncovered a memory-safety bug in Rust’s standard library that had gone undetected for nearly 11 years, alongside other flaws that can trigger undefined behavior even in applications written entirely in safe Rust. Deux des découvertes affectent Rust stable, y compris un problème distinct qui pourrait amener les applications à accéder à la mémoire libérée.

Le bug vieux de près de 11 ans concerne la fonction process::exit de Rust. Microsoft’s FORGE Lab researchers found that calling the function from a child thread could cause the runtime to remove the main thread’s alternate signal stack while it was still running. Si le thread principal subissait par la suite un débordement de pile, le système d’exploitation pourrait ne pas être en mesure de fournir le signal correctement, ce qui entraînerait une erreur de segmentation au lieu de la gestion prévue du débordement de pile par Rust.

« Le bug process::exit signal stack était dans la bibliothèque standard depuis près de 11 ans », ont écrit les chercheurs dans un article de blog. Microsoft said the researchers found no reliable exploitation path under the conditions they examined and assessed practical exploitation as unlikely.

La recherche a utilisé Hyenas, le système d’analyse des vulnérabilités alimenté par l’IA de FORGE Lab, pour enquêter sur le code dangereux dans la bibliothèque standard de Rust. Hyenas est la version de recherche du laboratoire du nom de code MDASH, le système agentique de découverte de vulnérabilités de Microsoft.

Microsoft a déclaré que certains bugs avaient été découverts avec l’aide de Hyenas. Les chercheurs ont ensuite examiné le code sous-jacent, reproduit les problèmes, évalué leur impact sur la sécurité et les ont signalés aux responsables de Rust.

Microsoft a déclaré que le risque pratique est limité. Chaque faille nécessite des conditions inhabituelles pour se déclencher, et un bug dans la bibliothèque standard ne devient « une vulnérabilité sérieuse que si un programme réel atteint l’API de cette manière », ont écrit les chercheurs.

Un code dangereux remet en question les garanties de sécurité de Rust

Le modèle de propriété et le système de types de Rust sont conçus pour éviter les problèmes de sécurité de la mémoire généralement associés aux langages tels que C et C++. Cependant, sa bibliothèque standard s’appuie en interne sur du code non sécurisé pour les opérations que le compilateur ne peut pas vérifier.

Des composants tels que Vec et String utilisent ces opérations mais les exposent via des API sécurisées. Microsoft a déclaré que ces API doivent répondre à une exigence stricte de solidité : « peu importe la sécurité avec laquelle le code l’utilise, il doit être impossible de déclencher un comportement indéfini ».

Microsoft a regroupé les résultats en trois catégories : le code dangereux qui suppose que les opérations ne paniqueront pas, le code qui fait confiance aux implémentations fournies par l’utilisateur pour se comporter correctement et le code qui fait des hypothèses incorrectes sur le système sous-jacent.

Le premier impliquait un problème de sécurité panique dans l’implémentation de MapWindows :: clone de Rust. La fonction a créé un tampon avant d’initialiser complètement son contenu, puis a appelé une opération de clonage fournie par l’utilisateur pour le remplir. If that operation triggered a panic, Rust’s unwinding mechanism could invoke the buffer’s destructor, which would attempt to access uninitialized memory. Microsoft a déclaré que le correctif signalé empêche la destruction du tampon partiellement initialisé avant la fin de l’initialisation.

Une autre découverte impliquait str::replace. Les chercheurs ont découvert que la fonction pouvait faire une hypothèse incorrecte concernant une implémentation personnalisée du trait Pattern nocturne. A custom implementation could supply a non-ASCII byte where the code expected an ASCII character, causing the replacement operation to produce invalid UTF-8 data. Les opérations de chaîne ultérieures pourraient alors déclencher un comportement indéfini, a déclaré Microsoft.

Les bugs au niveau du système affectent la stabilité de Rust

Microsoft a indiqué que les deux premières catégories de faiblesses étaient déjà étudiées en 2021 grâce à Rudra, un analyseur statique développé par des membres de l’équipe de recherche. La bibliothèque standard avait également résolu des problèmes de sécurité anti-panique dès 2015, mais des faiblesses similaires continuent d’apparaître dans ses implémentations.

La troisième catégorie implique les interactions entre Rust et les systèmes d’exploitation sous-jacents et les bibliothèques C. Besides the process::exit issue, researchers identified a problem in Rust’s CommandExt::exec functionality involving the process-wide environment variable array.

Microsoft found that the function could modify this shared state while holding a read lock, potentially allowing other threads to access inconsistent data. Dans certaines conditions, des opérations simultanées peuvent quitter le pointeur d’environnement faisant référence à la mémoire libérée.

Microsoft a déclaré que les résultats de process::exit et de CommandExt::exec affectent la stabilité de Rust. Un correctif proposé pour le problème des variables d’environnement, qui évite de modifier le tableau partagé en appelant directement execve, était en cours d’examen lors de la publication du blog.

Deux problèmes signalés par l’équipe de Microsoft restaient ouverts au moment de la publication. Le blog discute également des rapports connexes d’autres chercheurs et des correctifs encore en cours d’examen.

Les résultats alimentent les produits de sécurité de Microsoft

Microsoft a déclaré que les résultats de la recherche pourraient également alimenter Microsoft Perception, son système de sécurité multi-agents, dans lequel des agents spécialisés travaillent sur des flux de sécurité plus larges. Cela aiderait donc l’entreprise à améliorer le développement de MDASH, qui introduit la découverte agentique de vulnérabilités dans Microsoft Defender.

Intelligence artificielleVulnérabilitésSécuritéSécurité des codes