pt
Moulé à la louche depuis 1999
Les trucs qui m'énervent... et je vais pas prendre de pincettes
Internet, informatique, logiciel libre, économie, politique, vie courante et tout le reste...

Sécurité: les librairies posent aussi problème

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 ?

  • La librairie zlib est utilisé par de nombreux programmes pour compresser/décompresser les données (Firefox, zip, Acrobat Reader, Gimp, Java, Microsoft Office, etc.)
  • La librairie libpng permet aux programmes de lire et écrire facilement les fichiers PNG, sans avoir à programmer eux-mêmes cette fonctionnalité.
  • Ou encore, la librairie OpenSSL est utilisée pour sécuriser les communications (HTTPS dans Firefox et IE, ssh, etc.).

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


Même avec la librairie zlib du système à jour, vous n'êtes pas à l'abris
d'un programme qui utiliserait sa propre copie d'une ancienne version.


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.

Voir tous les billets