Vendredi 19 decembre 2008
Je suis tombé sur un article qui soulève un point de sécurité intéressant.
Une librairie (ou bibliothèque), en informatique, est un petit bout de programme utilisé par d'autres programmes. Des exemples ?
En général ces bouts de programme sont installés au niveau du système d'exploitation et partagés entre tous les programmes: Par exemple un programme qui a besoin de lire un fichier PNG utilisera la librairie libpng fournie par le système d'exploitation.
Or bien souvent, les logiciels propriétaires - au lieu d'utiliser la librairie du système - vont inclure une copie du code de cette librairie directement dans leur programme. Ils ne font alors plus appel à la librairie du système. Pourquoi ? Peut-être pour ne pas être dépendant de la version installée dans le système. Plus probablement pour masquer le fait qu'ils utilisent une librairie opensource (vous saviez que zlib est massivement utilisée sous Windows ?). Cela a 2 conséquences.
La première, c'est un gaspillage de place: Au lieu que la librairie soit chargée une seule fois en mémoire et utilisée par plusieurs programmes, chaque programme a sa propre copie. La consommation mémoire est donc augmentée.
La seconde est plus grave: Les librairies ont parfois des failles de sécurité. Par exemple, il y a déjà eu des failles dans libpng: En lui donnant un fichier PNG spécialement malformé, on pouvait la faire planter, et donc faire planter tous les logiciels qui l'utilisent, conduisant à des failles de sécurité. Quand une faille est découverte dans une librairie, il suffit de mettre cette librairie à jour au niveau du système, et cela corrige la faille dans tous les logiciels utilisant cette librairie. C'est le cas majoritaire dans le monde du logiciel libre
Mais un programme qui utilise sa propre copie de la librairie ne profitera pas de cette mise à jour, et continuera à utiliser son ancienne copie de la librairie contenant la faille de sécurité.
N'ayant pas les sources (logiciels à sources fermés), il est quasi impossible de détecter les failles dans ces logiciels, encore moins de les mettre à jour. Vous dépendez alors de l'efficacité et du suivi de l'éditeur de chaque logiciel.
Sachant qu'une librairie peut utiliser une autre librairie qui peut utiliser une autre librairie... le niveau d'imbrication peut être important, et le développeur d'un logiciel peut ignorer qu'il est en train d'utiliser une vieille librairie.
Combien de logiciels présents sur votre ordinateur incluent de vieux bouts de librairies bugués ? Impossible à évaluer. C'est aussi un des avantages de l'opensource: On détecte plus rapidement l'utilisation de librairies dangereuses, puisque le code source indique directement les noms des librairies utilisées.
(Notez qu'il est possible de faire ce genre d'inclusion aussi dans des logiciels opensource, même si ce n'est pas la pratique la plus répandue.)
Petit jeu: Recherchez tous les fichiers de C:\Program Files contenant le mot "Gailly" (nom de l'auteur de zlib). Vous verrez, c'est instructif. Rien que pour Acrobat Reader 7, j'en compte 5 copies.