Как уязвимость Bash Контузии была найдена?

Я нашел, что команда просмотрела время установки жесткого диска:

ls -l /dev/hdisk
19
12.12.2014, 15:58
1 ответ

Чтобы успокоить несколько, я не нашел ошибку, наблюдая за эксплуатациями, у меня есть Нет причин полагать, что это было эксплуатировано перед раскрытием (Хотя конечно, я не могу его исключить). Я не нашел это Глядя на Bash код либо.

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

Это более или менее пришло из некоторого отражения на некоторых поведении Некоторые программное обеспечение я нахожу опасно (поведение, а не програмное обеспечение). Такое поведение, которое заставляет вас думать: не звучит как хорошая идея .

В этом случае я отражал общую конфигурацию SSH, что позволяет пропускать переменные среды нецизированы из Клиент предоставил свое имя начинается с LC_ . Идея такая что люди могут продолжать использовать свой собственный язык, когда SSH в другие машины. Хорошая идея, пока вы не начнете рассмотреть Насколько сложна обработка локализации, особенно когда UTF-8 принес в уравнение (и видеть, насколько плохо это обрабатывается много приложений).

Вернувшись в июле 2014 года, я уже сообщил о уязвимости в Обработка локализации Glibc, которая в сочетании с этим SSHD config, а Два других Опасное поведение Bash Shell Допускается (аутентифицированные) злоумышленники, чтобы взломать серверы Git при условии, что они смогли загружать файлы там и Bash Используется в качестве входа в систему Shell из пользователя GIT Unix (CVE-2014-0475).

Я думал, что это, вероятно, была плохой идеей использовать Bash как вход в систему Shell из пользователей, предлагающих услуги по SSH, учитывая, что это довольно Комплексная оболочка (когда все, что вам нужно, просто разбирается очень простая командная строка) и унаследовала большинство ошибок KSH. Поскольку я уже определил несколько проблем с Bash используется в этом контексте (интерпретировать SSH Forcecommand , я был Удивительно, если бы там было потенциально больше.

ACCECTENV LC _ * позволяет любую переменную, имя которой начинается С LC_ и у меня была расплывная воспоминания, которую экспортировал Bash Функции (A опасно , хотя и на момент полезной функции) были используя переменные среды, имя которого было что-то вроде Myфункция () и было интересно, если бы не было чего-то Интересно смотреть там.

Я собирался отклонить его на том основании, что худшее Может ли сделать было бы переопределить команду под названием lc_something что не может быть проблемой, так как они не существуют Команды, но тогда я начал удивляться, как Bash импортировал те переменные среды.

Что если переменные были вызваны LC_FOO; Echo Test; f () Например? Поэтому я решил посмотреть.

A:

$ env -i bash -c 'zzz() { :;}; export -f zzz; env'
[...]
zzz=() {  :
}

показал, что моя воспоминания ошибалась в том, что переменные не были названы Myфункция () , но MSFunction (и это значение , которое начинается с () ).

и быстрый тест:

$ env 'true;echo test; f=() { :;}' bash -c :
test
bash: error importing function definition for `true;echo test; f'

подтвердил мое подозрение, что имена переменной не было дезинфицировано, И код был оценен при запуске .

Хуже, намного хуже, значение также не было дезинфицировано:

$ env 'foo=() { :;}; echo test' bash -c :
test

, что означало, что любой переменной среды может быть вектором.

Это когда я понял, что степень проблемы, подтвердила, что это было Эксплуатация также по адресу http ( http_xxx / QueryString ... Env vars), другие, такие как услуги по обработке почты, позже DHCP (и, вероятно, длинный список) и сообщил об этом (тщательно).

23
27.01.2020, 19:45

Теги

Похожие вопросы