Критическая уязвимость в Apache Struts

В web-фреймворке Apache Struts, применяемом для создания web-приложений на языке Java с использованием парадигмы Model-View-Controller, выявлена уязвимость (CVE-2018-11776), позволяющая удалённому злоумышленнику выполнить свой код в системе через отправку специально оформленного запроса. Проблема устранена в выпусках Struts 2.3.35 и 2.5.17 и проявляется в приложениях, в которых не выставлено пространство имён для всех определённых в конфигурации результатов.

Уязвимость вызвана некорректной проверкой передаваемых извне данных в ядре Struts и может проявляться различными способами. В настоящее время известно два вектора атаки, позволяющих выполнить код на сервере. Для успешной атаки требуется выполнение двух условий: Во-первых, в настройках флаг alwaysSelectFullNamespace должен быть выставлен в значение "true" (автоматически выставляется при использовании плагина Convention). Во-вторых, в приложении должно применяться действие, указанное в файле конфигурации или Java-коде без указания пространства имён или с указанием маски для пространств имён ("/*").

Первый известный вектор атаки затрагивает приложения, в которых применяются следующие три типа результата (result type="...") без указания пространств имён: "redirectAction" для переброса на другой URL, "chain" для связывания нескольких действий в одну последовательность и "postback" для формирования формы на основе полученных параметров. Второй вектор атаки связан с использованием тегов "url" в шаблонах страниц, которые вызываются из пакетов без указания атрибута с пространством имён.

Эксплуатация уязвимости производится через отправку HTTP-запроса с включением дополнительного параметра, определяющего собственное пространство имён. Из-за отсутствия надлежащих проверок значение параметра может включать выражение на языке OGNL(Object-Graph Navigation Language), позволяющем манипулировать настройками и поведением Apache Struts, а также запускать произвольный Java-код в контексте сервера (например, можно вызвать метод @java.lang.Runtime@getRuntime().exec).

Напомним, что прошлая критическая уязвимость в Apache Struts, которая не была вовремя устранена в инфраструктуре компании Equifax, послужила причиной одной из самых крупных утечек персональных данных, в результате которой атакующие получили доступ к сведениям о 143 млн американцев. По приблизительной оценке Struts применяется в web-приложениях 65% крупнейших компаний из списка Fortune 100, поэтому выявленная уязвимость может привести к новой волне крупных утечек и взломов.

Источник: OpenNET