Ошибки в Java и Python позволяют взламывать фаерволлы

Безопасность Стратегия безопасности Пользователю
мобильная версия
, Текст: Роман Георгиев
В Java и библиотеках Python выявлены уязвимости, которые позволяют устанавливать соединения в обход фаерволлов и производить целый ряд различных атак. Проблема заключается в некорректной проверке синтаксиса команд в устанавливаемых FTP-соединениях, позволяющих внедрять произвольные команды. Несмотря на то, что разработчиков Java и Python уведомили еще в 2016 г., исправлений до сих пор нет.

В обход фаерволлов

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

Речь идет об уязвимостях типа «инъекция в протокол», допускающих вставку своих пакетов с данными в поток, передаваемый между клиентом и сервером. Как оказалось, в Java и в библиотеках Python urllib и urllib2 присутствуют уязвимости, которые позволяют осуществлять инъекцию пакетов в FTP-протокол, вследствие чего фаерволлы начинают пропускать внешние TCP-соединения к любому порту в диапазоне 1024-65535 на уязвимой системе.

Как утверждает в своей публикации ИБ-компания BlindSpot, эксплуатация уязвимости в Java позволяет атаковать даже тех пользователей десктопов, у которых не установлен браузерный плагин Java.

Баги были выявлены довольно давно, разработчиков уязвимого ПО уведомили заранее, однако бреши до сих пор не заделаны.

Внешние сущности

Как выяснил эксперт по безопасности Александр Клинк (Alexander Klink), Java в недостаточной степени проверяет синтаксис в пользовательских именах FTP-протокола; XML eXternal Entity не проверяет наличие комбинаций CR (команда «возврат каретки») и LF (команда «перевод строки»). Вследствие этого злоумышленники могут остановить выполнение команд USER и PASS, и внедрить новые команды в FTP-сессию; кроме этого возможна отправка произвольных SMTP-команд и удаленное соединение с серверами для отправки несанкционированных e-mail.

Если злоумышленнику удается убедить любое Java-приложение попытаться запросить вредоносную ссылку (URL), содержащую CR и/или LF (например, в форме ftp://foo:bar%0d%0aINJECTED@example.net/file.png), то он может внедрить в поток данных клиента новые FTP-команды. Вышеприведенный пример вредоносной ссылки формирует новые строки, которые будут интерпретированы как часть TCP-потока, так что сервер будет считывать слово INJECTED как отдельную команду, поступившую от клиента. Дальше, как указывает эксперт компании Blindspot Тимоти Морган (Timothy Morgan), если Java-приложение считывает такую ссылку, на сервер можно отправить целую последовательность команд, включая вредоносную.

В Java и библиотеках Python найдены уязвимости,
позволяющие устанавливать соединения в обход фаерволлов и производить разнообразные атаки

В случае с Java код может быть внедрен через несколько полей в URL; поля пользовательского имени и название директории, указанные в ссылке, также позволяют произвести инъекцию.

«Эта атака представляется особенно интересной, если у вас появляется возможность внутренний почтовый сервер (лишенный ограничений на доступ, возможно, даже лишенный антивирусных средств и спам-фильтров) с машины, осуществляющей XML-парсинг», - написал Клинк. - «Появляется даже возможность отправки вложений, поскольку, похоже, ограничений на длину URL нет, кроме как объемов доступной оперативной памяти (парсинг 400-мегабайтной URL-строки, правда, по каким-то причинам потребовал более 32 ГБ)».

Данная уязвимость может быть также использована для парсинга вредоносных JNLP-файлов, проведения MiTM-атак («человек посередине») или кампаний межсайтовой подделки запроса.

Практически идентичный баг

Уязвимость в Python, как указывает Тимоти Морган, практически идентична проблеме в Java. Но есть разница: для успешной эксплуатации уязвимости в Python, по-видимому, требуется перечисление во вредоносной URL-строке названий директорий.

Подробные технические описания атак доступны в блоге Александра Клинка и на сайте компании BlindSpot.

Вас же предупреждали

Информацию о наличии уязвимости в Java корпорации Oracle предоставили еще в ноябре 2016 г. Разработчиков Python с наличествующей брешью ознакомили почти на год раньше - в январе 2016 г.

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

Что касается мер защиты, то и корпоративным, и индивидуальным пользователям рекомендовано отключить «классический» режим FTP по умолчанию, а также провести аудит соответствующих приложений на предмет наличия описанных уязвимостей.

«Серьезные ошибки время от времени выявляются в любых программных продуктах, однако Java со всей ее популярностью находится среди лидеров по количеству брешей, - говорит Дмитрий Гвоздев, генеральный директор компании «Монитор безопасности». – С точки зрения киберугроз, написанные на Java приложения следует держать под особым контролем, вплоть до «презумпции виновности».