Дуршлаг в Sendmail
Спецвыпуск Хакера, номер #007, стр. 007-040-2
(хотя меня, конечно, иметь лучше не стоит ;))) без пароля и с правами рута!
Плюсы: Баг достаточно прост в использовании.
Минусы: Обязательно наличие юзверских прав на ломаемой машине. Не работает
в следующих случаях:
1) /var и / на разных разделах.
2) /var/tmp отсутствует или доступ туда закрыт.
3) на машине присутствует postmaster, т.е. ошибочные письма не попадут в
/var/tmp/dead.letter.
Баг нумбер два раза - два админа-молодца, одинаковых с лица
Версии демона: до 8.10.0 (8.9.3 - абсолютно точно)
Все эти превосходные версии содержат целых 2 бага, а именно:
1) Возможность запихивать LMTP (local mail transfer protocol - протокол
передачи локальной почты)-команды прямо в тело сообщения.
2) Возможность создания тупика между сендмайлом и mail.local.
Описание:
1) Пока mail.local в режиме LMTP ищет в теле мессаги строку "./n" -
конец сообщения, сендмайл не пропускает ее. Но если в теле мессаги встроить
строку "(2047 chars).\n", то получится мнимый конец :). Остаток мыла будет
воспринят как LMTP-команды. Это позволяет, например, посылать сообщения на
несколько ящиков сразу, в обход самого сендмайла и фильтров.
2) Но mail.local возвращает результат выполнения LMTP-команды сендмылу. Но
поскольку в данный момент времени он не ждет этих сообщений, буфер
ввода/вывода будет просто наполняться ими. При большом количестве команд (или
просто текста, ведь он тоже будет восприниматься как команды, а следовательно
mail.local будет выдавать ошибки) буфер будет просто забит и возникнет
пресловутый тупик.
Баг нумбер два раза по два - люблю админов я
Версии демона: 8.10.0 и 8.10.1 (только на Solaris'е)
Описание: Эти версии тоже, как ни странно, содержат два бага:
1) Версия сендмыла 8.10.0 для соляриса предоставляла такую вещь, как
"Content-Length". По ней определяется, сколько места будет занимать мыло на
винте. Мол, эта фича у нас новая такая. Но они не учли возможность, что
злобные хацкеры могут заменить реальный "Content-Length" на подставной
"Content-Length:99999999" %))). Особенно забавный результат достигается, если
в конце заголовка вставить следующее:
"(2047 chars)\n
Content-Length: 99999999\n"
2) Если тело сообщения пусто, а в конце заголовка стоит "(2047
chars)Content-Length: \n", то следующая мессага будет "приклеена" к этому
заголовку, потому что строка "\n" будет потеряна, пока сендмайл пытается
считать Content-Length.
Баг нумбер три - сюда смотри
Версии демона: 8.7 - 8.8.2 (Linux и OpenBSD)
Описание: У сендмайла этих версий существует так называемый smtpd-баг. Что это
такое и кого им кормят, объяснять достаточно долго (скажу только, что баг
это достаточно известный).
Код эксплоита (в оригинале):
# Hi !
# This is exploit for sendmail smtpd bug
# (ver. 8.7-8.8.2 for FreeBSD, Linux and may be other platforms).
# This shell script does a root shell in /tmp directory.
# If you have any problems with it, drop me a letter.
# Have fun !
#
#
# ----------------------