Почему способность состоит в том, чтобы определить функции в переменной окружения не угроза безопасности сам по себе?

Для отключения сообщения перейдите в /etc/postfix/main.cf и изменение от:

inet_protocols = all

кому:

inet_protocols = ipv4

Это будет только использовать ipv4, и предупреждающее сообщение уйдет.

Необходимо будет выпустить остановку и запуститься, чтобы постфикс зарегистрировал изменение. Простая перезагрузка уступит:

почтовый постфикс/ведущее устройство [8330]: перезагрузка - версия 2.9.6, конфигурация/etc/postfix почтовый постфикс/ведущее устройство [8330]: предупреждение: игнорирование inet_protocols почтовый постфикс/ведущее устройство изменения значения параметра [8330]: предупреждение: старое значение: "все", новое значение: почтовый постфикс/ведущее устройство "ipv4" [8330]: предупреждение: для изменения inet_protocols остановите и запустите Постфикс

9
22.05.2016, 20:24
2 ответа

Это уровень безопасности. Это, как правило, почему вы не можете сделать это при включении к другому контексту (пульт дистанционного управления системой, меняющимися пользователями и т. Д.).

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

Вот почему такие вещи, как Sudo , разделяйте среду всех переменных. Sudo позволяет через несколько выбирать переменные. И из этих переменных он их дезинфицирует (он проходит через переменную $ Term , но это не будет, если она содержит необычные символы).

10
27.01.2020, 20:06

Я бы сказал, что это так, когда bash - это ваш / bin / sh. Это не функция оболочки bourne, и я готов поспорить, что это не функция оболочки posix, на самом деле они могут захотеть прямо запретить ее.

Bash - это в большей степени производная оболочка от Korn, чем оболочка Bourne, несмотря на свое название, и это единственная оболочка, подобная Korn, которая имеет такую ​​функцию, и, на мой взгляд, это функция кухонной раковины, которая не имеет практических достоинств. Разработчики, которые избегают функций bash для стандартов, таких как оболочка bourne, оболочка posix или подмножество ksh88, которые являются общими для современных оболочек, или, другими словами, привержены передовым методам и стандартным идиомам, шокированы, когда их программное обеспечение включено. linux и mac и теперь потенциально уязвимы, поскольку авторы эксплойтов могут свободно использовать «башизмы», несмотря на свои намерения. Что касается улучшенной совместимости, при вызове как / bin / sh по сравнению с другими производными оболочки korn, это только в том случае, если / bin / sh является вашей оболочкой входа в систему или интерактивной оболочкой, когда bash ведет себя больше как оболочка bourne, чем оболочка korn, но при использовании в сценариях вы можете делать все, что может делать bash, и он никогда не жалуется и не предупреждает вас о том, что вы используете функции, которые действительно являются функциями оболочки korn или уникальны для bash.

Попробую вас убедить, что это кухонная мойка, но в двух случаях: вы - встраиваемый разработчик, который делает такие устройства, как маршрутизаторы, сетевые хранилища 1-й более крупный env, означает больше памяти, значит, больше затрат, значит, меньше прибыли, Итак, если это была причина рассмотреть возможность использования этой функции bash, не следует ли вам вместо этого использовать вместо этого FPATH и автозагрузку, функции ksh88? вместо того, чтобы передавать весь байт функции за байтом в среде? Вы даже можете подумать о синтаксическом анализе и сокращении среды сразу до того, как она дойдет до сценария оболочки, который мог бы неправильно проанализировать переменную, например, просто отфильтровать ^ $ (. *) $ И тому подобное ...

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

#!/bin/sh
exec /usr/local/myapp/support/someperlscript.pl

Для всего остального, что находится под солнцем, вышеперечисленное должно быть таким же безопасным, как и сценарий Perl, вы не используете какие-либо переменные, как вы могли их неправильно проанализировать? Переход на

#!/bin/bash -norc
exec /usr/local/myapp/support/someperlscript.pl

тоже не помогает, это не имеет ничего общего с ENV или чем-то в этом роде - все сгорают, потому что bash должен быть уникальным. Тот факт, что у bash версии 2 есть проблема, для меня доказывает, что никто никогда не использует эту функцию для своих приложений, потому что в противном случае он должен был не скрываться это долго. И что еще хуже, этой возможности практически не избежать. Вот пример: с 'su -', что, если вы спросите кого-нибудь, объяснение будет заключаться в том, что он отбрасывает среду, проверьте страницу руководства, и вы найдете только 99,9%. Я проверил это правильно, так как в этой системе / bin / sh - это оболочка для входа в систему root, а / bin / sh - это bash НО , в этом примере я пытаюсь укрепить мой .bash_profile . Я переименовал свой существующий для root (который включен), но я подумал, что если su, то, возможно, sudo, в любом случае я изменил это:

exec env -i TERM=vt102 LOGNAME=root USER=root HOME=/var/root /bin/ksh -i

Итак, я на самом деле полностью отбрасываю среду и использую минимальный env, а затем запустить оболочку, в которой не должно быть проблемы, вместо текущего процесса. Затем вместо стандартного примера попробуйте:

%dock='() { echo -e "\e[2t\c"; echo dockshock;} ; dock' su 

Это иллюстрирует, что это не имеет ничего общего с синтаксическим анализом какой-либо конкретной функции, и что эксплойт может ссылаться на эту функцию и использовать ее. Вы можете представить себе функцию, имеющую логику для проверки наличия root и т. Д. В этом случае это просто измененная форма функции для значков или закрепления окна терминала с использованием escape-последовательности, что довольно стандартно, поэтому после того, как я щелкнув для удаления значка, я вижу докшок - ну и что? А теперь попробуйте следующее:

%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su - 

И знаете что? Окно втягивается в док. Вот как это выглядит потом ..

%TERM='() { echo -e "\e[2t\c"; echo dockshock;} ; TERM' su -
Password:
dockshock
# env
_=/usr/bin/env
HOME=/var/root
LOGNAME=root
TERM=vt102
USER=root
# echo $0
/bin/ksh
#

Так, хватит! Экспортируемые функции фактически имеют приоритет над сценариями rc. Вы не можете увернуться.

3
27.01.2020, 20:06

Теги

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