В web-фреймворке Apache Struts, применяемом для создания web-приложений на языке Java с использованием парадигмы Model-View-Controller, выявлена уязвимость (https://cwiki.apache.org/confluence/display/WW/S2-057) (CVE-2018-11776 (https://security-tracker.debian.org/tracker/CVE-2018-11776)), позволяющая удалённому злоумышленнику выполнить свой код в системе через отправку специально оформленного запроса. Проблема устранена в выпусках Struts 2.3.35 и 2.5.17 и проявляется в приложениях, в которых не выставлено пространство имён для всех определённых в конфигурации результатов.
Уязвимость вызвана некорректной проверкой передаваемых извне данных в ядре Struts и может проявляться различными способами. В настоящее время известно (https://semmle.com/news/apache-struts-CVE-2018-11776) два вектора атаки, позволяющих выполнить код на сервере. Для успешной атаки требуется выполнение двух условий: Во-первых, в настройках флаг alwaysSelectFullNamespace должен быть выставлен в значение "true" (автоматически выставляется при использовании плагина Convention). Во-вторых, в приложении должно применяться действие, указанное в файле конфигурации или Java-коде без указания пространства имён или с указанием маски для пространств имён ("/*").
Первый известный вектор атаки затрагивает приложения, в которых применяются следующие три типа результата (result type="...") без указания пространств имён: "redirectAction (https://struts.apache.org/core-developers/redirect-action-re...)" для переброса на другой URL, "chain (https://struts.apache.org/core-developers/action-chaining.html)" для связывания нескольких действий в одну последовательность и "postback (https://struts.apache.org/core-developers/postback-result.html)" для формирования формы на основе полученных параметров.
Второй вектор атаки связан с использованием тегов "url (https://struts.apache.org/maven/struts2-core/apidocs/org/apa...)" в шаблонах страниц, которые вызываются из пакетов без указания атрибута с пространством имён.
Эксплуатация уязвимости производится через отправку HTTP-запроса с включением дополнительного параметра, определяющего собственное пространство имён. Из-за отсутствия надлежащих проверок значение параметра может включать выражение на языке OGNL (https://en.wikipedia.org/wiki/OGNL) (Object-Graph Navigation Language), позволяющем манипулировать настройками и поведением Apache Struts, а также запускать (https://securingtomorrow.mcafee.com/mcafee-labs/analyzing-cv.../) произвольный Java-код в контексте сервера.
Напомним, что прошлая критическая уязвимость в Apache Struts, которая не была вовремя устранена в инфраструктуре компании Equifax, послужила (https://www.opennet.dev/opennews/art.shtml?num=47198) причиной одной из самых крупных утечек персональных данных, в результате которой атакующие получили доступ (https://www.opennet.dev/opennews/art.shtml?num=47170) к сведениям о 143 млн американцев. По приблизительной оценке Struts применяется в web-приложениях 65% крупнейших компаний из списка Fortune 100, поэтому выявленная уязвимость может привести к новой волне крупных утечек и взломов.
URL: https://semmle.com/news/apache-struts-CVE-2018-11776
Новость: https://www.opennet.dev/opennews/art.shtml?num=49174