В 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.ht... для связывания нескольких действий в одну последовательность и "postback (https://struts.apache.org/core-developers/postback-result.ht... для формирования формы на основе полученных параметров.
Второй вектор атаки связан с использованием тегов "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.me/opennews/art.shtml?num=47198) причиной одной из самых крупных утечек персональных данных, в результате которой атакующие получили доступ (https://www.opennet.me/opennews/art.shtml?num=47170) к сведениям о 143 млн американцев. По приблизительной оценке Struts применяется в web-приложениях 65% крупнейших компаний из списка Fortune 100, поэтому выявленная уязвимость может привести к новой волне крупных утечек и взломов.
URL: https://semmle.com/news/apache-struts-CVE-2018-11776
Новость: https://www.opennet.me/opennews/art.shtml?num=49174
Что, опять?!
Я, честно говоря, надеялся на какую-нибудь низкоуровневую жесть или хотя бы случайную/не корректную интерполяцию параметров… а тут почти что готовая ручка для RCE. Эх, обмельчало племя махровых энтерпрайзных джавистов.
Интересно, зачем интерполировать параметры..
зато у нас можно запускать java-код, а не какой-то дурацкий sql или вовсе только нагадить в fs/стянуть неположенное как у этих самоучек-с-джангой и phpшных вем-макак!Энтерпрайз, все дела!
>пространства имён
>язык OGNL (Object-Graph Navigation Language)Предлагаю считать понятия "JAVA" и "Оверинженеринг" синонимами.
Предложение отклонено. Конвоиры, выведите его!> Оверинженеринг
Это же проект начала 2000. В новых проектах очень давно не используют.
> Это же проект начала 2000. В новых проектах очень давно не используют.А что используют?
В основном - Spring. Там ребята сделали много чего для упрощения разработки (правда местами настолько упростили, что некоторые вещи теперь вообще только через одно место можно сделать....)А Struts я уже много лет нигде не встречал, даже старые проекты на нем уже практически все загнулись.
это Struts 2. В Struts 1 таких уязвимостей нет и быть не может. Просто эти мастера-разработчики не смогли вовремя остановиться и родили Struts 2.