Разработчики приложений, работающих на ОС Android, обязаны идентифицировать их при помощи цифровой подписи. Это условие, существовавшее с первой версии ОС, необходимо для защиты от несанкционированного авторами изменения APK-файлов. При установке обновления приложения происходит сравнение цифровых подписей на исходном приложении и его обновлении. GuardSquare, компания из Бельгии, работающая в области кибернетической безопасности, обнаружила возможность обойти систему контроля подписи.
В докладе GuardSquare указывается баг идентификатора CVE-2017-13156, получивший название «Janus». Используя эту опасную уязвимость, можно менять APK-файл и при этом не сменять цифровую подпись в приложении.
При нормальной работе идентификатора подписи после сличения цифровых подписей приложение компилируется в файл формата DEX (Dalvik EXecutable) и запускается на устройстве пользователя. Баг «Janus» позволяет интегрировать оригинальный APK с модифицированным исполняемым файлом DEX. После установки системой приложения запускается код из файла формата DEX. Таким образом, хакеры получат доступ к данным пользователя, либо возможность при последующих обновлениях установить изменённую злоумышленником версию приложения.
Данный баг позволяет злоумышленникам работать с оригинальными подписями, основанными на JAR (Android 5.0 и выше). Для Android 7.0 Nougat способ заменён APK Signature Scheme v2, защищенным от «Janus». О наличии такой уязвимости Google была оповещена 31 июля, однако исправлен баг только обновлением, вышедшим 5 декабря. Так что сейчас масштаб нависшей над пользователями проблемы значительно сокращён.