next up previous contents index
Next: Les leçons à tirer Up: De la théorie à Previous: Les failles de JAVA.

   
JAVA contre son propre bytecode.

Les failles  les plus graves sont dûes à JAVA lui même, plus précisément à des différence de sémantique entre le langage JAVA et le code exécutable (bytecode) en lequel est compilée la machine virtuelle JAVA (JVM). Deux failles importantes ont pu être identifiées.

La première, et la plus sérieuse, concerne les constructeurs des superclasses. Le langage JAVA interdit la création par le constructeur de la classe parente (super) d'objet pré-initialisés, qui pourraient permettre de violer le typage. Cependant, de telles pratiques sont autorisées par le vérificateur de bytecode . Cette faille permettrait de connaître et de modifier la valeur de n'importe quelle variable non statique et d'appeler n'importe quelle méthode, y compris des méthodes natives peu restreintes.

La seconde concerne les noms des packages JAVA . Le vérificateur de bytecode  autorise de faire précéder le nom d'un package par le caractère ``/'' ce qui est interprété par le système comme un chemin absolu à un package. De plus, comme ce dernier réside sur le système de fichiers local, il est considéré comme sûr. Si une applet  JAVA  vient à s'exécuter sur un sytème autorisant d'autres mécanisme d'échange de fichiers par le réseau (serveur FTP autorisant le dépôt de fichiers, utilisation de disques partages en NFS, etc.), il lui devient possible de faire référence à un package préalablement déposé sur le système par une autre méthode.

L'initialisation des objets présente encore quelques problèmes.

Il est évident qu'il reste du travail à accomplir sur le modèle JAVA, et en particulier sur son interaction avec le code de la machine virtuelle.


next up previous contents index
Next: Les leçons à tirer Up: De la théorie à Previous: Les failles de JAVA.
BLANCHER Cedric (IT)
1999-11-19