Научная статья на тему 'ТЕХНИКА АТАКИ НА ВЕБ-ПРИЛОЖЕНИЯ НА ОСНОВЕ ВНЕДРЕНИЯ ЗАГОЛОВКОВ ЭЛЕКТРОННОЙ ПОЧТЫ'

ТЕХНИКА АТАКИ НА ВЕБ-ПРИЛОЖЕНИЯ НА ОСНОВЕ ВНЕДРЕНИЯ ЗАГОЛОВКОВ ЭЛЕКТРОННОЙ ПОЧТЫ Текст научной статьи по специальности «Компьютерные и информационные науки»

314
31
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БЕЗОПАСНОСТЬ ВЕБ-ПРИЛОЖЕНИЙ / ВНЕДРЕНИЕ ЗАГОЛОВКОВ ЭЛЕКТРОННОЙ ПОЧТЫ / ВНЕПОЛОСНЫЕ ДАННЫЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Смирнов Станислав Игоревич, Кумуржи Георгий Максимович

В статье рассмотрена техника атаки на веб-приложения злоумышленниками на основе внедрения заголовков электронной почты через уязвимые формы обратной связи (контактные формы). Даны рекомендации по обнаружению и нейтрализации данной уязвимости веб-приложений.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

THE TECHNIQUE OF ATTACKING WEB APPLICATIONS BASED ON THE INTRODUCTION OF EMAIL HEADERS

The article discusses a technique for attacking web applications by intruders (hackers) based on the injection of email headers through vulnerable feedback forms (contact forms). Recommendations are given for detecting and neutralizing this vulnerability in web applications.

Текст научной работы на тему «ТЕХНИКА АТАКИ НА ВЕБ-ПРИЛОЖЕНИЯ НА ОСНОВЕ ВНЕДРЕНИЯ ЗАГОЛОВКОВ ЭЛЕКТРОННОЙ ПОЧТЫ»

УДК 004

Смирнов Станислав Игоревич Smirnov Stanislav Igorevich

старший преподаватель кафедры senior lecturer of the department Кумуржи Георгий Максимович Kumurzhi Georgy Maksimovich

Студент Student

Российский технологический университет - МИРЭА MIREA - Russian Technological University

ТЕХНИКА АТАКИ НА ВЕБ-ПРИЛОЖЕНИЯ НА ОСНОВЕ ВНЕДРЕНИЯ ЗАГОЛОВКОВ ЭЛЕКТРОННОЙ ПОЧТЫ

THE TECHNIQUE OF ATTACKING WEB APPLICATIONS BASED ON THE INTRODUCTION OF EMAIL HEADERS

Аннотация. В статье рассмотрена техника атаки на веб-приложения злоумышленниками на основе внедрения заголовков электронной почты через уязвимые формы обратной связи (контактные формы). Даны рекомендации по обнаружению и нейтрализации данной уязвимости веб-приложений.

Abstract: The article discusses a technique for attacking web applications by intruders (hackers) based on the injection of email headers through vulnerable feedback forms (contact forms). Recommendations are given for detecting and neutralizing this vulnerability in web applications.

Ключевые слова. безопасность веб-приложений, внедрение заголовков электронной почты, внеполосные данные.

Key words: web application security, email header injection, out-of-band data.

Введение

Для владельцев современных веб-приложений обычной практикой является предоставление своим клиентам возможности получения обратной связи путем использования контактных форм. С помощью таких форм владельцы веб-ресурсов получают сообщения

электронной почты от посетителей. В большинстве случаев такие контактные формы самостоятельно устанавливают заголовки электронной почты [1]. Эти заголовки интерпретируются библиотекой, отвечающей за работу электронной почты, на вебсервере и превращаются в команды простого протокола передачи почты (SMTP), которые затем обрабатываются сервером SMTP.

К сожалению, вводимые пользователями веб-приложений данные зачастую не проверяются перед отправкой библиотеке, отвечающей за работу электронной почты [2]. В таких случаях контактная форма (форма обратной связи) может быть уязвима для внедрения заголовка электронной почты (также называемой инъекцией заголовка SMTP). Злоумышленник может ввести в отправляемое с помощью формы обратной связи сообщение электронной почты дополнительные заголовки, тем самым изменив предполагаемое поведение почтового сервера.

Данная уязвимость веб-приложения не является критической, так как не представляет прямой угрозы безопасности владельцу вебсервера, но такая уязвимая форма обратной связи может быть использована в кампаниях для рассылки спама и фишинга [3], что не дает возможности владельцу веб-приложения повода ее игнорировать.

Как работает протокол SMTP

Протокол SMTP (Simple Mail Transfer Protocol) - один из старейших протоколов Интернета. Первоначально он только принимал небольшой набор команд, в которых просто указывалось, кто отправитель электронной почты, а кто получатель. Со временем устройство электронной почты стало намного сложнее: к ней добавились заголовки.

Для понимания работы протокола SMTP, необходимо знать разницу между конвертом (envelope) и телом письма (email body).

«Конверт применяется для передачи сообщений электронной почты от клиенту к серверу и обратно. При этом как клиент, так и сервер взаимодействуют друг с другом в обычном формате «запрос-ответ». В ходе взаимодействия между ними передаются текстовые строки» [4]. Следующие команды являются частью конверта:

- MAIL FROM: Эта команда определяет отправителя конверта.

- RCPT TO: эта команда определяет получателя конверта. Его можно использовать несколько раз при необходимости доставки письма нескольким получателем одновременно.

- DATA: С этой команды начинается определение полезной нагрузки, отправляемой с помощью электронной почты: заголовки и тело сообщения электронной почты, разделяемые одной пустой строкой.

Заголовки электронной почты не являются частью протокола SMTP. Они интерпретируются почтовым клиентом (для правильного отображения электронной почты), а также некоторыми библиотеками обработки электронной почты в различных языках программирования. Вот несколько примеров таких заголовков:

- From: Этот заголовок устанавливает видимого отправителя и может отличаться от содержимого MAIL FROM (в большинстве почтовых клиентов отправитель, указанный с помощью MAIL FROM, отображается в заголовке Return-Path, который по умолчанию скрыт).

- To: этот заголовок устанавливает видимого получателя и может отличаться от содержимого RCPT TO (в большинстве почтовых клиентов получатель, предоставленный с помощью RCPT TO, отображается в заголовке Delivered-To, который по умолчанию скрыт).

Пример простого SMTP-диалога представлен на рисунке 1.

> MAIL FROM:<postmaster@example.ru>

< 250 OK

> RCPT TO:<marina@example.com>

< 250 OK

> RCPT TO:<gregory@example.com>

< 250 OK

> DATA

< 354 Send message content; end with <CRLF>.<CRLF>

> Content-Type: text/html

> Date: Wed, 25 Dec 2019 00:00:01

> From: Ivan <ivan@example.ru>

> Subject: Your Gifts Are Here

> To: Nikita <nikita@example.com>

>

> Привет!

> Позвони мне пожалуйста по номеру: 8(8S8)-S88-S8-S8!

> --

> Ivan

> .

< 250 OK

Рисунок 1. Законченный SMTP-диалог

В результате выполнения такого SMTP-диалога на адреса электронной почты marina@example.com и gregory@example.com будут отправлены письма. Marina и Gregory в своих почтовых клиентах увидят, что письмо было отправлено от Ivan <ivan@example.ru> (а не postmaster@example.ru), и что получателем является Nikita <nikita@example.com>.

Большинство библиотек, отвечающих за работу электронной почты, в разных языках программирования обычно не позволяют напрямую добавлять команды, формирующие конверт электронного письма. Однако они принимают предоставленные пользователями заголовки электронной почты и часто преобразуют их в эквивалентные команды SMTP. Например, если добавить заголовок BCC, то библиотека, отвечающая за работу электронной почты, может

взять содержимое этого заголовка и создать дополнительные команды RCPT TO [5]. Соответственно, при работе с такими библиотеками все, что нужно сделать злоумышленнику, - это знать, как добавлять заголовки электронной почты, и они будут преобразованы в эквивалентные команды SMTP.

Уязвимый программный код

На рисунке 2 представлен программный код, написанный на языке программирования PHP, являющийся примером типичной контактной формы (формы обратной связи), уязвимой для внедрения заголовка электронной почты. Такая форма берет имя и адрес получателя электронной почты из полей ввода и подготавливает список заголовков для электронного письма.

$message = $_POST[1 message1 ] ; // Установка SMTP заголовков mailiito, Ssubject, $messagej Sheaders);

Рисунок 2. Программный код, уязвимый к внедрению заголовков

электронной почты

В результате будет выполнен POST-запрос, представленный на рисунке 3.

POST /contact.php HTTP/1.1 Host: www.example2.com

name=marina&replyTo=marina@example.comSmessage=Hello

Рисунок 3. POST-запрос, содержащий всю необходимую информацию для отправки электронной почты

Злоумышленник может эксплуатировать уязвимость такой контактной формы, отправив POST-запрос, представленный на рисунке 4.

POST /contact.php HTTP/1.1 Host: www.example2.com

name=Best Product\nbcc : everyone|Sexample3. comSreplyTo=blame_marina|Sexample. com&message=Buy my product!

Рисунок 4. POST-запрос, содержащий в себе внедренные заголовки электронной почты

Злоумышленник вставляет новую строку (перевод строки - \n в большинстве систем UNIX и Linux, а также возврат каретки и перевод строки - \г\п в системах Windows) и добавляет заголовок BCC, содержащий дополнительные адреса электронной почты. Библиотека электронной почты преобразует эти адреса в команды RCPT TO и доставляет электронное письмо им в дополнение к предполагаемому получателю. Злоумышленник может использовать такой прием для анонимной отправки большого количества сообщений от лица веб-ресурса, на котором была расположена данная форма обратной связи. Такое поведение формы обратной связи может спровоцировать возникновением фишинговых рассылок от лица компании, на чьем веб-ресурсе располагается такая уязвимая контактная форма, так как получатели таких рассылок могут считать, что эти сообщения исходят из надежного источника [6].

Хотя такая уязвимость не ограничивается лишь командой mail языка программирования PHP, некоторые библиотеки, отвечающие за работу электронной почты, естественно, устойчивы к ней. Например, библиотека SMTPLIB в языке программирования Python устойчива, потому что метод SMTP.sendmail() требует, чтобы был указан явный список получателей [7]. Если злоумышленнику удастся добавить заголовки электронной почты, то это изменит только способ отображения электронного письма.

Обнаружение уязвимостей, связанных с внедрением заголовков электронной почты

Чтобы обнаруживать внедрение заголовков сообщений электронной почты, требуется задействовать внеполосный канал связи с тестируемым веб-приложением путем выделения публично доступного SMTP-сервера, готового принимать письма электронной почты.

Исследователь безопасности во время тестирования безопасности веб-приложения, обнаружив контактную форму (форму обратной связи), при ее проверке должен вставлять настраиваемый SMTP-заголовок BCC, указывающий на адрес электронной почты подконтрольного SMTP-сервера. Если веб-приложение заставит SMTP-сервер отправить электронное письмо по такому адресу, то это будет означать, что контактная форма является уязвимой.

Заключение

Внедрение заголовков электронной почты может происходить в формах обратной связи, которые позволяют пользователям отправлять письма электронной почты. Если контактная форма уязвима, злоумышленник может вставить в письмо заголовки электронной почты и использовать такую форму в своих целях.

Внедрение заголовков электронной почты не опасно для вебсайта или пользователя, посещающего веб-сайт, но злоумышленник может использовать эту уязвимость для рассылки спама и фишинговых писем. Такие письма электронной почты выглядят так, как будто они пришли от официального веб-приложения, поэтому они могут серьезно повлиять на его репутацию.

Внедрение заголовков электронной почты трудно обнаружить: для обнаружения требуется использование внеполосных данных -внешнего SMTP-сервера.

Чтобы избежать возникновения уязвимостей, связанных с внедрением заголовков электронной почты, а также многих других уязвимостей веб-приложений, разработчик всегда должен проверять данные, отправляемые пользователями веб-приложению [8]. В частности, чтобы избежать внедрения заголовков электронной почты, разработчик должен запретить ввод каких-либо символов новой строки в поле ввода формы обратной связи, потому что они позволяют злоумышленнику добавлять заголовки электронной почты

[9].

Библиографический список:

1. PHP: mail - Manual [Электронный ресурс]. - Режим доступа: https://www.php.net/manual/ru/function.mail.php (дата обращения: 25.09.2021).

2. Measuring E-Mail Header Injections on the World Wide Web [Электронный ресурс]. - Режим доступа: https://sites.cs.ucsb.edu/~chris/research/doc/sac18_email.pdf (дата обращения: 25.09.2021).

3. Spam delivered through your company website [Электронный ресурс]. - Режим доступа: https://www.kaspersky.com/blog/contact-form-spam/27880/ (дата обращения: 25.09.2021).

4. Что такое SMTP-протокол и как он устроен? [Электронный ресурс]. - Режим доступа: https://selectel.ru/blog/smtp-protocol/ (дата обращения: 27.09.2021).

5. Using and Testing Cc and Bcc in SMTP Protocol [Электронный ресурс]. - Режим доступа: https://mailtrap.io/blog/cc-bcc-in-smtp/ (дата обращения: 27.09.2021).

6. PHP email injection - Режим доступа: https://resources.infosecinstitute.com/topic/email-injection (дата обращения: 27.09.2021).

7. smtplib - SMTP protocol client [Электронный ресурс]. - Режим доступа: https://docs.python.org/3/library/smtplib.html (дата обращения: 27.09.2021).

8. SMTP header injection [Электронный ресурс]. - Режим доступа: https://portswigger.net/kb/issues/00200800_smtp-header-injection (дата обращения: 29.09.2021).

9. Secure coding practices - the three key principles [Электронный ресурс]. - Режим доступа: https://www.acunetix.com/blog/web-security-zone/secure-coding-practices/ (дата обращения: 29.09.2021).

i Надоели баннеры? Вы всегда можете отключить рекламу.