Есть мнение, что уязвимость в Bash с безусловным исполнением кода, который следует за символами “() {”, —это не баг, а фича. По мнению одного эксперта, данный факт совершенно очевиден. Пусть и плохо реализованная и неправильная, но всё равно ясно видно, что это намеренно внедрённая фича.
Проблема в том, что Bash разработали 25 лет назад. До появления Apache оставалось ещё пять лет. Интернет уже существовал, но это был относительно закрытый клуб для представителей академической науки. Им пользовались учёные и исследователи из разных университетов. В то время безопасность не считалась важным приоритетом при разработке новых программ. И уж тем более при разработке командного процессора Bash.
В контексте оболочки Unix дочерние процессы создаются и работают совершенно обычным и естественным образом. При создании нового дочернего процесса можно использовать переменные окружения, чтобы передать какие-то данные от родительского процесса к дочернему. В случае с Bash требовалась такая опция, чтобы какие-то функции, описанные в родительском процессе, передавались в дочерний. Вполне естественно, что для этого использовали переменные окружения.
Реализация слегка вышла за рамки спецификаций в том смысле, что Bash исполняет любую команду после определения функции, переданной в переменной окружения. Обычно там не должно быть никакого кода. Но в контексте программы Bash, если пользователь добавляет команды в эти переменные окружения, это можно считать фичей. В любом случае, дочерний процесс исполняется с правами того, кто установил переменные окружения, так что здесь не предвиделось проблем с безопасностью.
Настоящая проблема заключается в том, что через пять лет после создания Bash появились приложения вроде apache, dhcp и др., которые могут использовать Bash в дочерних процессах и в то же время используют переменные окружения для передачи данных. К сожалению, эти данные могут также поступать не от доверенного пользователя в локальной системе, а от кого угодно через интернет. И вот здесь недокументированная (и забытая) функция Bash превращается в мега-уязвимость, которая сейчас всем известна под названием Shellshock.
Никто не предполагал, что Apache и другие программы будут обрабатывать переменные окружения от дочерних процессов таким образом. Если и считать это багом, то это баг не Bash, а баг Apache и остальных программ, которые разрешают исполнение кода после символов “() {”.
В принципе, считает эксперт, если бы спецификации для Bash составлялись тщательно и подробно, то эта функция вполне могла войти в спецификации.
29.09.2014 в 12:23
Ну боржоми-то пить уже поздно, форкать надо и пилить замену. Или вообще с нуля, как некоторые.
29.09.2014 в 12:51
«Если и считать это багом, то это баг не Bash, а баг Apache и остальных программ, которые разрешают исполнение кода после символов “() {”» — перевести оригинал нормально не могли? Апач и прочая НЕ ИСПОЛНЯЮТ код из переменных окружения, они лишь используют bash, не проверяя передаваемые ей данные на валидность. Так что ShellShock — это всё-таки BashCrash. 🙂
29.09.2014 в 14:28
Как раз нахожусь на on-site пентесте и когда опубликовали информацию о шеллшоке — дополнительный видный finding в отчет :).
А в целом отчасти с автором согласен — не совсем это баг (в момент создания оно было ок), но и не совсем фича (ибо документированно плохо и создатели Апача и т.д. видимо об этом просто не знали).
29.09.2014 в 18:57
poetomu dla anonimnosti v seti nujni odnorazovie devaysi. vse ostalnoe erunda!!! backdoori v jeleze!!! a v softe tem bolee!!!
http://mrixs.ru
30.09.2014 в 12:26
Это всё-таки в текущей ситуации — баг. Если бы возможность исполнения кода из переменной окружения после определения функции была описана и задокументирована, то да — была бы фича.
30.09.2014 в 12:54
Плюс ко всему, зачем такая возможность вообще нужна? Почему нельзя поместить команды в тело функции? Что-то типа авторана?
30.09.2014 в 22:09
Прям заново баш писать ? Патчи для слабаков ?
http://romanakamagician.tumblr.com/
01.10.2014 в 01:58
Классическое ИТ: не можешь исправить баг — скажи, что фича 🙂
03.10.2014 в 14:38
А где тут у вас свежие новости? Эта — последняя?