Почему «AcceptEnv *» считается небезопасным?


12

В /etc/ssh/sshd_config, есть опция, AcceptEnvкоторая позволяет клиенту ssh отправлять переменные окружения. Мне нужно иметь возможность отправлять большое количество переменных среды. Они изменяются при каждом подключении от клиента, поэтому будет сложнее поместить их в сценарий входа на сервер.

Я читал, что "AcceptEnv *"это небезопасно. Я хотел бы понять, почему, прежде чем я попытаюсь получить список всех переменных среды, которые пытаются установить там.

Почему это считается небезопасным? Могу ли я получить пример?

Ответы:


11

Включение обработки среды может позволить пользователям обойти ограничения доступа в некоторых конфигурациях, используя такие механизмы, как LD_PRELOAD.

Не все версии справочных страниц для sshd_config упоминают об этом. Если переменные среды предварительно изменены и определенные привилегированные процессы выполняются с новыми библиотеками, указанными в этом, могут возникнуть проблемы.

Взгляните на http://www.dankalia.com/tutor/01005/0100501004.htm и найдите «LD_PRELOAD Exploit». Извините, на странице нет якорных ссылок.

Смотрите также этот вопрос StackOverflow: « Что такое трюк LD_PRELOAD? »

Устанавливать переменные среды после подключения - это хорошо, но когда эти переменные интерпретируются демоном ssh, как установлено AcceptEnv, могут возникнуть плохие вещи.


1
Чем он отличается от того, когда они устанавливают переменные вручную после входа в систему?
Джозеф Гарвин

1
@JosephGarvin, некоторые системы имеют ограниченные оболочки или допускают только одну конкретную команду, так что «они» не могут . Таким образом, проблема заключается в том, чтобы обеспечить средства, с помощью которых можно обойти такие меры безопасности.
Чарльз Даффи

0

Не принимайте переменные среды:

Посмотрите эксплойт Shellshock, который вышел недавно ... если вы принимаете переменные окружения, вы открываете действительно неприятный эксплойт.


1
Вы распространяете страх ИМО. Если вас это беспокоит, почему у них есть доступ по SSH? И, кстати, вы не можете помешать им устанавливать переменные окружения, когда они находятся в оболочке или даже в функциях. Этот эксплойт касается несанкционированного доступа к оболочке через такие вещи, как nginx, а не авторизованного доступа к оболочке.
Джордон Бедвелл

В любом случае вы принимаете хотя бы один env. переменная с именем TERM. Может существовать необходимость принимать другие переменные, такие как PRINTER, EDITOR, PAGER, ...
ibre5041

@JordonBedwell, не каждое соединение SSH будет разрешено для оболочки доступа. У меня есть несколько систем, в которых есть учетные записи, для которых единственная аутентификация - с ключом SSH, который позволял выполнять только одну конкретную команду (с идентификацией владельца этого ключа и другими запеченными данными).
Чарльз Даффи

... тем не менее, я согласен, что по состоянию на 2017 год ShellShock очень сильно раздут. При текущей реализации, порождая экспортированной функции не требует контроля не только над переменной окружающей среды в значении , но и его имя (и процесс оценки экспортированных функций при запуске оболочки уже само по себе не склонны к атакам нагнетательных).
Чарльз Даффи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.