Сегодня мы вернемся к Apache Struts, популярному веб-фреймворку, который за последнее время натерпелся от исследователей безопасности и явил миру несколько критических уязвимостей. В этой статье я хочу обсудить уязвимость в модуле, отвечающем за REST API. Она приводит к выполнению произвольного кода и открывает широкие возможности (такие, например, как слив личных данных половины населения США).
Не так давно я уже писал статью об уязвимости в Struts. Там речь шла о некорректной обработке сообщений об ошибках: используя OGNL, можно было выполнять произвольные команды на машине.
Еще была уязвимость языка шаблонов Freemarker (Freemarker Template Language). Некорректная работа механизма обработки тегов позволяла опять же отправлять серверу выражения Object Graph Navigation Language (OGNL), которые снова приводили к выполнению произвольного кода.
В этот раз под прицелом оказался механизм REST API, а ошибка закралась в механизм десериализации сущностей XML.
Все свои манипуляции я буду производить на ОС Windows 10. В качестве сервера я использую Apache Tomcat 8.5.20. Версию фреймворка Apache Struts я возьму из ветки 2.5, и это последняя уязвимая до патча — 2.5.12. Скачать можно, разумеется, на официальном сайте. Чтобы не пришлось искать, вот тебе прямая ссылочка (ZIP). Также можешь скачать только исходники, если захочешь заглянуть внутрь и лучше понять, как все устроено.
После установки сервера нужно распаковать архив с фреймворком, взять из папки apps приложение struts2-rest
(файл struts2-rest-showcase.war
) и положить в папку webapps
сервера Tomcat. После этого можно запускать сервер.
Теперь, перейдя по адресу http://127.0.0.1:8080/struts2-rest-showcase
, ты можешь наблюдать нашего подопытного.
Для начала несколько слов о ContentTypeHandler
. Это интерфейс, который предоставляется фреймворком для конвертирования данных в объекты Java. Десериализацию здесь используют, чтобы преобразовать переданные данные в объекты. Поэтому каждый класс, реализующий этот интерфейс, представляет потенциальный интерес для нас как исследователей. Ведь все мы любим десериализацию юзердаты.
Так вот, в Struts имеется такой класс, как XStreamHandler
.
30: /** 31: * Handles XML content 32: */ 33: public class XStreamHandler implements ContentTypeHandler {
Он используется при обработке данных в формате XML, отправленных на сервер.
Заглянем в конфигурационный файл.
Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год2990 р. Экономия 1400 рублей! |
1 месяц490 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости