Недавно я обнаружил, что на сервере, над которым я работаю, есть служба xinetd, которая на самом деле является сценарием оболочки, который вызывает другой сценарий оболочки с аргументами, полученными через соответствующие сетевые соединения.
Это происходит примерно так:
/execute/another/script $WITH $A $FEW $ARGUMENTS
Что заставляет меня опасаться, что это реальная проблема, так это тот факт, что переменные никаким образом не дезинфицируются, и, поскольку это выполняется как root, к этому следует относиться серьезно.
Может кто-нибудь посоветовать? Мне также было бы любопытно узнать, как можно злоупотреблять переменными в таких ситуациях, чтобы выполнить что-то еще, может кто-нибудь привести примеры?
Я вижу два типа атак. Один против самого скрипта, вызывая его с данными, которые могут дать повышенные привилегии. Другой - против bash, используя переполнение буфера или другие ошибки bash. Одна из проблем заключается в том, что bash не был разработан для обеспечения хорошей защиты от атак такого типа, потому что он ожидает, что входные данные будут вводиться тем же человеком, что и тот, кто его запустил.
Как минимум, я бы обновил сценарий bash, чтобы он мог работать как обычный пользователь и использовать sudo
или другой механизм Unix для вещей, требующих повышенных привилегий.
Как насчет этого?
export ARGUMENTS='ValidArg&mkdir /var/tmp/hello_there'