CVE-2015-1818
CVE-2015-1818 — это идентификатор уязвимости в программном обеспечении (CVE), обнаруженной в библиотеке Apache Commons FileUpload, которая используется для обработки загружаемых файлов в веб-приложениях на языке Java. Уязвимость относится к категории «отказ в обслуживании» (DoS, Denial of Service) и позволяет удалённому неавторизованному злоумышленнику вызвать исчерпание системных ресурсов (памяти) на сервере, что приводит к недоступности приложения для легитимных пользователей.
История и контекст
Уязвимость CVE-2015-1818 была зафиксирована и опубликована в 2015 году. Она затрагивает библиотеку Apache Commons FileUpload, начиная с версии 1.0 и до версии 1.3.1 включительно. Проблема была исправлена в версии 1.3.2, выпущенной 11 марта 2015 года. На момент обнаружения уязвимость считалась критической, поскольку Apache Commons FileUpload является одной из наиболее распространённых библиотек для обработки multipart/form-data запросов в Java-экосистеме, используемой, в частности, в Apache Tomcat, Apache Struts, Spring Framework и других популярных продуктах.
Суть уязвимости
Причина возникновения
Уязвимость связана с некорректной обработкой вложенных частей (parts) в multipart-запросах. Библиотека Apache Commons FileUpload не накладывает ограничений на количество вложенных частей или на размер их заголовков. При отправке специально сформированного HTTP-запроса с большим количеством вложенных частей (например, тысяч) сервер начинает выделять память для хранения всех этих частей, что приводит к быстрому исчерпанию доступной памяти (OutOfMemoryError).
Механизм эксплуатации
Злоумышленник отправляет HTTP-запрос методом POST с типом содержимого multipart/form-data, содержащий большое количество полей (parts) с минимальным содержимым. Каждая часть требует выделения памяти для хранения заголовков и метаданных. При отсутствии ограничений на количество частей сервер пытается обработать все части, что приводит к переполнению кучи (heap) и аварийному завершению работы виртуальной машины Java (JVM).
Вектор атаки
Атака осуществляется удалённо, без необходимости аутентификации. Для её проведения злоумышленнику достаточно отправить один HTTP-запрос на уязвимый сервер. Это делает уязвимость особенно опасной для публичных веб-приложений, доступных из сети Интернет.
Влияние и последствия
Затронутые продукты
Уязвимость CVE-2015-1818 затрагивает широкий спектр продуктов и фреймворков, использующих Apache Commons FileUpload. В их числе:
- Apache Tomcat — популярный контейнер сервлетов. Версии до 7.0.59 и 8.0.21 были уязвимы.
- Apache Struts — фреймворк для разработки веб-приложений. Версии до 2.3.24 были уязвимы.
- Spring Framework — платформа для разработки приложений на Java. В версиях до 4.1.6 и 4.0.8 использовалась уязвимая версия библиотеки.
- JBoss (WildFly) — сервер приложений. Версии до 8.2.1.Final были уязвимы.
- Liferay Portal — система управления контентом. Версии до 6.2 CE GA6 и 6.2 EE GA4 были уязвимы.
- Jenkins — система непрерывной интеграции. Версии до 1.600 были уязвимы.
Тип атаки
Уязвимость относится к категории «отказ в обслуживании» (DoS). В отличие от уязвимостей, позволяющих выполнить произвольный код или получить несанкционированный доступ к данным, CVE-2015-1818 не даёт злоумышленнику возможности читать, изменять или удалять данные на сервере. Однако её эксплуатация может привести к временной или полной недоступности сервиса, что критично для бизнес-приложений.
Примеры эксплуатации
В 2015 году были зафиксированы случаи массового сканирования уязвимых серверов в сети Интернет. Злоумышленники автоматизированно отправляли запросы с большим количеством частей, вызывая отказ в обслуживании на серверах, не обновлённых до исправленной версии. Особенно уязвимыми оказались серверы, работающие под управлением Apache Tomcat, которые по умолчанию не ограничивают количество частей в multipart-запросах.
Методы защиты
Обновление библиотеки
Основным методом защиты является обновление Apache Commons FileUpload до версии 1.3.2 или выше. В этой версии было добавлено ограничение на количество вложенных частей в multipart-запросе (по умолчанию — 10 000). Также были введены ограничения на размер заголовков каждой части.
Обновление зависимостей
Для продуктов, использующих Apache Commons FileUpload, необходимо обновить сам продукт до версии, включающей исправленную библиотеку. Например:
- Apache Tomcat: обновление до версии 7.0.59 или 8.0.21.
- Apache Struts: обновление до версии 2.3.24.
- Spring Framework: обновление до версии 4.1.6 или 4.0.8.
Настройка ограничений
В качестве временной меры защиты (до обновления) можно настроить ограничения на уровне веб-сервера или контейнера сервлетов. Например, в Apache Tomcat можно установить параметр maxSwallowSize в конфигурации коннектора, чтобы ограничить размер тела запроса. Однако этот метод менее надёжен, чем обновление.
Использование брандмауэров веб-приложений (WAF)
Современные WAF (Web Application Firewall) могут блокировать запросы с аномально большим количеством частей в multipart-запросах. Однако этот метод не гарантирует полной защиты, так как злоумышленник может варьировать количество частей, чтобы обойти сигнатуры.
Связанные уязвимости
CVE-2015-1818 не является единственной уязвимостью в Apache Commons FileUpload. В 2014 году была обнаружена уязвимость CVE-2014-0050, связанная с некорректной обработкой имён файлов, которая позволяла выполнить произвольный код. В 2016 году была найдена уязвимость CVE-2016-3092, связанная с некорректной обработкой multipart-запросов в Apache Tomcat, которая также приводила к отказу в обслуживании.
Интересные факты
- Уязвимость CVE-2015-1818 была обнаружена и зафиксирована в рамках проекта Apache Commons, что подчеркивает важность своевременного обновления даже широко используемых и стабильных библиотек.
- На момент обнаружения уязвимости Apache Commons FileUpload использовалась в тысячах веб-приложений по всему миру, что делало её критической для многих организаций.
- Уязвимость была исправлена в версии 1.3.2, которая вышла всего через несколько дней после публикации информации о проблеме, что демонстрирует оперативность работы команды Apache.
Источники
- National Vulnerability Database (NVD) — CVE-2015-1818 Detail
- Apache Commons FileUpload Security Advisory
- Apache Tomcat Security Advisory
- CVE-2014-0050 — Apache Commons FileUpload Arbitrary Code Execution
- CVE-2016-3092 — Apache Tomcat DoS Vulnerability
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →