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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-0185-Case-Study — # Учебный пример и руководство по разработке эксплойта для CVE-2022-0185 Учебный пример и пошаговое руководство по разработке эксплойта для CVE-2022-0185 — переполнения буфера в куче ядра Linux, позволяющего повысить привилегии локально. Включает POC, отладку в QEMU и эксплойт для Ubuntu с подробным техническим анализом. | Kitploit
Инструменты/GitHubGitHub/dcheng69/cve-2022-0185-case-study
Повышение привилегийАнализ уязвимостейЭксплуатацияCTFОбучение и ОбразованиеЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubdcheng69/cve-2022-0185-case-study

Популярное

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

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

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

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

Смотреть все инструменты →

Описание

# Учебный пример и руководство по разработке эксплойта для CVE-2022-0185 Учебный пример и пошаговое руководство по разработке эксплойта для CVE-2022-0185 — переполнения буфера в куче ядра Linux, позволяющего повысить привилегии локально. Включает POC, отладку в QEMU и эксплойт для Ubuntu с подробным техническим анализом.

Поделиться

CVE-2022-0185-Case-Study

Репозиторий
31132 лет назадЕщё не проверено

CVE-2022-0185-Case-Study

Это тематическое исследование является результатом задания по курсу ECE 9069: Introduction to Hacking : https://whisperlab.org/introduction-to-hacking/

Обзор CVE-2022-0185

CVE-2022-0185 — это ошибка переполнения буфера в куче (heap-based buffer overflow), обнаруженная в том, как функция legacy_parse_param в функциональности Filesystem Context ядра Linux проверяет длину переданных параметров. Непривилегированный локальный пользователь (в случае, если включены непривилегированные пользовательские пространства имён; в противном случае требуется привилегия CAP_SYS_ADMIN в пределах пространства имён), способный открыть файловую систему, которая не поддерживает API Filesystem Context (и, таким образом, переключается на устаревшую обработку), мог использовать эту ошибку для повышения своих привилегий в системе. [1]

После сообщения об этой уязвимости был выпущен патч для исправления ошибки:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=722d94847de2

https://ubuntu.com/security/CVE-2022-0185#impact-score

Существует подробный разбор от исследователя: https://www.hackthebox.com/blog/CVE-2022-0185:_A_case_study

В этом репозитории я объясню основные шаги и сопутствующую справочную информацию для воспроизведения этой уязвимости. Кроме того, если что-то останется для вас неясным, вы можете написать мне на почту: [email protected]. Я с удовольствием отвечу на ваши вопросы.

1. Введение

Уязвимость CVE-2022-0185 была опубликована 11.02.2022, с базовой оценкой CVSS 3.x 8.4 (High).[1] Эта уязвимость представляет собой переполнение буфера в куче, вызванное целочисленным переполнением беззнакового целого (unsigned integer underflow).

Уязвимость была внесена в ядро Linux v5.1, затрагивая все дистрибутивы Linux с версиями ядра выше 5.1. Например, Ubuntu 20.04 LTS (focal) была уязвима к этой ошибке. Однако патч был выпущен и доступен начиная с версии 5.4.0-96.109.[3]

Эксплуатация этой уязвимости позволяет непривилегированному локальному пользователю повысить свои привилегии в системе, потенциально ставя под угрозу всю систему.[1] [2] Вот подробный анализ оценки CVSS: Базовая оценка: 8.4, что указывает на значительный риск безопасности, требующий немедленного внимания. Оценка воздействия: 5.9, что предполагает существенный потенциальный ущерб в случае эксплуатации. Высокие значения конфиденциальности, целостности и доступности способствуют этой оценке. Оценка эксплуатируемости: 2.5, что предполагает относительно высокую эксплуатируемость. Локальный вектор атаки, высокие значения целостности и доступности способствуют этой оценке.

Таблица 1.1 и Таблица 1.2 содержат дополнительную информацию об этих оценках и их компонентах.

Серьёзность CVSS v3.1Значение
Базовая оценка8.4 HIGH
Оценка воздействия5.9
Оценка эксплуатируемости2.5

Таблица 1.1 Оценки серьёзности CVSS[1]

Метрики CVSS v3.1Значение
Вектор атаки (AV)Локальный
Требуемые привилегии (PR)Отсутствуют
Взаимодействие с пользователем (UI)Отсутствует
Конфиденциальность (C)Высокая
Целостность (I)Высокая
Доступность (A)Высокая

Таблица 1.2 Вектор CVSS[1]

2. Предыстория и связанные концепции

2.1 Переполнение беззнакового целого

2.1.1 Дополнительный код (Two's Complement)

В современных компьютерах существуют два типа целых чисел: знаковые и беззнаковые. Представление знаковых чисел обычно включает операцию, называемую дополнительным кодом.[4] «В дополнительном коде старший двоичный разряд используется как знак, указывающий, является ли двоичное число положительным или отрицательным»[4]

Введение дополнительного кода преобразует операцию вычитания в сложение, тем самым упрощая проектирование и реализацию ЦП. Преобразование целого числа в дополнительный код включает три шага:[4]

  • Шаг 1: «Начните с двоичного представления числа, при этом старший бит является знаковым»;
  • Шаг 2: «Инвертируйте все биты»;
  • Шаг 3: «Прибавьте 1 ко всему инвертированному числу, игнорируя любые переполнения»

Рис. 2.1.1.1 показывает процесс преобразования на схеме с реальным примером преобразования «-6» в формат дополнительного кода.

twos_complement.drawio

Рис. 2.1.1.2 Сложение с использованием дополнительного кода

Рисунок 2.1.1.2 показывает процесс сложения дополнительного кода «-6» с «+6». Это демонстрирует, как использование дополнительного кода позволяет использовать сложение в качестве замены вычитания.

twos_complement-Page-2.drawio

Рис. 2.1.1.2 Сложение с использованием дополнительного кода

2.1.2 Представление чисел в ОЗУ

Из раздела 2.1.1 мы уже знаем, что такое дополнительный код. Теперь рассмотрим сценарий переполнения беззнакового целого в компьютерах. В современных компьютерах при использовании беззнаковых чисел самый старший бит не рассматривается как знаковый; вместо этого он является частью самого беззнакового числа. Это означает, что при выполнении вычитания с беззнаковым числом нужно быть осторожным, так как это может привести к состоянию, известному как переполнение беззнакового целого.[5]

Рис. 2.1.2.1 иллюстрирует ситуацию вычитания 6 из 5 для 8-битного беззнакового числа. Конечным результатом является 255 из-за зацикливания беззнакового числа. Когда такое переполнение происходит в условном операторе, оно может нарушить функциональность этого оператора.

twos_complement-Page-3.drawio

Рис. 2.1.2.1 Переполнение беззнакового целого

2.2 Память ядра Linux

2.2.1 Слэбы (Slabs) в куче

В ядре Linux Allocator Slab (Slab Allocator) — это механизм управления памятью, используемый для эффективного выделения и освобождения небольших блоков памяти. Он обеспечивает производительность, поддерживая несколько кэшей слэбов, каждый из которых содержит блоки памяти фиксированного размера. Как правило, kmalloc-32 выделяет 32 байта памяти, это слэб kmalloc-32, тогда как kmalloc-4k выделяет 4096 байт памяти, это слэб kmalloc-4k.[6]

Кроме того, выделение слэбов в ядре Linux обычно включает выделение памяти из непрерывного адресного пространства в области кучи ядра. Это непрерывное адресное пространство управляется ядром и используется для выделения памяти для различных объектов ядра и структур данных. Рис. 2.2.1.1 показывает расположение слэбов в памяти ядра Linux.

img

Рис. 2.2.1.1 Аллокатор Slab в Linux [7] (Автор этого рисунка — https://leviathan.vip/)

3 Технический анализ уязвимости

3.1 Proof of Concept

Если вы хотите воспроизвести процесс с самостоятельно скомпилированным ядром Linux, пожалуйста, прочитайте следующие markdown-файлы, чтобы получить справочную информацию:

  1. Сначала прочитайте markdown о том, как скомпилировать ядро Linux: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/compile_linux/compile.md
  2. Затем прочитайте markdown о том, как подготовить файловую систему RAM (ramfs) для выполнения POC: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/ramfs/ramfs.md
  3. Наконец, следуйте инструкциям в markdown POC: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/Poc/poc.md

Примечание:

Все markdown-файлы, а также код и скрипты находятся в разных папках этого репозитория. В каждой папке есть собственный markdown-файл. Прочитайте его, прежде чем пытаться что-либо сделать!

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