CVE-2013-6282

Linux Kernel

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

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

2022-09-15

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

The get_user and put_user API functions of the Linux kernel fail to validate the target address when being used on ARM v6k/v7 platforms. This allows an application to read and write kernel memory which could lead to privilege escalation.

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

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

CVE-2013-6282 — это критическая уязвимость в ядре Linux, затрагивающая архитектуры ARM (в частности v6k и v7). Проблема заключается в отсутствии надлежащей проверки границ адресов в функциях API get_user и put_user.

В нормальных условиях эти функции должны обеспечивать безопасный обмен данными между пространством пользователя (user space) и пространством ядра (kernel space), проверяя, что переданный адрес действительно принадлежит пользователю. Из-за ошибки в реализации макросов проверки доступа, локальное приложение может передать адрес, принадлежащий памяти ядра. Это позволяет непривилегированному процессу читать из произвольных адресов ядра или записывать в них данные, что неизбежно ведет к полному компрометации системы и повышению привилегий до уровня root.

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

Основным способом устранения является обновление ядра Linux до версии, в которой исправлены макросы __get_user_check и __put_user_check.

1. Обновление пакетной базы и ядра Для дистрибутивов на базе Debian/Ubuntu:

apt-get update && apt-get upgrade linux-image-generic

Для дистрибутивов на базе RHEL/CentOS:

yum update kernel

2. Сборка ядра из исходных кодов (если обновление пакетов недоступно) Необходимо применить патч к файлу arch/arm/include/asm/uaccess.h. Исправление добавляет вызов check_uaccess, который проверяет, не выходит ли адрес за пределы USER_DS.

После применения патча необходимо пересобрать ядро:

make oldconfig
make -j$(nproc)
make modules_install
make install

3. Перезагрузка системы После установки обновленного ядра систему необходимо перезагрузить для применения изменений:

reboot

4. Проверка версии ядра Убедитесь, что система работает на исправленной версии (исправления внесены в ветки 3.10.19, 3.11.7, 3.12 и выше):

uname -r

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

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

1. Ограничение доступа к компиляторам Запретите обычным пользователям доступ к компиляторам (gcc), чтобы затруднить сборку эксплойтов непосредственно на целевой системе:

chmod 700 /usr/bin/gcc

2. Использование механизмов защиты (LSM) Настройте политики SELinux или AppArmor для минимизации возможностей подозрительных процессов, однако стоит учитывать, что при успешной эксплуатации ядра данные механизмы могут быть обойдены.

3. Мониторинг системных вызовов Настройте аудит системы для отслеживания подозрительной активности, связанной с аномальным доступом к памяти, используя auditd.

4. Изоляция критических узлов В средах виртуализации или контейнеризации убедитесь, что уязвимые хосты изолированы от недоверенных пользователей до момента установки патча.