Назад | Перейти на главную страницу

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