Introduction

Les agents d'IA sont de plus en plus efficaces pour détecter les vulnérabilités dans les systèmes logiciels à grande échelle. Cependant, la vérification formelle est souvent présentée comme une solution pour garantir la sécurité et la stabilité des logiciels. Un récent exemple avec Lean, un système de vérification formelle, a montré que même avec une vérification complète, des bugs peuvent encore être présents.

Contexte Technique

Lean a été utilisé pour vérifier une implementation de zlib, appelée lean-zip. Les développeurs de Lean ont affirmé que leur système était entièrement exempt de bugs d'implémentation. Cependant, après avoir utilisé un agent de fuzzing appelé Claude, plusieurs bugs ont été découverts, dont un débordement de tampon dans le runtime de Lean et une faille de déni de service dans le parseur d'archives de lean-zip.

La vérification formelle de Lean a porté sur les fonctions de compression et de décompression, mais pas sur le parseur d'archives. Le bug de débordement de tampon a été trouvé dans la fonction lean_alloc_sarray du runtime de Lean, qui alloue des tableaux scalaires. Lorsque la capacité du tableau est proche de la valeur maximale possible, l'addition de la taille de l'objet et de la capacité du tableau peut déborder, entraînant une allocation de mémoire insuffisante.

Analyse et Implications

Ces découvertes montrent que même avec une vérification formelle complète, des bugs peuvent encore être présents dans les logiciels. La vérification formelle ne peut pas garantir une sécurité totale, car elle ne peut pas couvrir tous les aspects d'un système logiciel. De plus, les bugs peuvent être introduits par des composants externes, tels que des bibliothèques ou des runtime.

Les implications de ces découvertes sont importantes pour l'industrie logicielle. Elles soulignent la nécessité de combiner la vérification formelle avec d'autres méthodes de test et de validation, telles que le fuzzing et les tests de sécurité, pour garantir la sécurité et la stabilité des logiciels.

Perspective

À l'avenir, il sera important de surveiller les limites de la vérification formelle et de développer des méthodes pour combiner la vérification formelle avec d'autres approches de test et de validation. De plus, il sera essentiel de prendre en compte les interactions entre les différents composants d'un système logiciel pour garantir la sécurité et la stabilité globales.

Les développeurs de logiciels doivent être conscients des limites de la vérification formelle et ne pas se reposer uniquement sur cette méthode pour garantir la sécurité de leurs logiciels. Une approche plus globale, combinant la vérification formelle avec d'autres méthodes de test et de validation, sera nécessaire pour garantir la sécurité et la stabilité des logiciels.