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 в критический для безопасности раздел.

Другие вопросы по тегам