Hora de parchear el bug 8219321 de Android (master keys)

La semana pasada hablábamos del bug 8219321 de Android (master keys) que permitía modificar un apk sin romper su firma criptográfica. 

Esto es debido a que un Map en Android/Java sólo puede devolver un único objeto para una clave dada, por lo que el truco está en crear dos entradas con el mismo nombre de forma que la función getInputStream sólo pueda verificar el correcto. 

Os recomiendo echar un vistazo al detalle técnico de Al Sutton y a la PoC de Pau Oliva (¡geniales!).

Afortunadamente ya están corrijiendo el problema que afecta a unos 900 millones de dispositivos con Android. 


Google ya ha implementado la solución en el código base del Galaxy S4 y HTC One a partir de Android 4.2.2 aunque el resto de dispositivos tendrán que esperar.  

Mejor pinta la cosa para los que utilizamos CyanogenMod que añade el parche en el código ZipFile.java y ZipFileTest.java de la última nightly build (ya sabéis, aquella que incluye todos los cambios realizados durante el día). 
El parche simplemente añade una condición para comprobar nombres duplicados en ZipFile.java y ZipFileTest.java:
diff --git a/luni/src/main/java/java/util/zip/ZipFile.java b/luni/src/main/java/
index 6ecd489..7b19cc9 100644
--- a/luni/src/main/java/java/util/zip/ZipFile.java
+++ b/luni/src/main/java/java/util/zip/ZipFile.java
@@ -363,7 +363,9 @@ public class ZipFile implements ZipConstants {
         byte[] hdrBuf = new byte[CENHDR]; // Reuse the same buffer for each ent
         for (int i = 0; i < numEntries; ++i) {
             ZipEntry newEntry = new ZipEntry(hdrBuf, bin);
-            mEntries.put(newEntry.getName(), newEntry);
+            if (mEntries.put(newEntry.getName(), newEntry) != null) {
+                throw new ZipException("Duplicate entries: file may have been tampered with");
+            }
         }
     }
Y lo bueno es que a partir de la versión 10 de CyanogenMod es posible actualizar la ROM a través de una actualización OTA (Over The Air), bastará con acceder a Ajustes,  Información del teléfono, Actualizaciones CyanogenMod:
  

Por último podemos comprobar que nuestro dispositivo ya no es vulnerable generando el apk con el exploit de Pau, probando a instalar un apk de ejemplo de Fuzion24 o mediante la aplicación gratuita Bluebox Security Scanner:


1 comentarios:

  1. Esto es algo realmente nuevo para el que estaba buscando.Gracias por este post y la información vital.

    ResponderEliminar