Как я могу вызвать / sbin / iptables из Perl CGI в режиме taint? - PullRequest
0 голосов
/ 12 октября 2010

Когда я вызываю «sudo / sbin / iptables ...» в моих скриптах Perl CGI, я получаю ошибку:

Insecure dependency in system while running with -T switch at usr/lib/perl5/vendor_perl/5.8.8/IPC/Run3.pm line 403

Я пытался добавить "/sbin:/etc/sysconf:/etc/init.d" в $ ENV {'PATH'}, но все еще безуспешно. У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

Предполагается, что вы ограничите путь, то есть установите для него небольшое количество известных значений, соответствующих определенным требованиям (например, $ENV{PATH} = '/sbin:/usr/sbin:/usr/bin';), а не добавляйте к нему.Подробнее см. Очистка пути в perlsec.

В вашем простом случае лучше всего очистить его полностью и полагаться только на системные вызовы сполные имена файлов.

delete @ENV{qw(PATH ENV)};
system qw(/usr/bin/sudo /sbin/iptables -h);
3 голосов
/ 12 октября 2010

Да, у вас небезопасная зависимость в системе при работе с ключом -T.: p

Вы запускаете свой скрипт в режиме taintperl и вызываете внешнюю программу (с sudo, не менее) с данными, основанными на информации, переданной от пользователя (которая может быть испорчена).Если вы действительно уверены, что вывод действителен и не представляет опасности, вам необходимо его не замечать: см. Официальную документацию о отмывании испорченных данных .

Вы должны быть действительно осторожными при запуске внешних программ или выполнении системных операций из CGI - например, подумайте, что может произойти, если вы введете `rm -rf /` в качестве пользовательского ввода. perldoc perlsec содержит много информации, с которой можно начать, но также написано несколько книг о написании безопасного кода.

...