Уязвимость в Android < 5.0 (ObjectInputStream)
Как сообщает Jann Horn в рассылке Full Disclosure, в Android 5.0 включили патч, который исправляет уязвимость в объекте java.io.ObjectInputStream
. До этого патча java.io.ObjectInputStream
не проверял, является ли объект сериализируемым, перед его де-сериализацией.
Атакующему достаточно создать экземпляр любого класса с конструктором без параметров и наполнить его поля случайными значениями. При срабатывании сборщика мусора, у этого экземпляра будет вызван метод finalize. В конечном итоге, если передать этот экземпляр в сервис system_service через Intents с Bundles, произойдет перезапись указателя на адрес, подконтрольный злоумышленнику, и если ему удастся записать нужный payload на этот адрес, код атакующего выполнится с привилегиями system_service.
Хоть в Android и есть ASLR, из-за того, что все процессы запускаются путем форка от zygote, они все имеют примерно одинаковый memory map, так что его можно обойти.
Автор также написал PoC и опубликовал его в рассылке.
Об уязвимости было сообщено 22.06.2014 и ей присвоен номер CVE-2014-7911.