nixp.ru v3.0

20 апреля 2024,
суббота,
02:05:02 MSK

16 января 2015, 11:16

Баг в Bash-скрипте Steam может привести к удалению всех пользовательских файлов из Linux-системы

4
Демотиватор на тему Epic Fail
Демотиватор на тему Epic Fail
Иллюстрация с сайта Visualogs.Com

В коде Bash-скрипта Linux-клиента Steam обнаружили досадную ошибку, которая может привести к полному удалению из операционной системы всех файлов, для которых у текущего пользователя есть права на запись.

Ошибка в скрипте от Valve напоминает легендарный баг в коде install.sh проекта Bumblebee для драйверов NVIDIA (см. GitHub), который удалял всё содержимое файловой системы, за что снискал широкую огласку в Open Source-сообществе. Посудите сами — вот фрагмент исходного кода из Bash-скрипта от Steam, что может спровоцировать выполнение команды rm -rf /*:

# figure out the absolute path to the script being run a bit
# non-obvious, the ${0%/*} pulls the path out of $0, cd's into the
# specified directory, then uses $PWD to figure out where that
# directory lives - and all this in a subshell, so we don't affect
# $PWD
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
[...]
# Scary!
rm -rf "$STEAMROOT/"*

Баг в Linux-версии Steam не просто является «потенциальным»: в тикетах GitHub проекта уже появилась запись от первого(?) пользователя, непосредственно пострадавшего ввиду неожиданной работы скрипта.

Сообщество уже предлагает свои варианты исправления этой ошибки, так что новый релиз Linux-версии Steam должен быть не за горами.

Постоянная ссылка к новости: http://www.nixp.ru/news/13100.html. Дмитрий Шурупов по материалам TechRepublic.

fb twitter vk
Филипп Корвин

«Гыыы, сына, лол». Такие вот баги могут оказаться хуже критичных уязвимостей в вопросе популяризации опенсорса…

Aceler

А зачем там «rm -rf „$STEAMROOT/“*», почему не сделать «rm -rf «$STEAMROOT»»?

Илья Смирнов

Класс! Я только собрался на новой машине Steam установить, и тут такое :)

rgo

На самом деле баг гораздо глубже. Это вендовый баг в головах разработчиков. Пытаться угадать куда установлен бинарь и на основании этого делать какие-то выводы — это вендовое мышление. На венде — это встречается везде и всюду, там это нормально. В *nix это дебилизм. Единственный способ, который выглядит работоспособным — это написать что-то в стиле STEAMROOT="`which «$0»`». Да и то, я бы не стал полагаться на результат. В качестве грязного хака для одной системы может и покатит. Но в качестве хака, который будет применятся на широком спектре систем — не стоит. Во-всяком случае, навскидку, я не могу отмести возможность существования такого способа запуска программы, чтобы её $0 был бы создан в расчёте на одно содержимое $PATH, а программа бы получила другое содержимое. Даже более того, чем дольше я об этом думаю, тем больше у меня подозрений, что это вполне возможно.

Правильным подходом была бы default директория установки, и «ничего не работает», если эта директория была изменена. Плюс какой-нибудь способ поставить в другую директорию путём правки конфигов/скриптов, пересборки с другими опциями configure и тому подобными способами. Хомячкам, которые не могут исправить скрипты лучше терпеть установку по-умолчанию. Остальные, в случае чего — ССЗБ.

fhunter

не which «$0»
а как-то так: cd $(dirname $(readlink -f «$0»))
Но да, это просто жуть.

rgo

Насчёт dirname и readlink принято, но which всё равно нужен.