CVE-2011-1823

Android Android OS

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2022-09-08

Официальное описание

The vold volume manager daemon in Android kernel trusts messages from a PF_NETLINK socket, which allows an attacker to execute code and gain root privileges. This vulnerability is associated with GingerBreak and Exploit.AndroidOS.Lotoor.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость CVE-2011-1823 (известная по эксплойту GingerBreak) заключается в некорректной обработке сообщений демоном управления томами vold в ОС Android версий 2.2 и 2.3. Демон vold использует PF_NETLINK сокет для получения уведомлений от ядра о событиях монтирования устройств.

Проблема состоит в том, что vold не проверял происхождение (PID отправителя) входящих сообщений. Это позволяло локальному вредоносному приложению отправить специально сформированное сообщение через NETLINK сокет напрямую в vold. Поскольку vold работает с привилегиями root, манипуляция индексами массива в обработчике сообщений приводила к повреждению памяти и выполнению произвольного кода с максимальными правами в системе.

Как исправить

Основным способом исправления является обновление исходного кода компонента vold и пересборка образа системы. Необходимо добавить проверку того, что сообщение пришло именно от ядра (PID 0).

  1. Внесите изменения в файл system/vold/NetlinkManager.cpp. В методе обработки сообщений необходимо добавить проверку credentials отправителя:
struct ucred *cred = (struct ucred *) CMSG_DATA(cmsg);
if (cred->pid != 0) {
    SLOGE("Ignoring netlink message from non-kernel (pid %d)", cred->pid);
    return;
}

  1. Убедитесь, что сокет открыт с параметром NETLINK_KOBJECT_UEVENT и включена опция SO_PASSCRED для получения метаданных об отправителе:
setsockopt(mSock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));

  1. После внесения правок выполните сборку образа системы:
make systemimage

  1. Прошейте обновленный образ на устройство через fastboot:
fastboot flash system system.img

Временные меры

Если обновление прошивки невозможно, рекомендуется принять следующие меры для снижения риска:

  1. Ограничение установки приложений: Запретите установку приложений из неизвестных источников и используйте только доверенные репозитории.
  2. Использование средств контроля доступа: На устройствах с поддержкой SELinux (если они были портированы на старые версии) настройте политики, запрещающие непривилегированным процессам отправку сообщений в сокеты, принадлежащие vold.
  3. Мониторинг процессов: Отслеживайте появление подозрительных бинарных файлов в директориях с правами на исполнение (например, /data/local/tmp), которые часто используются эксплойтами типа GingerBreak для первичного закрепления.
  4. Изоляция устройства: В корпоративной среде рекомендуется вывести из эксплуатации устройства на базе Android 2.3 и ниже, так как они содержат критические неисправимые уязвимости ядра.