Depuis plusieurs années, le langage de programmation C++ est critiqué pour ses failles de sécurité, notamment les erreurs de gestion de mémoire comme les débordements de tampon et les utilisations après libération. Face à ces défis, la communauté C++ a décidé de réagir avec une proposition : les extensions Safe C++.
Un besoin pressant de sécurité
La sécurité des logiciels est devenue une priorité pour les développeurs et les organisations du secteur public et privé. Des langages comme Rust, C#, et Go ont gagné en popularité grâce à leurs caractéristiques de sécurité mémoire intégrées. Cependant, le C++ reste un pilier dans le développement de systèmes performants et bas niveau. Pour répondre à cette demande croissante de sécurité, la communauté C++ a élaboré les extensions Safe C++.
Qu’est-ce que les extensions Safe C++ ?
Les extensions Safe C++ visent à introduire des fonctionnalités de sécurité mémoire dans le langage C++. Ces extensions incluent des mécanismes comme le vérificateur d’emprunt (borrow checker) pour prévenir les erreurs d’utilisation après libération et des analyses d’initialisation pour garantir la sécurité des types. Ces outils permettent aux développeurs d’écrire du code plus sûr sans sacrifier les performances et la flexibilité du C++.
Une collaboration significative
Le projet Safe C++ est le fruit d’une collaboration entre la C++ Alliance et des ingénieurs renommés comme Sean Baxter. Cette initiative marque une étape importante dans l’écosystème C++, en répondant aux critiques et en s’adaptant aux exigences de sécurité actuelles.
Vinnie Falco, président et directeur exécutif de l'Alliance C++, a déclaré :
« Je suis heureux d'annoncer que l'Alliance C++ a formé un partenariat avec Sean Baxter, un ingénieur de renom, pour développer la proposition Safe C++ Extensions.
« Il s'agit d'une proposition révolutionnaire qui ajoute des fonctionnalités de sécurité de la mémoire au langage de programmation C++.
« Cette collaboration marque une étape importante dans l'écosystème C++, car le besoin d'un code sûr n'a jamais été aussi pressant. Compte tenu de l'importance croissante de la sécurité et de la fiabilité des logiciels, les développeurs sont soumis à une pression de plus en plus forte pour adopter des pratiques de codage plus sûres. Les extensions Safe C++ visent à répondre à ce besoin critique en introduisant de nouvelles fonctionnalités qui empêchent les erreurs courantes liées à la mémoire.
« Nous sommes ravis de travailler avec Sean Baxter sur cette initiative cruciale. Les Safe C++ Extensions représentent une avancée majeure pour rendre le C++ plus sûr et plus efficace, tout en préservant les performances et la flexibilité du langage.
« La bibliothèque standard sécurisée est un élément clé de la proposition d'extensions C++ sécurisées. Cet ajout important à la bibliothèque fournira aux développeurs des implémentations robustes et sans danger pour la mémoire de structures de données et d'algorithmes essentiels. En intégrant ces composants dans la bibliothèque standard C++, nous pouvons nous assurer que le nouveau code est écrit en gardant à l'esprit la sécurité dès le départ.
« L'Alliance C++ et Sean Baxter sollicitent les réactions des développeurs, des chercheurs et des autres parties prenantes sur la proposition d'extensions C++ sûres. Ce processus de collaboration permettra d'affiner la portée du projet et de s'assurer qu'il répond aux besoins les plus urgents de l'écosystème C++ ».
S'assurer que le code est exempt de bogues liés à la sécurité de la mémoire
Cette collaboration arrive à point nommé car, depuis deux ans, les organisations des secteurs privé et public poussent les programmeurs à écrire de nouvelles applications et à réécrire les anciennes dans des langages à mémoire sûre tels que C#, Go, Java, Python et Swift, mais surtout Rust parce que c'est un langage de systèmes de bas niveau performant.
Après deux ans de coups de bâton sur la sécurité de la mémoire, la communauté C++ a publié une proposition visant à aider les développeurs à écrire un code moins vulnérable.
La proposition Safe C++ Extensions vise à résoudre le talon d'Achille du langage de programmation vulnérable, à savoir la difficulté de s'assurer que le code est exempt de bogues liés à la sécurité de la mémoire. « Il s'agit d'une proposition révolutionnaire qui ajoute des fonctions de sécurité de la mémoire au langage de programmation C++ », a déclaré jeudi Vinnie Falco, président et directeur exécutif de l'Alliance C++. « Cette collaboration marque une étape importante dans l'écosystème C++, car le besoin d'un code sûr n'a jamais été aussi pressant ».
L'ingénieur logiciel Alex Gaynor a soulevé la question en 2019, notant que la majorité des vulnérabilités graves dans les grandes bases de code proviennent de failles de sécurité de la mémoire telles que les débordements de mémoire tampon et l'utilisation après la libération. « Les données confirment, encore et encore, que lorsque les projets utilisent des langages peu sûrs pour la mémoire comme le C et le C++, ils sont accablés par une avalanche de vulnérabilités de sécurité qui en résultent », a-t-il écrit.
La sécurité de la mémoire est ensuite devenue un sujet de discussion courant dans les articles universitaires et les conférences techniques. En septembre 2022, Mark Russinovich, directeur technique de Microsoft Azure, a appelé à l'abandon de C et C++ et à l'adoption de Rust.
Quelques mois plus tard, la NSA a adopté une position similaire. En 2023, la sécurité de la mémoire est devenue un sujet courant, couvert par Consumer Reports.
Les personnes impliquées dans le C++ se sont mises sur la défensive
Il y a deux ans, en réponse à l'appel de M. Russinovich à se débarrasser de C/C++, le créateur de C++, Bjarne Stroustrup, a déclaré : « Nous pouvons désormais garantir une sécurité parfaite des types et de la mémoire dans ISO C++ ».
Cette déclaration a toutefois été accueillie avec un certain scepticisme. Josh Aas, cofondateur et directeur exécutif de l'Internet Security Research Group (ISRG), qui supervise une initiative de sécurité de la mémoire appelée Prossimo, a déclaré l'année dernière que s'il est théoriquement possible d'écrire du C++ sûr pour la mémoire, cela ne se produit pas dans le monde réel parce que le C++ n'a pas été conçu dès le départ pour la sécurité de la mémoire.
La proposition Safe C++ Extensions vise à répondre à cette critique et à satisfaire la demande du secteur public en matière de sécurité de la mémoire émanant de la NSA et des autres agences de renseignement « Five Eyes », de l'Agence américaine pour la cybersécurité et les infrastructures (CISA), de la Maison Blanche et de la DARPA.
En août, Gaynor est revenu sur le sujet de la sécurité des mémoires en soulignant que, s'il est logique d'essayer de rendre le C++ plus sûr, il doute de la mesure dans laquelle cela est possible.
« Il est clair, je pense, que des améliorations substantielles de la sécurité sont possibles pour le C++ », écrit-il. « En particulier, la résolution complète de la sécurité spatiale semble être à portée de main. Hélas, je pense qu'il est tout aussi clair que rendre le C++ aussi sûr que Swift, Go ou Rust n'est pas quelque chose que nous savons faire, et il ne semble pas probable que nous soyons capables de trouver une solution simple. »
Néanmoins, la proposition Safe C++ Extensions vise à essayer. Reconnaissant le chœur désormais assourdissant des appels à l'adoption de langages de programmation à mémoire sécurisée, les développeurs Sean Baxter, créateur du compilateur Circle, et Christian Mazakas, de l'Alliance C++, affirment que si Rust est le seul langage de programmation de niveau système populaire sans garbage collection qui offre une sécurité mémoire rigoureuse, la migration du code C++ vers Rust pose des problèmes.
« Rust manque de surcharge de fonction, de modèles, d'héritage et d'exceptions », expliquent-ils dans la proposition. « Le C++ n'a pas de traits, de relocalisation et de vérification des emprunts. Ces différences sont responsables d'un décalage d'impédance lors de l'interfaçage des deux langages. La plupart des générateurs de code pour les liaisons interlangages ne sont pas en mesure de représenter les caractéristiques d'un langage en termes de caractéristiques d'un autre langage ».
Bien que la DARPA tente de développer de meilleurs outils automatisés de conversion de C++ en Rust, Baxter et Mazakas affirment que dire aux développeurs C++ vétérans d'apprendre le Rust n'est pas une solution - un point qu'un mainteneur du noyau Linux axé sur le C a récemment soulevé.
« L'étrangeté de Rust pour les développeurs C++ de carrière, combinée à la friction des outils d'interopérabilité, rend difficile le renforcement des applications C++ par la réécriture des sections critiques en Rust », affirment-ils. « Pourquoi n'y a-t-il pas de solution directement dans le langage à la sécurité de la mémoire ? Pourquoi pas un Safe C++ ? »
L’avenir du C++
Avec l’introduction des extensions Safe C++, le C++ se positionne pour rester pertinent et compétitif face aux nouveaux langages de programmation. Cette évolution montre que le C++ peut s’adapter et évoluer pour répondre aux besoins modernes de sécurité et de fiabilité des logiciels.
En définitive, la communauté du C++ contre-attaque avec une proposition audacieuse qui pourrait bien redéfinir l’avenir du développement logiciel. Les extensions Safe C++ représentent une avancée majeure pour un langage qui continue de jouer un rôle crucial dans le monde de la programmation.
Sources : Safe C++ (1, 2), Alex Gaynor (1, 2), NSA, Maison Blanche
Et vous ?
Pensez-vous que les extensions Safe C++ peuvent réellement rivaliser avec les langages modernes comme Rust en termes de sécurité ? Pourquoi ou pourquoi pas ?
Quels sont, selon vous, les principaux défis que la communauté C++ devra surmonter pour adopter largement les extensions Safe C++ ?
Comment voyez-vous l’avenir du C++ avec l’introduction des extensions Safe C++ ? Cela pourrait-il changer votre perception du langage ?
Avez-vous déjà rencontré des problèmes de sécurité mémoire dans vos projets C++ ? Comment les avez-vous résolus ?
Quels autres aspects du C++ aimeriez-vous voir améliorés pour renforcer la sécurité et la fiabilité des logiciels ?
Pensez-vous que les entreprises adopteront rapidement les extensions Safe C++ ou resteront-elles prudentes face à ces nouvelles fonctionnalités ?
Comment comparez-vous les efforts de la communauté C++ pour améliorer la sécurité avec ceux d’autres communautés de langages de programmation ?
Vers un C++ plus sûr ? Avec les extensions Safe C++, la communauté veut répondre aux défis modernes de la sécurité des logiciels
Dans un contexte où plusieurs recommandent de le remplacer par des alternatives
Vers un C++ plus sûr ? Avec les extensions Safe C++, la communauté veut répondre aux défis modernes de la sécurité des logiciels
Dans un contexte où plusieurs recommandent de le remplacer par des alternatives
Le , par Stéphane le calme
Une erreur dans cette actualité ? Signalez-nous-la !