Xpoint
   [напомнить пароль]

Email Injection / емэйл инъекция

Метки: [без меток]
2005-10-05 16:27:06 [обр] L&L(0/3)[досье]
сообщение промодерировано

На нашем сайте есть регистрационная форма “Подписка на новостную рассылку”:

  1. Посетитель заполняет форму с полями "Наименование организации", "Фамилия", "Имя и отчество", "Должность", "E-mail", "Контактный телефон/факс".
  2. Проверяется заполнение всех полей и синтаксис поля "E-mail"
  3. Если проверка успешна, то результат собирается в один текст, добавляется время и ip посетителя, удаляются спецсимволы – htmlspecialchars().
  4. Получившийся тест посылается письмом администратору (письмо текстовое) и заносится в лог файл.

Пример нормальной записи в логе:

ПОДПИСКА НА НОВОСТНУЮ РАССЫЛКУ
-----------------------------------------------------
Наименование организации= MMM
Фамилия= Иванов
Имя и отчество= Иван Иванович
Должность= директор
E-mail= vanya@mail.ru
Контактный телефон/факс= 223322332233
-------------------------------------------------------------------
ip: 80.255.69.121
дата: 29-09-2005 в 17:54:38

Вчера я обнаружил в логе следующую запись (в ней изменено имя нашего сайта на aka, остальное подлинное):

ПОДПИСКА НА НОВОСТНУЮ РАССЫЛКУ
-----------------------------------------------------
Наименование организации= vnejtr@aka.ru
Фамилия= vnejtr@aka.ru
Имя и отчество= vnejtr@aka.ru
Content-Type: multipart/mixed; boundary="===============0766226920=="
MIME-Version: 1.0
Subject: 978d5445
To: vnejtr@aka.ru
bcc: homeiragtime@aol.com
From: vnejtr@aka.ru

This is a multi-part message in MIME format.

--===============0766226920==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

bisbiwi
--===============0766226920==--
Должность= vnejtr@aka.ru
E-mail= vnejtr@aka.ru
Контактный телефон/факс= vnejtr@aka.ru
-------------------------------------------------------------------
ip: 212.180.33.205
дата: 29-09-2005 в 14:23:33

Отсюда я делаю вывод, что была сделана попытка (судя по полученному письму неуспешная) Email Injection / емэйл инъекции. Обращаю внимание, что взломщик пытался сделать инъекцию не в header письма (поле E-mail), а в тело письма (поле Имя и отчество).
Возможно потому, что в поле E-mail вставить ничего нельзя – его синтаксис контролируется проверкой регулярного выражения. Но может быть, он пытался “разрезать” письмо на два независимых письма. (Я не знаю, осуществимо ли это.)

По проблеме Email Injection я нашел всего 2 материала: http://forum.isahost.com/index.php?showtopic=11 и http://securephp.damonkohler.com/index.php/Email_Injection . В них рекомендуется удалять /r и /n из полей попадающих в header письма (т.е. из email адреса). У меня email контролируется гораздо сильнее.

ВОПРОСЫ: Возможно ли вставкой некоторого текста “разрезать” письмо на два или более независимых письма? Если да , то как этому воспрепятствовать? Достаточно ли удалить из текста слова Content и boundary ?

спустя 15 минут [обр] Алексей В. Иванов(6/2861)[досье]
М Перенесено из форума "Программирование::PHP"
спустя 1 час 20 минут [обр] melfar(0/-1)[досье]
Не думаю, чтение секции продолжается ведь до нахождения boundary,
который злоумышленник узнать возможности не имеет.
спустя 34 минуты [обр] L&L(0/3)[досье]
melfar[досье]
Я отправляю простое письмо (Content-type: text/plain; charset=windows-1251) и ИМХО оно секций и границ не имеет
спустя 14 часов [обр] Андрей Новиков(8/1242)[досье]
Зависит от того, как оно посылается. Если прямо по SMTP, то теоретически можно. Если через sendmail или что-то подобное, то нельзя.
спустя 2 часа 19 минут [обр] L&L(0/3)[досье]

Андрей Новиков[досье]
Если я правильно понял, под Unix'ом это не возможно

Цитирую их хелпа:
Windows-реализация mail() ... не использует локальный экзешник для составления сообщений, а работает лишь по прямым сокетам.

Powered by POEM™ Engine Copyright © 2002-2005