The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

23.08.2018 23:06

В 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, поэтому выявленная уязвимость может привести к новой волне крупных утечек и взломов.

Дополнение: опубликован рабочий прототип эксплоита.

  1. Главная ссылка к новости (https://semmle.com/news/apache...)
  2. OpenNews: Equifax подтвердил, что взлом произошёл из-за игнорирования обновления Apache Struts
  3. OpenNews: Уязвимость в Apache Struts может затрагивать различные продукты Cisco
  4. OpenNews: Уязвимость в Apache Struts стала причиной утечки персональных данных 143 млн американцев
  5. OpenNews: Критическая уязвимость в Apache Struts
  6. OpenNews: Волна взломов сайтов через неисправленную уязвимость в Apache Struts
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49174-apache
Ключевые слова: apache, struts
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (10) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (-), 02:48, 24/08/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Что, опять?!
     
  • 1.8, Аноним (8), 06:14, 24/08/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я, честно говоря, надеялся на какую-нибудь низкоуровневую жесть или хотя бы случайную/не корректную интерполяцию параметров… а тут почти что готовая ручка для RCE. Эх, обмельчало племя махровых энтерпрайзных джавистов.
     
     
  • 2.10, йййй (?), 08:26, 24/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Интересно, зачем интерполировать параметры..
     
  • 2.14, обмельчавший (?), 09:21, 24/08/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    зато у нас можно запускать java-код, а не какой-то дурацкий sql или вовсе только нагадить в fs/стянуть неположенное как у этих самоучек-с-джангой и phpшных вем-макак!

    Энтерпрайз, все дела!

     

  • 1.12, Аноним (12), 08:50, 24/08/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >пространства имён
    >язык OGNL (Object-Graph Navigation Language)

    Предлагаю считать понятия "JAVA" и "Оверинженеринг" синонимами.

     
     
  • 2.13, Аноним (13), 09:07, 24/08/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Предложение отклонено. Конвоиры, выведите его!

    > Оверинженеринг

     

  • 1.15, Dmitry77 (ok), 12:10, 24/08/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это же проект начала 2000. В новых проектах очень давно не используют.
     
     
  • 2.16, Аноним (16), 02:24, 25/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Это же проект начала 2000. В новых проектах очень давно не используют.

    А что используют?

     
     
  • 3.18, Аноним (18), 09:44, 27/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В основном - Spring. Там ребята сделали много чего для упрощения разработки (правда местами настолько упростили, что некоторые вещи теперь вообще только через одно место можно сделать....)

    А Struts я уже много лет нигде не встречал, даже старые проекты на нем уже практически все загнулись.

     
  • 2.17, Аноним (17), 12:14, 25/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    это Struts 2. В Struts 1 таких уязвимостей нет и быть не может. Просто эти мастера-разработчики не смогли вовремя остановиться и родили Struts 2.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру