Уязвимость сериализации объектов Java, которая была обнародована более года назад, оказалась довольно живучей. Она содержалась в популярных средах программирования Java, в том числе в Apache Commons Collections (где она уже закрыта), а также в других популярных средах: Oracle WebLogic, IBM WebSphere, Red Hat JBoss и многих других.

Новости о старом баге снова появились на этой неделе: PayPal наконец запатчила один из своих корпоративных веб-ресурсов — manager.paypal.com. О наличии уязвимости компанию уведомил в декабре исследователь Михаил Степанкин. Баг позволил ему исполнять shell-команды и в конечном итоге внедрить бэкдор в сервера PayPal.

По словам Степанкина, на поиски бага его вдохновило исследование авторства Габриэля Лоуренса (Gabriel Lawrence) и Криса Фрохоффа (Chris Frohoff), которое дуэт экспертов представил на конференции по безопасности AppSecCali 2015. Степанкин получил от PayPal выплату за выявленную уязвимость в рамках программы Bug Bounty. Но не только он был занят поисками брешей в инфраструктуре PayPal: исследователь Марк Литчфилд (Mark Litchfield) опередил его на два дня, но, несмотря на дублирование заявок, оба эксперта получили премии.

Степанкин отметил, что он смог исполнить произвольные shell-команды на серверах PayPal, воспользовавшись незащищенной сериализацией объектов Java. В своем блоге он заявил, что смог получить доступ к серверам PayPal.

«Я понял, что могу исполнять произвольные команды на веб-серверах manager.paypal.com, но кроме этого я нашел способ установить обратную связь со своим собственным интернет-сервером и, к примеру, загрузить и запустить бэкдор, — пишет исследователь. — В результате я получил доступ к базам данных, используемым приложением manager.paypal.com».

Степанкин использовал инструмент под названием Ysoserial, который был разработан Лоуренсом и Фрохоффом, чтобы сгенерировать нагрузку и заставить свой PoC-эксплойт работать. Первая нагрузка в рамках атаки Степанкина позволила ему постепенно начать отправлять DNS- и HTTP-запросы от PayPal на собственный сервер. После этого он провел следующую волну атаки.

«В качестве доказательства успешной атаки заявляю, что я только что смог прочитать файл «/etc/passwd» со своего сервера», — похвалился исследователь.

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

Степанкин заявил, что нашел параметр загрузки формы под названием oldFormData, который является сериализированным объектом Java и обрабатывается приложением без аутентификации.

«Это значит, что вы можете загрузить на сервер сериализованный объект любого существующего класса и будет вызван метод «readObject» (или «readResolve») этого класса. Чтобы эксплуатировать эту проблему, вам нужно подобрать подходящий класс в приложении «classpath», который можно сериализовать и в котором есть интересный (с точки зрения взлома) метод «readObject», — поясняет исследователь.

До появления исследования Фрохоффа и Лоуренса считалось, что баги сериализации Java невозможно эксплуатировать. Исследователи Стивен Брин (Stephen Breen) и Джастин Кеннеди (Justin Kennedy) в ноябре опубликовали PoC-эксплойты к уязвимости в коммерческих серверах веб-приложений.

Согласно заявлению PayPal, компания займется изучением найденной уязвимости в различных реализациях Java в своей корпоративной среде.

«Эта уязвимость десериализации намного серьезнее, чем мы могли ожидать, — подтвердила компания в блоге. — Компаниям следует отнестись к проблеме максимально серьезно, так как эксплуатация бага может привести к удаленному исполнению кода. Также необходимо применить средства контроля над безопасностью для обеспечения долгосрочного восстановления и не ограничиваться только применением патча в библиотеке Commons».

Категории: Уязвимости