Почему BSD версии 1.10 из nc
отключить -e
вариант, найденный в других, так называемых небезопасных дистрибутивах, когда та же самая опасная функция может быть тривиально реализована следующим образом даже с «безопасной» версией nc
:
$ # Machine A
$ mkfifo pipe
$ nc -l 4000 <pipe | bash >pipe
$ # Machine B
$ nc MachineA 4000
Теперь, если бы я завершил заклинание на машине A в сценарии (который, если передан аргумент `-e ', эффективно выполняет вышеупомянутое), я, по сути, ввел` `зияющую дыру в безопасности' ', не уходя в Makefile и на уровень сборки.
Итак, зачем идти на #define
-ing GAPING_SECURITY_HOME
в netcat.c
?
Хотя у меня нет окончательного ответа, я считаю, что зияющая дыра в безопасности присутствует только в том случае, если ваш nc
имеет -e
включен и это setuid root. (Так как nc
часто используется для привязки к портам, он может быть упакован с помощью setuid root, чтобы позволить всем пользователям подключаться к привилегированным портам ниже 1024.)
В этой ситуации nc -e
бы exec
данный процесс как root - что означает, что он позволит любому пользователю запускать любой процесс как root. Я уверен, вы поймете, что это зияющая дыра в безопасности. Напротив, если вы запускаете свой собственный процесс и используете каналы для его подключения к nc
, этот процесс не запускается от имени пользователя root, если у вас нет другого способа повысить его (например, sudo
доступ).
Так как похотливость указал, netcat первоначальное объявление о выпуске жаловался, что
коммерческие поставщики, вероятно, упаковали бы [netcat] setuid root и с
-DGAPING_SECURITY_HOLE
включен, но не задокументирован.
Думаю, это придает вес моей теории. :)
из оригинальное объявление о выпуске:
Обязательный vendor-bash: если бы "nc" стала стандартной утилитой много лет назад, коммерческие поставщики, вероятно, упаковали бы ее setuid root и с
-DGAPING_SECURITY_HOLE
включен, но не задокументирован. Есть надежда, что netcat поможет людям найти и исправить непростые дыры такого рода, которые продолжают появляться, облегчая эксперименты с «голым металлом» сетевого уровня.
Не то чтобы это проясняло ...
Я могу использовать netcat -e для запуска другого приложения, например imap или pop3. Раздел "#ifdef GAPING_SECURITY_HOLE" может содержать ошибку, которая позволяет вам запускать оболочку, поэтому она по умолчанию отключена. ifdef оборачивает критически важный для безопасности раздел.