Linux Kernel 3.10.28/3.12.9/3.13.1 net/compat.c compat_sys_recvmmsg эскалация привилегий

CVSS Meta Temp ScoreТекущая цена эксплойта (≈)Балл интереса CTI
7.0$0-$5k0.00

СводкаИнформация

Была найдена уязвимость, отнесённая к категории критический, в Linux Kernel 3.10.28/3.12.9/3.13.1. Неизвестная функция файла net/compat.c поражена. Манипуляция приводит к эскалация привилегий. Уязвимость зарегистрирована как CVE-2014-0038. Атака должна осуществляться локально. Кроме того, имеется доступный эксплойт. Рекомендуется установить обновление для решения этой проблемы.

ПодробностиИнформация

Была найдена уязвимость, отнесённая к категории критический, в Linux Kernel 3.10.28/3.12.9/3.13.1. Неизвестная функция файла net/compat.c поражена. Манипуляция приводит к эскалация привилегий. Использование CWE для описания проблемы приводит к CWE-20. Данный баг был выявлен 31.01.2014. Слабость была опубликована 28.01.2014 специалистом pageexec под идентификатором Bug 338594 как Mailinglist Post (oss-sec). Консультация доступна по адресу seclists.org.

Уязвимость зарегистрирована как CVE-2014-0038. CVE был назначен 03.12.2013. Атака должна осуществляться локально. Доступна техническая информация. Популярность этой уязвимости выше среднего. Кроме того, имеется доступный эксплойт. Эксплойт опубликован и может быть использован. Сейчас цена на эксплойт приблизительно равна USD $0-$5k. Данная уязвимость вызвана этим участком кода:

asmlinkage long compat_sys_recvmmsg(int fd,
   struct compat_mmsghdr __user *mmsg,
   unsigned int vlen, unsigned int flags,
   struct compat_timespec __user *timeout)
{
   int datagrams;
   struct timespec ktspec;

if (flags & MSG_CMSG_COMPAT) return -EINVAL;

if (COMPAT_USE_64BIT_TIME) return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT, (struct timespec *) timeout);

В предупреждении говорится:
The timeout pointer parameter is provided by userland (hence the __user annotation) but for x32 syscalls it's simply cast to a kernel pointer and is passed to __sys_recvmmsg which will eventually directly dereference it for both reading and writing. Other callers to __sys_recvmmsg properly copy from userland to the kernel first. The impact is a sort of arbitrary kernel write-where-what primitive by unprivileged users where the to-be-written area must contain valid timespec data initially (the first 64 bit long field must be positive and the second one must be < 1G).

Указано значение Высокофункциональный. Эксплойт доступен для загрузки на сайте exploit-db.com. В 0-дневный период предполагаемая подземная цена составляла около $5k-$25k. Сканер уязвимостей Nessus предоставляет плагин с идентификатором 72591. Он принадлежит семейству Slackware Local Security Checks. Плагин работает в контексте типа l. Он использует порт 0. Коммерческий сканер уязвимостей Qualys способен проверить эту проблему с помощью плагина 166761 (OpenSuSE Security Update for Kernel (openSUSE-SU-2014:0204-1)).

Обновление уже доступно для загрузки по адресу seclists.org. Рекомендуется установить обновление для решения этой проблемы. Возможное средство устранения было опубликовано через 4 недели после раскрытия уязвимости. Данная уязвимость будет решена с помощью следующих строк кода:

--- a/net/compat.c  2014-01-20 12:36:54.372997752 +0100
+++ b/net/compat.c      2014-01-28 02:06:59.265506171 +0100
@ -780,22 +780,25 @
    if (flags & MSG_CMSG_COMPAT)
       return -EINVAL;

- if (COMPAT_USE_64BIT_TIME) - return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, - flags | MSG_CMSG_COMPAT, - (struct timespec *) timeout); - if (timeout == NULL) return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT, NULL);

- if (get_compat_timespec(&ktspec, timeout)) + if (COMPAT_USE_64BIT_TIME) { + if (copy_from_user(&ktspec, timeout, sizeof(ktspec))) + return -EFAULT; + } else if (get_compat_timespec(&ktspec, timeout)) return -EFAULT;

datagrams = __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT, &ktspec); - if (datagrams > 0 && put_compat_timespec(&ktspec, timeout)) - datagrams = -EFAULT; + if (datagrams > 0) { + if (COMPAT_USE_64BIT_TIME) { + if (copy_to_user(timeout, &ktspec, sizeof(ktspec))) + datagrams = -EFAULT; + } else if (put_compat_timespec(&ktspec, timeout)) + datagrams = -EFAULT; + }

return datagrams; }

В уведомлении содержится следующий комментарий:
The bug was introduced by commit http://git.kernel.org/linus/ee4fa23c4b (other uses of COMPAT_USE_64BIT_TIME seem fine) and should affect all kernels since 3.4 (and perhaps vendor kernels if they backported x32 support along with this code). Note that CONFIG_X86_X32_ABI gets enabled at build time and only if CONFIG_X86_X32 is enabled and ld can build x32 executables.

Уязвимость также задокументирована в других базах данных уязвимостей: SecurityFocus (BID 64781), Secunia (SA56549) и Tenable (72591).

ПродуктИнформация

Тип

Поставщик

Имя

Версия

Лицензия

Веб-сайт

CPE 2.3Информация

CPE 2.2Информация

Видео

CVSSv4Информация

VulDB Вектор: 🔍
VulDB Надёжность: 🔍

CVSSv3Информация

VulDB Meta Base Score: 7.8
VulDB Meta Temp Score: 7.0

VulDB Базовый балл: 7.8
VulDB Временная оценка: 7.0
VulDB Вектор: 🔍
VulDB Надёжность: 🔍

CVSSv2Информация

AVACAuCIA
💳💳💳💳💳💳
💳💳💳💳💳💳
💳💳💳💳💳💳
ВекторСложностьАутентификацияКонфиденциальностьЦелостностьДоступность
РазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокировать
РазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокировать
РазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокироватьРазблокировать

VulDB Базовый балл: 🔍
VulDB Временная оценка: 🔍
VulDB Надёжность: 🔍

NVD Базовый балл: 🔍

ЭксплуатацияИнформация

Класс: эскалация привилегий
CWE: CWE-20
CAPEC: 🔍
ATT&CK: 🔍

Физический: Частично
Локальный: Да
Удалённый: Нет

Доступность: 🔍
Доступ: публичный
Статус: Высокофункциональный
Автор: pageexec
Язык программирования: 🔍
Скачать: 🔍

EPSS Score: 🔍
EPSS Percentile: 🔍

Прогноз цен: 🔍
Оценка текущей цены: 🔍

0-DayРазблокироватьРазблокироватьРазблокироватьРазблокировать
СегодняРазблокироватьРазблокироватьРазблокироватьРазблокировать

Nessus ID: 72591
Nessus Имя: Slackware 14.1 : kernel (SSA:2014-050-03)
Nessus Файл: 🔍
Nessus Риск: 🔍
Nessus Семейство: 🔍
Nessus Context: 🔍
Nessus Port: 🔍

OpenVAS ID: 850566
OpenVAS Имя: SuSE Update for kernel openSUSE-SU-2014:0204-1 (kernel)
OpenVAS Файл: 🔍
OpenVAS Семейство: 🔍

Qualys ID: 🔍
Qualys Имя: 🔍

MetaSploit ID: recvmmsg_priv_esc.rb
MetaSploit Имя: Linux Kernel recvmmsg Privilege Escalation
MetaSploit Файл: 🔍

Exploit-DB: 🔍

Разведка угрозИнформация

Интерес: 🔍
Активные акторы: 🔍
Активные группы APT: 🔍

КонтрмерыИнформация

Рекомендация: Патч
Статус: 🔍

Время реакции: 🔍
0-дневное время: 🔍
Время экспозиции: 🔍
Задержка эксплуатации: 🔍

Патч: seclists.org

ХронологияИнформация

03.12.2013 🔍
28.12.2013 +25 дни 🔍
28.01.2014 +31 дни 🔍
28.01.2014 +0 дни 🔍
31.01.2014 +3 дни 🔍
03.02.2014 +3 дни 🔍
06.02.2014 +3 дни 🔍
20.02.2014 +14 дни 🔍
20.02.2014 +0 дни 🔍
22.11.2024 +3928 дни 🔍

ИсточникиИнформация

Поставщик: kernel.org

Консультация: Bug 338594
Исследователь: pageexec
Статус: Подтверждённый
Подтверждение: 🔍

CVE: CVE-2014-0038 (🔍)
GCVE (CVE): GCVE-0-2014-0038
GCVE (VulDB): GCVE-100-12137

OVAL: 🔍

SecurityFocus: 64781 - Linux Kernel 'fpu-internal.h' Local Denial of Service Vulnerability
Secunia: 56549
OSVDB: 102749 - CVE-2014-0038 - Linux - Privilege Escalation Issue

scip Labs: https://www.scip.ch/en/?labs.20161013
Смотрите также: 🔍

ВходИнформация

Создано: 03.02.2014 08:57
Обновлено: 22.11.2024 16:32
Изменения: 03.02.2014 08:57 (92), 29.07.2019 20:37 (6), 22.11.2024 16:32 (19)
Завершенный: 🔍
Cache ID: 216::103

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Обсуждение

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!