Бесплатно Экспресс-аудит сайта:

25.06.2014

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

В понедельник, 23 июня, глава 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 брешь исправлена.

Подробнее ознакомиться с описанием уязвимости можно по адресу:  

http://www.securitylab.ru/vulnerability/454368.php