Атака через подстановку аргументов при использовании масок в командной строке

Специализирующаяся на компьютерной безопасности компания DefenseСode обратила внимание на реальность эксплуатации особенностей обработки масок при выполнении утилит в командной строке. Суть проблемы в том, что при указании масок, таких как «*», осуществляется простая замена списка в командной строке, при которой имена файлов начинающиеся с символа «-» интерпретируются не как файлы, а как переданные утилите опции. Данное поведение до сих пор рассматривалось не как уязвимость, а как известная особенность командных интерпретаторов.

Например, если запустить «rm *» и в текущей директории окажется файл с именем «-rf», то будет применена опция «rm -rf», что приведёт к удалению не только файлов, но и директорий. Другим примером может послужить создание файла с именем «—reference=.file.php», что при выполнении команды «chown nobody:nobody *.php» (или «chmod 000 *») приведёт к смене владельца не на пользователя nobody, а на владельца файла «.file.php» (или к смене прав на права файла «.file.php», которые могут быть -rwxrwxrwx). Если этот файл является символической ссылкой на /etc/shadow и команда выполнена под пользователем root, то смена владельца/прав будет произведена и для /etc/shadow.

Исследователи из DefenseСode считают, что такое поведение следует рассматривать как уязвимость, в доказательство чего опубликовали технику атаки, которая может привести к выполнению кода при использовании утилиты tar. Если атакующий создаст файлы «—checkpoint=1» и «—checkpoint-action=exec=sh shell.sh», а администратор выполнит для архивирования типичную команду «tar cvvf archive.tar *», то после добавления одного файла в архив будет запущен скрипт shell.sh.

Аналогичного эффекта можно добиться при использовании утилиты rsync: создание файла «-e sh shell.c» и запуск «rsync -t *.c foo:src/» приведёт к выполнению скрипта «shell.c». Метод работает и для утилиты scp: создание файла «-o ProxyCommand shell.sh %h %p» и выполнение «scp * user@example.org:/var/www/» приведёт к запуску скрипта shell.sh и передаче ему в качестве аргументов имени хоста и номера порта. В качестве средства для защиты от подобных атак рекомендуется использовать «—» или «./» перед маской, например, «rm — *» или «rm ./*».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.