Мир: Эксперты раскрыли уязвимость в Android KeyStore, позволяющую вызвать переполнение буфера в стеке

4

Глава Security Research Group компании IBM Рои Хэй (Roee Hay) публично  раскрыл  уязвимость в сервисе Android KeyStore, позволяющую вызвать переполнение буфера в стеке. Эксперты из Security Research Group обнаружили брешь еще в сентябре прошлого года, о чем незамедлительно сообщили команде по безопасности Android Security Team, однако публично раскрыли ее только сейчас. “Учитывая фрагментарный характер Android, а также тот факт, что уязвимость позволяла выполнение кода, мы решили немного подождать с раскрытием”, – сообщил Хэй.


Android предоставляет сервис для хранения ключей шифрования в /system/bin/keystore. Раньше доступ других приложений к сервису осуществлялся через программный интерфейс UNIX – /dev/socket/keystore. Теперь для доступа используется интерфейс Binder. Каждый пользователь Android получает собственное место для хранения. Объем данных шифруется стандартом симметричного алгоритма блочного шифрования AES с использованием случайного мастер-ключа. Кроме того, данные шифруются на диске с использованием ключа, полученного из пароля, при помощи функции PKCS5_PBKDF2_HMAC_SHA1.

В последних версиях Android учетные данные, такие как RSA-ключи, могут поставляться с аппаратным обеспечением. Это означает, что ключи к хранилищу могут служить только в качестве идентификаторов для реальных ключей в аппаратном обеспечении. Несмотря на поддержку аппаратного обеспечения, некоторые учетные данные (например, VPN PPTP), по-прежнему хранятся на диске (в зашифрованном виде).

Буфер в стеке создается при помощи метода KeyStore::getKeyForName. Эта функция имеет несколько источников вызова, доступных внешним приложениям через интерфейс Binder (например, android::KeyStoreProxy::get). Таким образом, переменная keyName произвольного размера может управляться вредоносным ПО. Поскольку проверка границ отсутствует, многократный вызов encode_key через encode_key_for_uid может вызвать переполнение буфера “имя файла”. Теоретически эксплуатация бреши CVE-2014-3100 возможна при помощи вредоносного приложения, однако рабочий эксплоит требует преодоления ряда препятствий. Уязвимыми являются версии Android 4.3 и ниже, в Android 4.4 брешь исправлена. (Android/NovostIT)