The OpenNET Project / Index page

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

Уязвимость в реализации автодополнения ввода в Bash

08.02.2017 12:00

В командном интерпретаторе Bash выявлена уязвимость (CVE-2017-5932), которая может быть использована для выполнения своего кода при выполнении операций автодополнения ввода клавишей табуляция. Проблема затрагивает ветку Bash 4.4. Исправление пока доступно только в виде патча.

Проблема вызвана ошибкой в коде экранирования и связана с неверной обработкой двойных кавычек (в функцию expand_word_internal передаётся строка без экранирования блока запуска, что приводит к обработке подстановки для блоков "``" или "$()"). Для эксплуатации достаточно создать файл со специально оформленным именем. При попытке выполнения операции автодополнения для данного файла будут выполнены определённые злоумышленником инструкции командного интерпретатора. Например, для эксплуатации достаточно создать файл и добиться его обработки в строке ввода при нажатии табуляции:



   $ touch '"`touch HereBeDragons`'
   $ ls -lt
   -rw-rw-r-- 1 test test    40831 февр.  8 11:46 '"`touch HereBeDragons`'

   $ rm \"\`touch\ HereBeDragons\` (прерываем ввод по ^C)
   $ ls
   HereBeDragons  '"`touch HereBeDragons`'



  1. Главная ссылка к новости (http://openwall.com/lists/oss-...)
  2. OpenNews: Релиз командного интерпретатора Bash 4.4
  3. OpenNews: Найден способ обхода патча, устраняющего уязвимость в bash
  4. OpenNews: В Bash выявлено ещё четыре уязвимости, эксплуатируемые через переменные окружения
  5. OpenNews: Фонд СПО указал, что процесс устранения уязвимости в bash подчеркнул достоинства СПО
  6. OpenNews: Критическая уязвимость в bash, которая может привести к удалённому запуску команд (дополнено)
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/45997-bash
Ключевые слова: bash
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:10, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А в чём практический смысл? Если я уже нахожусь на сервере и могу пользоваться кнопкой tab, то что мешает мне просто запустить скрипт без автодополнения?
     
     
  • 2.2, Аноним (-), 12:17, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +13 +/
    Можно оставить такой файл в системе и надеяться, что администратор под рутом нажмёт на таб.
     
     
  • 3.4, Аноним (-), 12:29, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Администратор под рутом не должен запускать скрипты, которые можно было редактировать обычным пользователем.
     
     
  • 4.5, Аноним (-), 12:47, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +13 +/
    так он не узнает что запустил скрипт))
     
  • 2.9, Michael Shigorin (ok), 13:11, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А в чём практический смысл?

    Спросите дистрибутивы, где раздают беспарольное sudo, например.

     
     
  • 3.19, Аноним (-), 14:21, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > дистрибутивы, где раздают беспарольное sudo, например.

    Например PuppyLinux

     
     
  • 4.22, Аноним (-), 15:20, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Он как бы специализированный. И кстати в режиме LiveUSB в Ubuntu есть sudo, тоже беспарольный.
     

  • 1.10, Аноним (-), 13:18, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    традиционный опеннет - читать по-английски люди не умеют, но новость ляпнуть норовят.

    А теперь что на самом деле: когда bash делает tab-expansion - он неверно расставляет кавычки и экранирующие слэши в сложных случаях. enter нажимать, чтобы выполнить код - тебе, дорогой анон, придется самому, от простого нажатия tab ничего интересного в твоей системе не произойдет.

    Ну и мораль сей басни понятная - нажав таб и обнаружив, что у тебя вылезла какая-то нёх с управляющими символами - не надо нажимать enter, никогда, ни в bash, ни в чем-то еще. find -exec или xargs -0 rm ваши лучшие друзья.

     
     
  • 2.11, Аноним (-), 13:27, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Знатно ты в лужу газанул.

            $ ls
            '"'touch HereBeDragons''
            $ ./\"\'touch\ HereBeDragons\'/^C
            $ ls
            HereBeDragons  '"'touch HereBeDragons''
            $ echo $BASH_VERSION
            4.4.0(1)-release

     
     
  • 3.14, Аноним (-), 13:33, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ... что, впрочем, не отменяет необходимости читать оригинал.
     
  • 2.15, Аноним (-), 13:36, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > от простого нажатия tab ничего интересного в твоей системе не произойдет.

    "We can create a file with a specially crafted file name. A
    user trying to use bash' path completion feature ('TAB-completion') on
    this file will execute shell code [b]without any additional actions taken[/b]."

     
     
  • 3.20, пох (?), 14:45, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > this file will execute shell code without any additional actions taken."

    кто-то может подтвердить? (нету у меня новых-модных систем, свежайший bash из доступных - 4.1 )

    Если у них tab completion _исполняет_код_ до нажатия enter (и неважно, сам я его набрал или подсунули через баг с кавычками), чиста чтоб посмотреть нельзя ли потом еще что-то дописать в конец строки -  это какой-то феерический п-ц, не надо мне ТАКОГО автодополнения. То есть это вообще не ошибка, это design flaw.

    Из приведенных в pdf'е кусков кода и коммита b25f9dcb9e3 это, мягко говоря, неочевидно.

     
     
  • 4.21, Аноним (-), 15:18, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вон выше есть код для проверки. Собрал bash и проверил, работает как описано.
     
     
  • 5.23, . (?), 15:57, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Вон выше есть код для проверки. Собрал bash и проверил, работает как описано.

    а руками набранный? cd "/'touch /dev/shm/delme'<tab> ?
    (не собирать же мне это уродство ради проверки... тем более, что если подтвердится - вообще низачем не надо его собирать, его разобрать надо где собрано и думать, чем заменять)

     
  • 2.17, Аноним (-), 13:46, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Написано, что запускать не нужно, достаточно tab нажать.

    "A user utilizing GNU Bash’s built-in path completion by hitting the Tab button (f.e.
    to remove it with rm) triggers the exploit without executing a command itself."

     
  • 2.18, Аноним (-), 13:51, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это ты не так понял, в новости всё правильно написано. Для запуска кода достаточно нажать tab, не нажимая enter.
     

  • 1.13, ryoken (ok), 13:31, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > В командном интерпретаторе Bash выявлена уязвимость (http://openwall.com/lists/oss-security/2017/02/07/9)
    > (CVE-2017-5932 (https://security-tracker.debian.org/tracker/CVE-2017-5932)), которая
    > может быть использована (https://github.com/jheyens/bash_completion_vuln/blob/master/2017-01-17.bash_co)
    > для выполнения своего кода при выполнении операций автодополнения ввода клавишей табуляция.
    > Проблема затрагивает  ветку Bash 4.4. Исправление пока доступно только в
    > виде патча (http://git.savannah.gnu.org/cgit/bash.git/commit/?id=4f747edc625815f449048579).

    Мда...
    Ну хоть su без дырок?

     
     
  • 2.16, Аноним (-), 13:42, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну хоть su без дырок?

    Программы без дырок? Насмешил. А если даже были бы идеальные программы в вакууме, обнаружились бы дырки в железе.

     

  • 1.24, Марицуми (?), 15:58, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    На что переходить теперь, на zsh? Чтобы поменьше решета. А то шеллшок на шеллшоке сидит в самом деле.
     
     
  • 2.25, Аноним (-), 17:05, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    О, моя жена любит делать себе шеллак в салоне красоты
     
  • 2.27, пох (?), 18:31, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > На что переходить теперь, на zsh? Чтобы поменьше решета.

    ответ зависит от того заминусованного вопроса - cработает ли "эксплойт" не для имени файла, а для вручную набранного того же самого. Если это какая-то хитрожопая ошибка где-то именно в коде для file completion, то можно хоть на zsh, если ты можешь им пользоваться,почему же нет. Ну или просто bash откатить до пресловутого коммита, вряд ли там что-то, чем ты пользуешься каждый день.
    А вот если это таки баш без объявленя войны начал исполнять бэктикнутый код только ради того чтобы увидеть, не может ли он на его конце добавить комплешн - то бежать надо уже бросая обоз. Потому что это означает полное безумие авторов, они тебе еще не один такой фокус подкинут, если не завтра, так через год.

    К сожалению, вряд ли у тебя получится заменить zsh'ем /bin/sh - а начинать, во втором случае, надо с этого.

     
     
  • 3.32, Марицуми (?), 19:48, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Сабжевая уязвимость не в bash-completion, а именно в самом голом bash 4.4 с тупым автодополнением по filename/PATH.

    За что меня минусуют, что не так то? https://www.cvedetails.com/vulnerability-list/vendor_id-72/product_id-21050/GN 2 уязвимости за 2016, одна за 2017. В то время как https://www.cvedetails.com/vulnerability-list/vendor_id-7498/product_id-12642/ В GNU вообще слышали про юнит-тесты, всякое такое?

     
     
  • 4.39, Аноним (-), 21:00, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В GNU вообще слышали про юнит-тесты, всякое такое?

    А ты слепой что ли? http://git.savannah.gnu.org/cgit/bash.git/tree/tests

     
  • 4.41, пох (?), 23:47, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Сабжевая уязвимость не в bash-completion, а именно в самом голом bash 4.4 с тупым
    > автодополнением по filename/PATH.

    было б оно тупое - не было б уязвимости. А оно не тупое - пытается исполнять команду до того, как ее до конца набрали, ну ахренеть, дайте две (это хорошо коли две, а не двадцать две).

    > В GNU вообще слышали про юнит-тесты, всякое такое?

    ну а откуда возьмется юнит-тест, если раньше такой проблемы не было? Это ж надо было догадаться о возможности ее появления. А от юниттеста на функциональность этой фичи - ни жарко, ни холодно, он-то может и есть (и выдал положительный результат, completion-то сработал ;-)

    Ну и внимания zsh'у уделяется в разы меньше - так что о качестве кода, к сожалению, число cve ничего не говорит.

    P.S. интересно, сколько было уязвимостей в bash-1.14.7 ? И кто может сходу назвать ситуацию, когда ему нужна версия новее.

     

  • 1.26, Michael Shigorin (ok), 17:59, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    "В альте старый баш", верещали они...
     
     
  • 2.28, annual slayer (?), 19:11, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    альт распологал инсайдерской информацией об этой уязвимости?
     
     
  • 3.29, Michael Shigorin (ok), 19:23, 08/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В данном разе, как понимаю, нет.
     
  • 2.42, Линукс еще не готов (?), 05:12, 09/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А почему в ал те баш а не какой нибудь zsh
     
     
  • 3.45, PereresusNeVlezaetBuggy (ok), 07:58, 09/02/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А почему в ал те баш а не какой нибудь zsh

    Ребят, вы смеётесь? Уж на что bash развесистый в плане фич, так zsh его обходит. Так что менять bash на zsh глупо. Уж скорее в сторону (PD)KSH надо смотреть...

     
     
  • 4.47, Michael Shigorin (ok), 16:05, 09/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> А почему в ал те баш а не какой нибудь zsh
    > Ребят, вы смеётесь? Уж на что bash развесистый в плане фич,
    > так zsh его обходит. Так что менять bash на zsh глупо.
    > Уж скорее в сторону (PD)KSH надо смотреть...

    Как многолетний пользователь zsh, майнтейнер пакета pdksh и ловец плюх в (d)ash никак не могу согласиться -- в качестве интерактивного шелла мне всё-таки оптимален именно zsh. :)

     
     
  • 5.49, пох (?), 00:17, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ты лучше скажи, на что менять /bin/sh ? Учитывая миллион кривых скриптов (да хоть в тех же rpm'ах) которые радостно развалятся если его заменить чем-то недостаточно похожим на bash.
    Ну и отдельно - что делать со скриптами где явно #!/bin/bash - кроме как, конечно, найти и убить их авторов, но это задача не на одно столетие, они размножаются.

    Перейти на one true 1.14.7? Так в нем наверняка тоже дыр полно.

     
     
  • 6.51, Michael Shigorin (ok), 00:47, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ты лучше скажи, на что менять /bin/sh ?

    У нас это собранный по минимуму bash3 (по крайней мере доныне).

     
     
  • 7.52, пох (?), 12:16, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > У нас это собранный по минимуму bash3

    ну и вот чего в нем хорошего? Дыр в нем - было, сколько неанонсированных или вообще незамеченных и просто выброшенных вместе с кусками кода, переделанного в 4 - неведомо.

    Не-ет, вниз это не наш путь.

     
     
  • 8.53, Michael Shigorin (ok), 12:36, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот это ... текст свёрнут, показать
     
  • 6.54, Аноним (-), 16:41, 11/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Почему никто уничижительно не вопит про "те, кто пишет #!/bin/bash, а не #!/usr/bin/env bash" ? Что случилось с opennet-ом?
     

  • 1.37, Аноним (-), 20:33, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати: "культура" коммитов удивительно уродская для такого проекта.
     
     
  • 2.50, пох (?), 00:18, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Кстати: "культура" коммитов удивительно уродская для такого проекта.

    для проекта, начатого во времена sccs - неудивительно.

     

  • 1.40, Аноним (-), 22:32, 08/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Так не работает же.

    GNU bash, version 4.4.11(1)-release (x86_64-unknown-linux-gnu)

     
     
  • 2.43, Аноним (-), 05:37, 09/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Может потому, что в 4.4.11(1) исправили?
     

  • 1.46, Аноним (-), 13:55, 09/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    это вам не systemd, это хорошая, отлаженная система
     

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



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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