netcat -e: GAPING_SECURITY_HOLE
Почему 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
-ную GAPING_SECURITY_HOME
в netcat.c
?
3 ответа
Хотя у меня нет однозначного ответа, я считаю, что зияющая дыра в безопасности присутствует, только если ваша nc
имеет -e
включен и установлен root. (Как nc
часто используется для привязки к портам, это может быть упакованный пакет setuid root, чтобы все пользователи могли связываться с привилегированными портами ниже 1024.)
В этой ситуации nc -e
было бы exec
данный процесс от имени root - это означает, что любой пользователь сможет запускать любой процесс от имени root. Я уверен, что вы поймете, что это зияющая дыра в безопасности. Напротив, если вы запускаете свой собственный процесс и используете каналы, чтобы подключить его к nc
этот процесс не запускается от имени пользователя root, если у вас нет другого способа повысить его (например, sudo
доступ).
Как отмечает grawity, оригинальное объявление о выпуске grawity жаловалось, что
коммерческие поставщики, вероятно, упаковали бы [netcat] setuid root и
-DGAPING_SECURITY_HOLE
включен, но не задокументирован.
Это придает вес моей теории, я думаю.:)
Из оригинального объявления о выпуске:
Обязательный vendor-bash: если бы nc стал стандартной утилитой несколько лет назад, коммерческие поставщики, вероятно, упаковали бы его в setuid root и с
-DGAPING_SECURITY_HOLE
включен, но не задокументирован. Есть надежда, что netcat поможет людям найти и устранить несложные дыры такого рода, которые продолжают появляться, позволяя легче экспериментировать с "голым металлом" сетевого уровня.
Не то чтобы это прояснило
Я могу использовать "netcat -e" для запуска другого приложения, например, imap или pop3. раздел "#ifdef GAPING_SECURITY_HOLE" может содержать ошибку, позволяющую запустить оболочку, поэтому она по умолчанию отключена. Заключение ifdef в критический для безопасности раздел.