The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Локальная root-уязвимость в ядре Linux

26.09.2018 11:18

Компания Qualys раскрыла информацию об уязвимости (CVE-2018-14634) в ядре Linux. Проблема вызвана целочисленным переполнением в функции create_elf_tables() и проявляется на 64-разрядных системах, имеющих более 32 Гб ОЗУ. Локальный атакующий может эксплуатировать уязвимость через исполняемый файл с флагом SUID root для получения полноценных root-привилегий в системе.

Вызывающая проблему ошибка была внесена в ядро в июле 2007 года вместе с кодом для поддержки аргументов переменной длины. Около года назад в ядро было принято исправление, ограничивающее размер стека для аргументов exec(). Данное исправление блокирует возможность эксплуатации уязвимости, но некоторые дистрибутивы не портировали его в свои длительно поддерживаемые пакеты с ядром.

Например, проблема затрагивает ядро, поставляемое в Red Hat Enterprise Linux 6 и 7, Ubuntu 12.04 и Debian 8. Уязвимость эксплуатируется через запуск при помощи функции execve() suid-файла с передачей ему очень большого числа аргументов (около 16 миллиардов). Для успешной атаки в системе должно быть как минимум 32GB свободной оперативной памяти. Код прототипов эксплоитов доступен в открытом доступе.

Кроме того, в ядре выявлена уязвимость (CVE-2018-14633), затрагивающая код iscsi target. Проблема вызвана ошибкой в функции chap_server_compute_md5() и позволяет записать 17 байт вне границ стека через отправку специального запроса авторизации от ISCSI initiator. Проблема не проявляется на системах с RHEL-7/x86_64. Для совершения атаки требуется, чтобы в системе был активен ISCSI target.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Опасные уязвимости в утилитах beep и patch
  3. OpenNews: Уязвимость в Glibc, позволяющая поднять привилегии в системе
  4. OpenNews: Уязвимость в Glibc ld.so, позволяющая поднять свои привилегии в системе
  5. OpenNews: Локальная уязвимость в ядре Linux, позволяющая получить root-доступ
  6. OpenNews: Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для разных ОС
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49340-linux
Ключевые слова: linux, kernel, suid
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (49) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Нанобот (ok), 11:34, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >очень большого числа аргументов (около 16 миллиардов)
    >минимум 32GB свободной оперативной памяти

    подождите,подождите. 16 млрд аргументов по 8 байт каждый это уже 128GB

     
     
  • 2.4, jeste.space (?), 11:35, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    16 млрд по 2 байта? или не работает?
     
     
  • 3.7, Нанобот (ok), 11:47, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ну, я исхожу из того, что каждый аргумент - ссылка на строку, соответственно, каждый аргумент потребует как минимум 8 байт (и, если такое предположение изначально неверно, то и расчёт будет некорректным)
     
     
  • 4.12, Аноним (12), 12:09, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В C(СИ) массив строк (для exec..) это просто кусок памяти, а разделение в нём - нулевые символы \0
     
     
  • 5.16, Нанобот (ok), 12:24, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а, ну тогда всё правильно в новости написано, был неправ
     
  • 5.17, Аноним (17), 12:48, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В C как раз argv это массив указателей на строки
     
     
  • 6.21, z (??), 13:41, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    процессу передаётся именно одна большая строка, где разделители это \0, crt её потом парсит и устанавливает argv[] для сишных прогамм
     
     
  • 7.30, Аноним (30), 15:03, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Угу, поэтому в _C_ argv — это массив указателей.
     
     
  • 8.48, mickvav (?), 19:37, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это он в userspace-коде - массив указателей А в ядре, которое тоже, внезапно, н... текст свёрнут, показать
     
  • 8.53, Аноним (-), 02:15, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Паря, до того как твой main получит управление - в обычной ситуации startup де... текст свёрнут, показать
     
  • 7.32, ананим.orig (?), 15:07, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    откуда вы все берётесь то?!!
    Ещё раз:
    > Проблема вызвана целочисленным переполнением в функции create_elf_tables() и проявляется на 64-разрядных системах, имеющих более 32 Гб ОЗУ.

    - целочисленным переполнением
    - в функции create_elf_tables()
    - на 64-разрядных системах
    - имеющих более 32 Гб ОЗУ

    Может ещё раз повторить? Или бесполезно?

     
  • 2.22, Ordu (ok), 13:46, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В статье выше есть все необходимые ссылки, чтобы объяснить это.

    > We execve() a SUID-root binary with exactly 0x80000000 "items" (i.e.,
    > INT_MIN "items"): roughly 0x80000000 * sizeof(char *) = 16GB of argument
    > pointers, 16GB of argument strings, and 16GB of environment strings. Our
    > exploit requires "only" 2 * 16GB = 32GB of memory, instead of 3 * 16GB =
    > 48GB or more, because we use a few tricks to reduce its memory footprint
    > (for example, we replace the nearly 16GB of equal argument pointers with
    > equivalent file-backed mappings that consume practically no memory).

     

  • 1.11, Аноним (11), 12:00, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $ free
                  total        used        free      shared  buff/cache   available
    Mem:      131990704     8925636   115768364        1228     7296704   121915208
    Swap:             0           0           0

    $ ./poc-exploit
    execve: Argument list too long
    died in main: 229

    Ничего не работает в этих ваших линуксах.

     
     
  • 2.13, анонимец (?), 12:16, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    uname -r забыл показать
     
     
  • 3.49, Аноним (49), 20:16, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    4.4.0-17134-Microsoft
     
  • 3.60, Аноним (60), 09:31, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    $ uname -a
    Linux steinberg 4.18.1-arch1-1-ARCH #1 SMP PREEMPT Wed Aug 15 21:11:55 UTC 2018 x86_64 GNU/Linux

    Оба бинарника компилировал, suid ставил.

     
     
  • 4.70, Мегазаычы (?), 02:46, 03/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Около года назад в ядро было принято исправление

    очевидно, что в 4.18.1 оно есть. ищи ядро без него.

     
  • 2.15, pull request (?), 12:22, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    # gcc -O0 -o poc-suidbin poc-suidbin.c
    # chown root poc-suidbin
    # chmod 4555 poc-suidbin

    $ gcc -o poc-exploit poc-exploit.c
    $ time ./poc-exploit

    ну и рутом ты после этого все равно не станешь. это только POC, который показывает, что можно переписать LD_LIBRARY_PATH. а дальше уж сам.

     

  • 1.18, Аноним (18), 12:59, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тоесть эксплоит возможен только с рутом?
    Сначала выставляешь от рута set-uid бит, а затем эксплуатируешь. Или я что-то недопонимаю...
     
     
  • 2.20, pull request (?), 13:39, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Читаем тут: https://seclists.org/oss-sec/2018/q3/274
    >As a result, ld.so partly overwrites (i.e., rewrites) our "onebyte"
    >environment variables with the fname[] buffer in handle_ld_preload()
    >(whose contents we control through our LD_PRELOAD environment variable)
    >and thereby nullifies process_envvars()'s filtering of UNSECURE_ENVVARS
    >(LD_AUDIT, LD_LIBRARY_PATH, LD_PRELOAD, etc). The exploitation of this
    >lack of UNSECURE_ENVVARS filtering in ld.so (via a suitable SUID-root
    >binary) is left as an exercise for the interested reader.

    Короче, надо найти подходящий suid бинарь в системе. А в POC он тебе уже предоставлен.

     
  • 2.23, Аноним (23), 13:53, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Есть утилиты в системе с уже установленным SUID. Например, ping.
     
     
  • 3.45, Anonymouss (?), 17:21, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это в каких системах?
    stat /bin/ping
      File: '/bin/ping'
      Size: 66176           Blocks: 136        IO Block: 4096   regular file
    Device: fc00h/64512d    Inode: 33799631    Links: 1
    Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2018-09-25 11:35:24.036354277 -0400
    Modify: 2017-08-02 14:11:53.000000000 -0400
    Change: 2017-08-14 09:17:09.936638043 -0400
    Birth: -  

     
     
  • 4.51, Stax (ok), 21:32, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну возьмите at, chfn/chsh, crontab, su, mount/umount или десятки других. Замена в пинге сьюда на capabilities никак не убирает остальные suid-бинарники.
     
     
  • 5.54, Аноним (-), 02:17, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Что за наф?! Это заем бы mount'у быть suid? Чтобы всякие левые рожи могли все перемонтировать как им удобно и систему поизящнее ломануть?
     

  • 1.19, Аноним (19), 13:22, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Вывод: бежим на другое ядро, например

    >http://www.project-trident.org/download/

    Trident-BETA3-x64!!!

     
     
  • 2.25, Аноним (23), 13:58, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет уж, к бздунам вы сами бегите.

    PS А это "x64" лишний раз почёркивает почитание бздунами Windows.

     
     
  • 3.27, ryoken (ok), 14:20, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Дада, ибо правильно пишется - AMD64 :D.
     
  • 3.33, Аноним (33), 15:12, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Нет уж, к бздунам вы сами бегите.

    Это родственники Дениски Попова.

    > PS А это "x64" лишний раз почёркивает почитание бздунами Windows.

    Смотрите дети, классические двойные стандарты лап4атых -- это вот так:

    https://www.opennet.dev/opennews/art.shtml?num=49321
    > 23.09.2018 08:52  Проект WLinux развивает Linux-дистрибутив, нацеленный на использование в Windows

    https://www.opennet.dev/opennews/art.shtml?num=45869
    > 17.01.2017 12:18  Для запуска в Windows доступны окружения SUSE и openSUSE

    https://www.opennet.dev/opennews/art.shtml?num=45151
    > 15.09.2016 08:49  Arch Linux адаптирован для запуска в Windows

     
  • 2.34, Аноним (33), 15:23, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Вывод: бежим на другое ядро, например
    > http://www.project-trident.org/download/
    > What is Project Trident?
    > Project Trident is a desktop-focused operating system based on TrueOS. It
    > uses the Lumina desktop as well as a number of self-developed utilities to
    > provide an easy-to-use system that both BSD beginners and advanced system
    > administrators can feel comfortable running 24⁄7.

    Отличное описание (да-да, цитированно полностью) из которого все становится понятно! (сарказм)
    Чем оно отличается от Ъ-ОСи (которая после перехода на CURRENT, ZFS и выкидывания PBI стала совсем уж на любителя) и зачем вообще нужен еще один клон?

     
  • 2.55, Аноним (-), 02:21, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >  Вывод: бежим на другое ядро, например

    Расчет на эффект неуловимого джо, чтоли? Linux то статическими анализаторами, фуззерами и кучей тестов пообвесили - и стали находить странные сценарии, когда в полнолуние високосного года даже палка оказывается стреляет. А в этом другом ядре хоть 10% от этих тестов? Или все дружно здят про мнимое качество кода, не подкрепляя это ничем кроме здежа?

     
     
  • 3.64, Аноним (33), 12:26, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А в этом другом ядре хоть 10% от этих тестов?

    Да откуда? Никто там об этом, как обычно у бздюков и прочих бесперепрончатых, не слышал. Разве что самую малость что-то там обезъянничают:
    https://scan.coverity.com/projects/freebsd
    > On Coverity Scan since Feb 28, 2013
    > Last build analyzed 2 days ago

    find /usr/src|grep -c test  
    11326


     

  • 1.26, ryoken (ok), 14:20, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я так понимаю, что в атакуемый сервант надо вкрутить памяти более 32Гб, а потом его пинать, да? :)
     
     
  • 2.40, Виталик (??), 15:54, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Мажоры должны страдать.
     

  • 1.31, Аноним (31), 15:04, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Имеющих более 32 Гб ОЗУ. расходимся.
     
     
  • 2.36, ыы (?), 15:31, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Никто и не сомневался .. что новость не для активных участников форума... :)
     
     
  • 3.59, гг (?), 09:28, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну у меня с дюжину серваков с 200 Гб ОЗУ. Парочка даже просто лежит пыль копит.
     
     
  • 4.66, Аноним (66), 14:38, 29/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Может, поднимешь на них OpenDNS, SearX или ещё что-нибудь такое? Люди поблагодарят хотя бы.
     
     
  • 5.69, Michael Shigorin (ok), 13:15, 01/10/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Может, поднимешь на них OpenDNS, SearX или ещё что-нибудь такое?

    Пыльные, очевидно, в запасе и работать сейчас не должны.

     

  • 1.35, Аноним (35), 15:26, 26/09/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Локальная уязвимость, я так понимаю, что можно проcто пройтись по серваку молотком, чем запихивать в него 32 гектара и взламать?
     
     
  • 2.37, ыы (?), 15:39, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Лет 20 назад... подобные вопли можно было бы еще понять...но сейчас... ныть из - за 32 гигов оперативки.. домашние компы столько имеют...
     
     
  • 3.38, КО (?), 15:50, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    32 свободных. Т.е. надо где-то 48. Ну и голую операционку. А вот зачем взламывать такой комп?
     
     
  • 4.39, КО (?), 15:51, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С другой стороны, если swap в zram, то надо немного меньше. :)
     
  • 3.57, лютый лютик__ (?), 07:57, 27/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >сейчас... ныть из - за 32 гигов оперативки

    После массового психоза канализации^Wвиртуализации... сколько сейчас не нарезанных на мелкие виртуалки/контейнеры осталось жирных серверов?

    Они, есно, есть. Но полагаю, что это вменяемые люди и у них не хостинг.

    Итого, риск от сей дыры на самом деле незначительный.

     
  • 2.42, agent (??), 16:46, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Плохо понимаешь. Имеется ввиду, что нужен локальный пользователь
     
  • 2.43, Аноним (43), 16:55, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    можно взломать сервер виртуального хостинга, например.
     
     
  • 3.47, Аноним (47), 18:07, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И каким волшебным образом ты попадёшь на ноду?
     
     
  • 4.50, ананим231 (?), 21:06, 26/09/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    через дырявый вротпресс
     

  • 1.67, scorry (ok), 02:12, 01/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ubuntu 12 уже не поддерживается. Скажите им кто-нибудь, пожалуйста.
     
  • 1.68, Michael Shigorin (ok), 13:14, 01/10/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как отметил наш майнтейнер основного ядра,[CODE]Сommit ff6f95dcf55d34def126a3c7aae3080af66eada7
    Author: Dmitry V. Levin <ldv@altlinux>
    Date:   Tue May 30 15:37:59 2017 +0000

        get_arg_page: limit argv+env strings size for suid/sgid binaries[/CODE]достаточно, чтобы эта дырка в альтовых бранчах была закрыта.

    https://lists.altlinux.org/pipermail/sisyphus/2018-October/367136.html

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру