Компания Oracle собирается отказаться от поддержки сериализации данных в Java. Марк Рейнхольд (Mark Reinhold), главный архитектор платформы, считает, что добавление этой функции в язык в 1997 году было «ужасной ошибкой». По его оценке, с ней связаны от трети до половины всех уязвимостей Java.

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

Сама по себе сериализация не несет угроз. Проблемы возникают, лишь когда приложение обменивается потоками с небезопасным источником. Отвечая на заданный на конференции Devoxx вопрос, Рейнхольд сказал, что эта функция стала «на удивление обильным источником уязвимостей, не говоря уже о нестабильностях». По его словам, в 1997 году некоторые из разработчиков выступали против включения этой операции в язык, но решение тем не менее было принято.

Общее внимание к проблеме привлекли в 2015 году исследователи из NTT Com Security Гэбриел Лоуренс (Gabriel Lawrence) и Крис Фрохофф (Chris Frohoff). Эксперты обнаружили баг десериализации в компоненте Apache Commons Collections, который позволял перехватить данные в процессе преобразования и удаленно выполнить вредоносный код без аутентификации. Уязвимость затрагивала все среды программирования, которые пользовались этой библиотекой,  — WebLogic, WebSphere, JBoss, Jenkins и OpenNMS.

В начале 2016 года сразу два ИБ-аналитика — Михаил Степанкин и Марк Литчфилд (Mark Litchfield)  — независимо друг от друга подтвердили наличие этой бреши на серверах PayPal, где с ее помощью можно было исполнить произвольные shell-команды и внедрить бэкдор.

Компания Veracode, которая в октябре 2017 года опубликовала отчет о безопасности приложений, отметила, что более половины программ, написанных на Java, имеют незакрытую брешь в Apache Commons Collections. В то же время критическая уязвимость CVE-2017-9805 в Apache Struts затрагивает 65% компаний списка Fortune 100.

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

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

Категории: Главное, Уязвимости