Les dangers de la sérialisation avec Java

Dans vos applications que vous développez, il y a surement une partie de votre code qui utilise la sérialisation. Framework et librairies l'utilisent parfois, donc même si vous ne l'utilisez pas, cela peut tout de même vous concerner.

La sérialisation : Qu'est-ce que c'est

C'est en quelque sorte la sauvegarde d'un objet Java qui pourra être réutilisée par un autre programme Java qui possède la même classe. Cette sauvegarde peut se faire sur le disque ou bien transmise sur les réseaux. Elle a été introduit en 1997 (JDK 1.1) et donc elle est massivement utilisée notamment par Apache Commons Collections, Jboss et beaucoup d'autres.

Apache Commons est l'une des librairies les plus téléchargées sur Maven.

Le problème

Un objet malveillant peut être injecté dans le programme. Une fois que l'objet est lu, c'est trop tard, les objets ont déjà été instanciés et sont présents sur le serveur.

Le problème, c'est que depuis 1997 les failles de sécurité se sont développés jusqu'à atteindre un seuil critique. 1/3 voire même peut-être la moitié des failles de sécurité proviendrait de la sérialisation. L'architecte en chef de la plateforme Java, Mark Reinhold a même qualifié la sérialisation « d'horrible erreur ».

Oracle prévoit, à long terme, de supprimer la sérialisation et de la remplacer un petit framework avec la possibilité d'utiliser XML ou JSON.

Solutions possibles

La première solution est d'utiliser le XML ou le JSON pour sérialiser les objets. Ces fichiers sont stockés sous la forme de texte et non instanciés. Donc on peut vérifier ce qu'ils contiennent avant d'entreprendre des manipulations. C'est aussi une bonne manière de communiquer entre deux langages différents. Cependant, le fichier doit être vérifié comme on vérifierait n'importe quelles données entrées par un utilisateur.

La deuxième solution est de continuer d'utiliser la sérialisation qu'offre Java en utilisant des filtres de sérialisation pour éviter l'injection d'objets malveillants et limiter la sérialisation qu'à certaines classes dans le programme.

Commentaires