Depuis ses origines et jusqu’à des mises à jour récentes des versions 8, 11 et 17, les archives Java, étaient comme une boîte de chocolats : on ne pouvait jamais savoir si on allait faire tomber la JVM… ou bien l’Android RunTime dans Android 13.
La méthode utilisée par OpenJDK pour extraire les informations contenues dans une archive Java (ou fichier JAR) était assez peu regardante quant aux ressources utilisées jusque relativement récemment. Si, par analogie, le contenu du JAR était de la confiture, on peut dire que OpenJDK s’en mettait partout sur le tas. Et tout autant que sur les doigts, la confiture ça colle !
Le ramasse-miette (ou garbage collector) a beau se démener, il était assez aisé de geler la machine virtuelle… dans le cas d’OpenJDK et celui d’Android 13.
1. Identification du code vulnérable
1.1 D’où vient le problème ?
Le problème date des origines d’OpenJDK, lors de son premier commit (appelé initial load) en 2007 dans ${java.base}/share/classes/java/util/jar/Attributes.java [1].
Pour traiter un fichier JAR, un programme Java s’aide des métadonnées contenues dans un fichier META-INF/MANIFEST.MF (que l’on appellera fichier Manifest) inclus dans ce même fichier...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[1] OpenJDK, Initial Load commit de OpenJDK-7, https://hg.openjdk.org/jdk7/jdk7/jdk/file/37a05a11f281/src/share/classes/java/util/jar/Attributes.java, visité le 5 février 2024
[2] OpenJDK, The Java Monitoring and Management Console (jconsole), https://openjdk.org/tools/svc/jconsole/, visité le 7 février 2024
[3] Sean Coffeys, Correctif de CVE-2022-21340, https://github.com/openjdk/jdk17u/commit/f2cb3d0f6cf16d12abd811b42484a0b7df8fd124, visité le 5 février 2024
[4] OpenJDK, Commit limitant la taille du fichier Manifest à 8 puis 16 Mo, https://github.com/openjdk/jdk/commit/ecd0bc1d6205d1d1eca67cbfb9d4deaeb65739aa, https://github.com/openjdk/jdk/commit/e47a84f23dd2608c6f5748093eefe301fb5bf750
[5] T.Riom & A.Bartel, An In-Depth Analysis of Android’s Java Class Library: its Evolution and Security Impact, https://www.abartel.net/static/p/secdev2023-AndroidJCL.pdf, visité le 5 février 2024
[6] Android, Correctif de CVE-2022-21340 dans Android, Android, https://cs.android.com/android/_/android/platform/libcore/+/4c551dbec6cf5f10f6bd269a2f5451ada352e1cc, visité le 5 février 2024
[7] SES group - Umeå Universitet, Application exploitant CVE-2022-21340 sur Android 13, https://github.com/software-engineering-and-security/AndroidsJCL-SecDev23/tree/main/RQ3-Exploit, visité le 5 février 2024
[8] SES group - Umeå Universitet, Vidéo du déni de service sur Android, https://www.youtube.com/shorts/ybUCuvrV3-E, visité le 5 février 2024