CVE-2024-36971 — Доказательство концепции (только для исследований и анализа)
⚠️ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ — ПРОЧТИТЕ ПЕРЕД ИСПОЛЬЗОВАНИЕМ РЕПОЗИТОРИЯ
Этот репозиторий предназначен только для оборонительных исследований, анализа и ответственного информирования.
Он содержит неэксплуатируемый файл доказательства концепции с именем CVE-2024-36971 и общедоступный фрагмент заголовка ядра Android (sock.h) для иллюстрации затронутой области.
Никакого эксплойт-кода, команд воспроизведения или пошаговых инструкций не предоставляется. Не запускайте никакие файлы из этого репозитория на рабочих устройствах, сторонних системах или сетях, которыми вы не управляете. Автор снимает с себя ответственность за любое неправомерное использование.
Содержание
- Обзор
- Содержимое репозитория
- Техническое описание высокого уровня
- О включённом фрагменте
sock.h
- Исследовательская среда (высокий уровень, не для выполнения)
- Наблюдаемый результат (протестированное устройство)
- Ответственное раскрытие и контакты
- Правовое и этическое уведомление
1. Обзор
CVE-2024-36971 — это уязвимость типа «использование после освобождения» (Use-After-Free, UAF) в сетевой подсистеме ядра Android. Основная причина — небезопасный порядок операций при обработке кеша назначения (dst), используемого для маршрутизации сокетов (sk->sk_dst_cache), что может оставить висячий указатель, доступный для параллельных путей выполнения. В этом репозитории документируется защитное исследовательское PoC, демонстрирующее воздействие (нестабильность ядра и повреждение данных) без предоставления примитивов эксплуатации.
Этот README объясняет, что демонстрирует PoC, почему включённый фрагмент sock.h актуален, а также ответственные ограничения, касающиеся тестирования и распространения.
2. Содержимое репозитория
CVE-2024-36971 — файл исходного кода PoC (оставлен в репозитории для прозрачности). Не предназначен для выполнения; включён только для архивирования/анализа.
sock.h — общедоступный фрагмент заголовка ядра Android, показывающий структуры сокетов/назначения и вспомогательные объекты, имеющие отношение к проблеме.
README.md — этот файл (документация и руководство).
3. Техническое описание высокого уровня (не для выполнения)
- Основная причина: неправильный порядок обработки ссылок и освобождения объектов
dst в пути кода маршрутизации/кеша назначения, что приводит к использованию после освобождения (UAF).
- Вектор срабатывания (высокий уровень): сетевой путь, который задействует
__dst_negative_advice() / путь кода кеша назначения в ядре, может вызвать условие UAF. Этот репозиторий не предоставляет инструкций для его срабатывания.
- Наблюдаемое воздействие: повреждение памяти ядра, нестабильность и, в протестированных условиях, повреждение метаданных хранилища, приводящее к состоянию загрузки «данные повреждены» (программный кирпич / soft-brick).
- Статус эксплуатации: PoC демонстрирует воздействие и подтверждает наличие критической ошибки ядра. Наблюдаемое повреждение при тестировании было недетерминированным и разрушительным, а не стабильным, надёжным эксплойтом для выполнения кода. Превращение этой ошибки в надёжный эксплойт потребовало бы продвинутой манипуляции кучей и управления распределителем — такая работа выходит за рамки данного репозитория и не предоставляется.
4. О включённом фрагменте sock.h
Заголовочный файл sock.h является общедоступным (взят из деревьев ядра Android) и содержит:
- определения для
struct sock и связанных сетевых структур;
- ссылки на
sk_dst_cache (кеш назначения сокета) и вспомогательные функции для получения/установки ссылок назначения;
- шаблоны доступа RCU/refcount и использование
dst_release().
Этот фрагмент включён, чтобы показать точные структуры и расположения кода, которые дают контекст для CVE-2024-36971. Заголовок поддерживает объяснение в этом README, показывая поля данных и функции, порядок или синхронизация которых критичны для корректности.
5. Исследовательская среда (высокий уровень, не для выполнения)
Примечание: Ниже приведён список типичных возможностей и инструментов, используемых исследователями безопасности в контролируемой лаборатории. Он намеренно не содержит команд, скриптов или значений параметров.
Рекомендуемые возможности для безопасного изолированного исследования ядра:
- Изолированная тестовая сеть или лаборатория с воздушным зазором (air-gapped), чтобы исключить случайное воздействие на сторонние системы.
- Выделенное тестовое оборудование, которое вам принадлежит и которое можно полностью перепрошить/стереть (не используйте рабочие или сторонние устройства).
- Виртуализация (например, QEMU/KVM) для сборки и отладки образов ядра в контролируемой среде.
- Исходное дерево ядра Android и локальная среда сборки для компиляции инструментированных/отладочных ядер и создания карт символов.
- Инструменты и процессы отладки/логирования:
adb/fastboot для доступа к устройству, сбор dmesg/last_kmsg, а также инструменты для сопоставления адресов ядра с исходными строками (файлы символов, addr2line и т.д.).
- Отладка ядра и санитайзеры (по мере необходимости), такие как KASAN/KMSAN, ftrace и другие средства трассировки для обнаружения нарушений безопасности памяти без попыток эксплуатации.
- Безопасный сбор и хранение артефактов: логов, backtrace и фотографических доказательств.
6. Наблюдаемый результат (протестированное устройство)
- Протестированное устройство: Nothing Phone (1) — устройство, принадлежащее и контролируемое исследователем. На момент тестирования устройство работало на версии ядра, не содержащей исправление.
- Контекст тестирования: PoC выполнялся из той же локальной сети, что и целевое устройство, в изолированной тестовой среде.
- Результат: после нескольких отправок трафика PoC устройство испытало серьёзное повреждение памяти ядра. Повреждение распространилось на метаданные хранилища, и устройство загрузилось с ошибкой «данные повреждены». Для возврата в рабочее состояние потребовался ремонт/перепрошивка (программный кирпич / soft-brick).
- Важное примечание: это поведение было разрушительным и недетерминированным; PoC вызвал повреждение и потерю данных, а не надёжный примитив выполнения кода. Исследователь прекратил тестирование после наблюдения разрушительного поведения — цель заключалась в проверке воздействия, а не в разработке рабочего эксплойта.
7. Ответственное раскрытие и контакты
Этот проект следует принципам ответственного раскрытия. Если вы являетесь поставщиком, мейнтейнером или контактным лицом по безопасности и вам требуются дополнительные диагностические артефакты (полные backtrace, очищенные логи или криминалистические дампы) для проверки или устранения проблемы, пожалуйста, свяжитесь с владельцем репозитория по защищённому каналу. Предпочтительные способы:
- открыть приватный issue на GitHub и указать защищённый канал связи, или
- прямой контакт по PGP-зашифрованной электронной почте (предоставьте свой открытый ключ или запросите ключ исследователя).
Исследователь будет сотрудничать с проверенными поставщиками/мейнтейнерами и делиться дополнительными диагностическими материалами на безопасных, соответствующих условиях. Воспроизводимые шаги для повторения не будут опубликованы публично.
8. Правовое и этическое уведомление
- Этот репозиторий предоставляется как есть только для исследовательских, образовательных и защитных целей.
- Автор не одобряет вредоносное использование и снимает с себя ответственность за любое неправомерное использование.
- Не используйте содержащиеся материалы на системах, которыми вы не владеете или не управляете.
- Всегда соблюдайте действующее законодательство, политику учреждений и процессы координированного раскрытия информации поставщиками.