О проблеме сообщили сразу два исследователя: Александр Клинк (Alexander Klink) и специалист Blindspot Security Тимоти Морган (Timothy Morgan). Они обнаружили, что Java и Python (через библиотеку urllib2 в Python 2 и библиотеку urllib в Python 3) обрабатывают ссылки на FTP определенным образом, что позволяет атакующему внедрить в URL символы CRLF, заставив Java и Python считать, будто в URL содержатся новые команды. Все это ведет к уязвимости, которую эксперты назвали protocol injection или FTP Injection: внедрение команд в протокол FTP.

Впервые об FTP-инъекциях заговорили еще в 2014 году, тогда о проблеме писали специалисты российской компании ONsec, но баг так и не привлек к себе внимание общественности. Теперь проблемой наконец заинтересовались. Дело в том, что Клинк рассказал в своем блоге, что FTP-инъекции могут использоваться для отправки писем через использование обработчика Java FTP URL, а Морган описал еще один сценарии эксплуатации бага: использование обработчиков FTP URL в Java и Python для обхода файрволов.

Клинк объясняет, что Java уязвима перед атаками XML eXternal Entity (XEE), то есть неправильно работает с FTP-соединениями, так как проверка синтаксиса не производится: cr и lf должны отвергаться, но этого не происходит, из-за чего в запрос могут быть внедрены не относящиеся к FTP команды. Исследователь приводит пример отправки SMTP письма через попытку подключения к FTP.

«Данный сценарий атаки особенно интересен, когда вы можете добраться до внутреннего почтового сервера (без ограничений, возможно, даже без спам- и малварь-фильтров) с машины посредством XML парсинга, —пишет Клинк. — Можно даже отправлять вложения, так как длина URL, по всей видимости, не ограничена и единственный лимит – это доступная память RAM».

Морган, в свою очередь, объясняет, что атаку можно обратить против файрвола, заставив его разрешить удаленное TCP-соединение с одним из портов уязвимой системы (1024-65535). Данную вариацию атаки можно использовать против обычных пользователей, даже в том случае, если Java-плагин в их браузере отключен.

По словам исследователя, атакующему достаточно обманом заставить пользователя обратиться к Java- или Python-приложению на сервере. Клиент первым делом обработает файлы JNLP (Java Network Launch Protocol), даже до отображения предупреждений со стороны системы безопасности, если таковые вообще последуют. Злоумышленнику нужно лишь внедрить FTP URL внутрь JNLP-файла и передать его пользователю. Причем в одном JNLP-файле могут содержаться несколько FTP URL, то есть атака может быть многоуровневой. Практически аналогичная уязвимость содержится и в Python-библиотеках urllib2 и urllib.

Исследователь сообщает, что успешно протестировал атаку против Linux-файрволов, включая коммерческие решения Cisco и Palo Alto Networks. По его словам, проблему вредоносных JNLP-файлов также можно использовать для реализации MiTM-атак и атак типа SSRF (Server-Side Request Forgery).

Морган пишет, что специалисты Blindspot Security уведомили разработчиков Python и Oracle об опасности FTP-инъекций еще в январе и ноябре 2016 года, однако никто их них не потрудился устранить проблему. Из-за этого proof-of-concept эксплоита будет опубликован только после выхода патчей, чтобы администраторы могли протестировать свои файрволы и убедиться, что все в порядке. А пока исправлений нет, исследователи советуют отключить classic mode FTP во всех файрволах, а также удалить Java отовсюду, откуда только можно. Если удалить невозможно, нужно попытаться отключить, а также разорвать ассоциирование с JNLP-файлами.

Фото: Depositphotos



Оставить мнение