The OpenNET Project / Index page

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

Уязвимость в GNU tar, позволяющая перезаписать сторонние файлы

27.10.2016 22:06

В утилите GNU tar выявлена уязвимость (CVE-2016-6321), позволяющая при раскрытии архива осуществить запись вне целевого пути, заданного в командной строке. Например, запуск распаковки одного файла, может привести к перезаписи другого файла или раскрытию файлов в обход заданным маскам и исключениям.

Подготовив специальным образом архив атакующий может добиться записи сторонних файлов при распаковке, например, подменить ключ входа по SSH или сценарии автозапуска bash при распаковке в домашнюю директорию. В случае если архив распаковывается пользователем root возможно организовать перезапись системных файлов и получить полномочия суперпользователя (например, переписав crontab). Интересно, что информация о проблеме была отправлена сопровождающему GNU tar ещё в марте, но из-за специфичных условий её проявления сопровождающий не посчитал указанную проблему уязвимостью, поэтому проблема на момент публикации эксплоита остаётся неисправленной. Представители Red Hat признали проблему и присвоили ей средний (moderate) уровень опасности.

Уязвимость связана с некорректным вырезанием символов ".." из путей в архиве - при наличии ".." перед распаковкой осуществляется удаление части пути, предшествующей "..", но проверка соответствия маскам осуществляется по исходному варианту. Например, подготовив архив с файлом "etc/motd/../etc/shadow", атакующий может переписать etc/shadow в случае попытки раскрытия файла etc/motd (tar удалит "etc/motd/../", но оставит "etc/shadow", который будет обработан, несмотря на то, что явно инициирована распаковка только etc/motd).

Условием успешного проведения атаки является необходимость соответствия части присутствующего в архиве пути с задаваемой при распаковке целевой директорией, т.е. часть до символов ".." должна совпадать с заданным для распаковки файловым путём или соответствовать маске распаковки, заданной через опцию "--wildcards". Данное ограничение сужает область применения атаки системами с предсказуемыми путями распаковки, например, приложениями распаковывающими архивы в заранее известные директории.

  1. Главная ссылка к новости (http://seclists.org/fulldisclo...)
  2. OpenNews: Релиз GNU tar 1.29
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45383-tar
Ключевые слова: tar
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (49) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, pauc (?), 22:27, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Необходимо срочно включить tar в systemd! GNU не справляется.
     
     
  • 2.7, Аноним (-), 23:18, 27/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    sandbox?
     
  • 2.12, user (??), 00:29, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Сначала emacs и qt, фреймворки должны быть интегрированы.
     
     
  • 3.39, Andrey Mitrofanov (?), 10:09, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Сначала emacs и qt, фреймворки должны быть интегрированы.

    LibreOffice в качестве pid(1) должен быть хорош!!

     
     
  • 4.56, Аноним (-), 22:32, 30/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > LibreOffice в качестве pid(1) должен быть хорош!!

    Ты там потише, а то нокия уже доперла однажды до прелоада браузера сразу после старта системы. Здорово же если браузер вываливается на экран сразу как ты клацнул ярлык. А то что он трскал цать мегов даже если ты им не пользовался... ннннну... красота^W п0нт^W UX требует жертв, да?

     

  • 1.3, Аноним (-), 22:29, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    О, ну хоть по этому поводу нет отдельного сайта. Пока что.
     
  • 1.4, rm_ (ok), 22:42, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > информация о проблеме была отправлена сопровождающему GNU tar ещё в марте, но он не посчитал указанную проблему уязвимостью, поэтому проблема на момент публикации эксплоита остаётся неисправленной.

    Этому весьма уважаемому и несомненно высоко компетентному человеку запретить кодить пожизненно.

     
     
  • 2.6, Аноним (-), 23:17, 27/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Этому весьма уважаемому и несомненно высоко компетентному человеку запретить кодить пожизненно.

    Может не помочь. Проекту с числом авторов больше одного мэйнтейнеру совершенно не обязательно писать код для внесения багов.

     
  • 2.11, angra (ok), 00:29, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Ты бы хоть разобрался в этой "уязвимости", манагер.
     
     
  • 3.22, Аноним (-), 02:07, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    "Попробуйте сменить мишку или компьютер" (c)
    http://www.linux.org.ru/news/multimedia/12957216?cid=12972509
     
  • 2.40, Andrey Mitrofanov (?), 10:11, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> информация о проблеме была отправлена сопровождающему GNU tar ещё в марте, но он не посчитал указанную проблему уязвимостью, поэтому проблема на момент публикации эксплоита остаётся неисправленной.
    > Этому весьма уважаемому и несомненно высоко компетентному человеку запретить кодить пожизненно.

    Решение есть! Возьми его на работу -- и сразу начинай говорить, чего да как делать.

     

  • 1.5, interuser (ok), 22:46, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А busybox?
     
  • 1.8, Аноним (-), 23:23, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    > позволяющая при раскрытии архива осуществить запись за пределы целевого каталога, заданного в командной строке

    Эта "уязвимость" НЕ ПОЗВОЛЯЕТ осуществить запись за пределы целевого каталога. Она позволяет при частичной распаковке архива извлечь файлы, не указанные в командной строке. Например, если вы извлекаете каталог "foo" из архива в /home, то может быть перезаписан не только /home/foo, но и /home/bar, хотя пользователь этого не заказывал. Но за пределы /home (например, в /etc) ничего записать не получится.

    Если это и можно считать уязвимостью, то лишь минорной.

     
     
  • 2.17, Аноним (-), 01:33, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Выходит в тексте новости враньё.
     
     
  • 3.26, angra (ok), 04:43, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Открытого вранья нет, так как под "целевого каталога, заданного в командной строке" в команде "tar -C / -xvf archive.tar etc/motd" можно понимать как "/" так и "etc". Так что  скорее небольшая манипуляция с целью сделать из представителя семейства Muscidae представителя семейства Elephantidae.


     
  • 2.38, Аноним (-), 09:58, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Условный пример:
    Вы открываете архив и смотрите до второго уровня что в нём только файлы конкретных настроек:
    superService/conf/....
    superService/startup/....
    superService/startup/....

    естественно вы по все каталоги "до конца дерева" не просматриваете.

    А при распаковке в /etc там оказывается
    superService/conf/default/../../../systemservice.conf

    как то так :)

     

  • 1.9, fi (ok), 23:29, 27/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    что-то подсказывает, что автор прав - смотреть надо что делаешь.
     
     
  • 2.10, Аноним (-), 23:30, 27/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    rm -rf / usr
     
     
  • 3.14, burik666 (ok), 00:57, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • –3 +/
    достали уже...  rm -rf / не работает, т.к. по дефолту "--preserve-root do not remove '/' (default)"
     
     
  • 4.18, Аноним (-), 01:42, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    В FreeBSD работает. Достали уже школьники.
     
     
  • 5.27, interuser (ok), 05:25, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Что работает? Ты удали все, а потом посмотри что осталось. Я могу даже дать тебе доступ, чтобы ты потренировался ядро у FreeBSD снести. При определенной настройке попытки твои не увенчаются успехом.
     
     
  • 6.41, Аноним (-), 10:48, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Давай, терминал уже открыл.
     
     
  • 7.43, Аноним (-), 11:33, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ок. Отправил логин/пароль на почту.
     
     
  • 8.48, Аноним (-), 13:27, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Снес... текст свёрнут, показать
     
     
  • 9.53, interuser (ok), 13:12, 29/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    теперь посмотри что осталось ... текст свёрнут, показать
     
  • 2.45, анонимус (??), 12:29, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >что-то подсказывает, что автор прав - смотреть надо что делаешь.

    Прав или не прав, а судя по их "This type of scenario has been successfully exploited in the real world to gain a remote code execution as root in different environments" скрипты с такими вот командами действительно имеют место быть.

    И вообще авторы tar поступили странно… Почему именно весь кусок перед '..'? Почему не после? Или просто выкидывать один '..' или заменять на какой-нибудь '$$'…

     

  • 1.13, angra (ok), 00:41, 28/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Я нашел куда более страшную "уязвимость" в tar. Если сказать ему просто распаковать специально подготовленный архив целиком, что делается в подавляющем большинстве случаев, то он это сделает! В результате атакующий может добиться записи файлов в сторонние каталоги при распаковке, например, подменить ключ входа по SSH или сценарии автозапуска bash. В случае если архив распаковывается пользователем root возможно организовать перезапись системных файлов и получить полномочия суперпользователя (например, переписав crontab). В общем всё то же самое, повлияет на тех же самых балбесов, что распаковывают чужие tar архивы от рута в корень или от пользователя напрямую в хомяк, только с операцией на порядки более частой.
     
     
  • 2.21, cmp (ok), 02:06, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > (например, переписав crontab). В общем всё то же самое, повлияет на
    > тех же самых балбесов, что распаковывают чужие tar архивы от рута
    > в корень или от пользователя напрямую в хомяк, только с операцией
    > на порядки более частой.

    А зачем это делать? в корень-то

     
     
  • 3.25, angra (ok), 04:29, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как зачем? Чтобы "уязвимость" заработала. Ты бы еще спросил зачем это делать с чужими архивами.

    "Здравствуйте, я молдавский вирус. По причине ужасной бедности моего создателя и низкого уровня развития технологий в нашей стране я не способен причинить какой-либо вред Вашему компьютеру. Поэтому очень прошу Вас, пожалуйста, сами сотрите какой-нибудь важный для Вас файл, а потом разошлите меня по почте другим адресатам. Заранее благодарю за понимание и сотрудничество."

     
  • 2.29, Аноним (-), 05:50, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что несешь? Ты каждый раз, скачивая CMS (вордпрес, джумла) ты отрываешь архив, и изучаешь, нет ли там ".."?
     
     
  • 3.37, нет (??), 09:43, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    он не распаковывает в корень
    вин
     
  • 3.42, cmp (ok), 11:25, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > вордпрес и джумла

    ахаха, ну да, каждый раз, а потом извлекаю по 1 элементу из корня архива в корень системы, а потом по-одному переношу куда надо, или даже нет, прям корень шарю по хттп, мне ведь нравится тупить отделяя системные файлы от прочено говна, иногда прям /usr/lib распаковываю, ведь это так весело.

     

  • 1.15, Аноним (-), 01:21, 28/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Например, подготовив архив с файлом "etc/motd/../etc/shadow", атакующий может переписать /etc/shadow

    Может переписать etc/shadow
    но никак не /etc/shadow

     
     
  • 2.16, angra (ok), 01:29, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот именно. Если пройти по ссылке, то в этом примере для срабатывания "уязвимости" используется следующая команда:
    # tar -C / -xvf archive.tar etc/motd

     
     
  • 3.33, Аноним (-), 08:01, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Вот именно. Если пройти по ссылке, то в этом примере для срабатывания
    > "уязвимости" используется следующая команда:
    > # tar -C / -xvf archive.tar etc/motd

    Т.е. по вашему нормально, что вы запускайте "cat tar-poc.tar | tar xv etc/motd" чтобы переписать один файл etc/motd, а он вместо этого переписывает вам совсем другой файл etc/shadow?

     
  • 2.30, Аноним (-), 05:53, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Без проблем, просто нужно скомбинировать
    etc/motd/../etc/shadow
    etc/motd/../../etc/shadow
    etc/motd/../../../etc/shadow
    etc/motd/../../../../etc/shadow
    и т.д.
    Вот мы и переписали /etc/shadow
     
     
  • 3.36, Нанобот (ok), 09:42, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    оно так не работает
    >просто нужно скомбинировать

    великий комбинатор обосрался

     
  • 2.32, Аноним (-), 07:57, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Может переписать etc/shadow

    Относительно /. В том то и уязвимость, что при указании tar раскрывать в /etc он раскроет не в /etc/etc/shadow, а в /etc/shadow.  

     
     
  • 3.52, Аноним (-), 20:34, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > что при указании tar раскрывать в /etc

    Это 3.14здец!
    Как гвоздик в розетку сувать - если в ноль (или тапки сухие) то и не 2.71бнет.

     

  • 1.34, Ващенаглухо (ok), 08:09, 28/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как уже говорили смотреть надо, что распаковываешь.  
    И еще зря / убрается из путей при созданеии архива :)
     
  • 1.35, Нанобот (ok), 09:41, 28/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    по-моему даже на уровень moderate не тянет
     
  • 1.44, Меломан1 (?), 12:01, 28/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Хрень какая-то. Кто из под рута распаковывает архивы? Фото на доску почета.
    С остальным справится SELinux и abrt.
     
     
  • 2.49, Аноним (-), 17:01, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вбздуны
     
  • 2.50, angra (ok), 17:23, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вообще-то распаковка из под рута это норма. А ты бекап распаковываешь от пользователя, а потом для каждого файла рутом правишь владельца? А для распаковки архивов с содержимым для самого рута создаешь отдельного пользователя, распаковываешь под ним, а потом переносишь в /root?
    Проблема не в том, из под какого пользователя, а в том, куда именно распаковывать.
     
     
  • 3.51, Аноним (-), 18:18, 28/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    плюсую!!!
     
  • 3.58, Аноним (-), 14:05, 31/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема не "куда именно распаковывать", а "что именно распаковывать".
     

  • 1.54, Аноним (-), 00:50, 30/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А какое может быть решение проблемы "в имени файла есть /../"?
    например
    etc/motd/../etc/shadow
    etc/motd/../vmlinuz

    Куда такие файлы должны быть распакованы?
    В файл указанный в маске для распаковки?
    Что делать с масками --wildcards "m*"
    ?
    Считать имя повреждённым и вообще не распаковывать такие файлы?

     
     
  • 2.55, curious (?), 16:40, 30/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Воу, воу, осади мысли-скакуны.

    Тот кто распаковывает указывает что он хочет распаковать в маске для распаковки.
    То что программа делает с именами файлов _перед_ распаковкой это распаковывающему совсем неинтересно.

    Если короче - маска применяется _после_ всех манипуляций с именем файла.

     

  • 1.57, Аноним (-), 23:24, 30/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    это не уязвимость, - это фича! ;)
     

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



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

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