Уязвимость ShellShock опаснее, чем Heartbleed

Специалисты считают, что уязвимость в bash не уступает по своему масштабу и возможным последствиям печально известному багу Heartbleed в OpenSSL. Возможно, даже превосходит его.

И дело не только в том, что уязвимость присутствовала в bash около 22 лет. И не в том, что оперативно выпущенные апдейты не исправляют её. Главная проблема в том, насколько широко распространённым является этот баг и насколько богатые возможности для взлома он предоставляет. Уязвимы не только серверы и персональные компьютеры, но и маршрутизаторы, камеры видеонаблюдения и многие другие устройства. Огромное количество старых устройств так и не получит обновления.

Не будет преувеличением сказать, что в течение ближайших нескольких лет многие компьютеры под Linux и Mac OS всё ещё будут открыты для удалённого выполнения кода. Прошло почти полгода с момента обнаружения Heartbleed, но до сих пор не все системы пропатчены.

Более того, возможно создание сетевого червя, который будет распространяться через CGI-скрипты.

Проверка компьютера на наличие уязвимости CVE-2014-6271 осуществляется, например, такой командой:

export evil='() { :;}; echo vulnerable'; bash -c echo;

Проверка скрипта CGI:

curl -i -X HEAD "http://website" -A '() { :;}; echo "Warning: Server Vulnerable"'

Кстати, появились свидетельства, что вышедший вчера патч не полностью устраняет проблему.

Уязвимость в bash уже получила персональное имя: ShellShock. Таким образом, она стала второй уязвимостью в истории, удостоенной подобной чести.

P.S. Баг в bash обнаружил французский специалист по Unix/Linux Стефан Чазелас (Stephane Chazelas).

UPD.

Пример запуска PoC с небольшим изменением на Mint с последними обновлениями:

env X='() { (a)=>\' /bin/bash -c "echo date"; cat echo

Kudos Борис «dukebarman» Рютин и @taviso

Анатолий Ализар: Бывший автор новостной ленты «Хакера». Увлекается современными технологиями, оружием, информационной безопасностью, носимой электроникой и в целом концепцией Internet of Things.

Комментарии (19)

  • Ребят , вот честно , что за дела - вы народу сначала скажите что для того что это прокатило , у атакующего должна быть валидная учетная запись с возможностью залогиниться
    Этот метод позволяет обойти только случаи когда залогиниться можно но нет возможности получить шелл. CGI сценарии с пробросом сырых данных через bash env , серьёзно ? сейчас начало 2000х ? кто так сейчас делает вообще ? много шума , реальных векторов очень не много. И вы сравниваете по важности с уязвимости которая позволяла сделать дамп памяти любому пользователю ? Seriously ?

    • А то, что CGI по своей природе кидает данные из HTTP-запроса в переменные среды, это как?

  • Мастадаев в нашем полку прибыло...

  • Ну про роутеры и камеры вы загнули, там везде базибокс. Как и на ведроидах.

  • А чему удивляться: в исходниках так прямо и написано:
    "/* variables.c -- Functions for hacking shell variables. */" :)

    • скинь пруф. +- 5 строк перед и после. Хочу посмотреть где нашёл

  • :~$ env X='() { (a)=>' sh -c "echo date"; cat echo
    env X='() { (a)=>' sh -c "echo date"; cat echo
    date
    cat: echo: Нет такого файла или каталога

    :~$ export evil='() { :;}; echo vulnerable'; bash -c echo;
    export evil='() { :;}; echo vulnerable'; bash -c echo;
    bash: внимание: evil: ignoring function definition attempt
    bash: ошибка при импортировании определения функции`evil'

    • :~$ env X='() { (a)=>' /bin/bash -c "echo date"; cat echo
      /bin/bash: X: строка 1: ошибка синтаксиса около неожиданной лексемы `='
      /bin/bash: X: строка 1: `'
      /bin/bash: ошибка при импортировании определения функции`X'
      Чт. сент. 25 16:44:03 MSK 2014

      • если у вас Ubuntu-подобная система замените sh на bash

        • :~$ fgrep usr /etc/passwd
          usr:x:1000:1000:usr,,,:/home/usr:/bin/bash

      • обновился... сейчас ругается какойто хренью

        • после обновления как раз и должен ругаться, что не может выполнить этот код

  • Поподробнее бы расказали, как проверить компьютер на наличие уязвимости. Своего рода туториал.

    • export evil='() { :;}; echo vulnerable'; bash -c echo;
      выполни и посмотри, что напишет

      • bash: warning: evil: ignoring function definition attempt
        bash: error importing function definition for `evil'

        А вот второй вывел дату. Правда, я так и не понял, почему бы мне не набрать просто date