La Cybersecurity and Infrastructure Security Agency (CISA) des États-Unis a publié des recherches sur 172 projets open source clés et sur leur sensibilité aux failles de mémoire.

Le rapport, cosigné par la CISA, le Federal Bureau of Investigation( FBI), ainsi que des organisations australiennes (ASD, ACSC) et canadiennes (CCC), fait suite à la « Case for Memory Safe Roadmaps » publiée en décembre 2023, visant à sensibiliser à l’importance du code de sécurité de la mémoire.

Sécurité de la mémoire
Les langages sans danger pour la mémoire sont des langages de programmation conçus pour empêcher les erreurs courantes liées à la mémoire telles que les débordements de mémoire tampon, l’utilisation après libération et d’autres types de corruption de la mémoire.

Ils y parviennent en gérant la mémoire automatiquement au lieu de compter sur le programmeur pour implémenter des mécanismes sûrs d’allocation et de désallocation de la mémoire.

Un exemple moderne d’un système de langage sûr est le vérificateur d’emprunt de Rust, qui élimine les courses de données. D’autres langages comme Golang, Java, C# et Python gèrent la mémoire via le garbage collection, récupérant automatiquement la mémoire libérée pour empêcher l’exploitation.

Les langages non sécurisés pour la mémoire sont ceux qui ne fournissent pas de mécanismes de gestion de la mémoire intégrés, ce qui alourdit la responsabilité du développeur et augmente la probabilité d’erreurs. Des exemples de tels cas sont C, C++, Objective-C, Assembly, Cython et D.

Code open source largement utilisé dangereux
Le rapport présente des recherches examinant 172 projets open source largement déployés, constatant que plus de la moitié contiennent du code dangereux pour la mémoire.

Les principales constatations présentées dans le rapport sont résumées comme suit:

  • 52% des projets open source critiques analysés contiennent du code écrit dans des langages non sécurisés en mémoire.
  • 55% du total des lignes de code (LoC) de ces projets sont écrites dans des langages non sécurisés en mémoire.
  • Les projets les plus importants sont écrits de manière disproportionnée dans des langages non sécurisés en mémoire.
  • Sur les dix plus grands projets par total LoC, chacun a une proportion de LoC non sécurisés pour la mémoire supérieure à 26%.
  • La proportion médiane de verrouillage non sécurisé de la mémoire dans ces grands projets est de 62,5%, avec quatre projets dépassant 94%.
  • Même les projets écrits dans des langages sûrs pour la mémoire dépendent souvent de composants écrits dans des langages dangereux pour la mémoire.

Quelques exemples notables de l’ensemble examiné sont Linux (rapport de code dangereux 95%), Tor (rapport de code dangereux 93%), Chromium (rapport dangereux 51%), serveur MySQL (rapport dangereux 84%), glibc (rapport 85%), Redis (rapport 85%), SystemD (65%) et Electron (47%).

Résumé des constatations

CISA explique que les développeurs de logiciels sont confrontés à de multiples défis qui les obligent souvent à utiliser des langages non sécurisés en mémoire, tels que des contraintes de ressources et des exigences de performances.

Cela est particulièrement vrai lors de la mise en œuvre de fonctionnalités de bas niveau telles que la mise en réseau, la cryptographie et les fonctions du système d’exploitation.

« Nous avons observé que de nombreux projets open source critiques sont partiellement écrits dans des langages non sécurisés en mémoire et une analyse limitée des dépendances indique que les projets héritent du code écrit dans des langages non sécurisés en mémoire via des dépendances », explique CISA dans le rapport.

« Lorsque les contraintes de performances et de ressources sont des facteurs critiques, nous avons constaté et prévoyons l’utilisation continue de langages non sécurisés pour la mémoire. »

L’agence souligne également le problème des développeurs désactivant les fonctionnalités de sécurité de la mémoire, soit par erreur, soit volontairement, pour répondre à des exigences spécifiques, ce qui entraîne des risques même lors de l’utilisation de blocs de construction théoriquement plus sûrs.

En fin de compte, CISA recommande aux développeurs de logiciels d’écrire du nouveau code dans des langages sûrs pour la mémoire tels que Rust, Java et GO et de transférer les projets existants, en particulier les composants critiques, vers ces langages.

De plus, il est recommandé de suivre des pratiques de codage sûres, de gérer et d’auditer soigneusement les dépendances et d’effectuer des tests continus, y compris des analyses statiques, des analyses dynamiques et des tests de fuzz, pour détecter et résoudre les problèmes de sécurité de la mémoire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *