
Исследовательская реализация, демонстрирующая взаимодействие с подсистемой eBPF в Linux, связанное с CVE-2021-3490. Включает создание BPF-карт, обёртки системных вызовов, настройку пространства имён и анализ верификатора. Только для образовательных целей и исследований в области безопасности.
Исследовательская реализация, демонстрирующая взаимодействие с подсистемой eBPF ядра Linux в контексте CVE-2021-3490. Включает создание BPF-карт, обёртки системных вызовов, настройку пространств имён и анализ верификатора. Только для образовательных и исследовательских целей в области безопасности.
CVE-2021-3490 – Анализ отслеживания границ eBPF-верификатора Обзор
Этот репозиторий содержит реализацию на C, исследующую подсистему eBPF ядра Linux в связи с CVE-2021-3490 — уязвимостью, связанной с некорректным отслеживанием 32-битных границ в eBPF-верификаторе.
Цель проекта — понять, как работает системный вызов bpf() изнутри, как создаются и управляются BPF-карты из пользовательского пространства, а также как верификатор обрабатывает ограничения регистров. Это исследовательский и учебный проект, сфокусированный на внутреннем устройстве ядра и анализе безопасности.
Этот код не предназначен для использования в production-среде.
Предыстория
eBPF позволяет программам из пользовательского пространства загружать верифицированный байт-код в ядро Linux. Перед выполнением верификатор ядра проверяет, что программа:
В уязвимых версиях ядра верификатор некорректно отслеживал 32-битные границы во время некоторых операций ALU. Эта ошибка могла позволить специально созданным программам обходить проверки валидации.
Официальные сведения:
NVD: https://nvd.nist.gov/vuln/detail/CVE-2021-3490
Ubuntu Security Notice: https://ubuntu.com/security/CVE-2021-3490
Red Hat Advisory: https://access.redhat.com/security/cve/CVE-2021-3490
Что демонстрирует этот проект
Эта реализация фокусируется на:
bpf()union bpf_attrBPF_MAP_TYPE_ARRAY)Она предназначена для понимания того, как пользовательское пространство взаимодействует с инфраструктурой BPF ядра.
Этот репозиторий не содержит автоматизированной логики эксплойта.
Тестовая среда
Проверить версию ядра можно командой:
uname -r
На обновлённых или более новых ядрах поведение может отличаться.
Сборка
Скомпилируйте с помощью GCC:
gcc -o exploit exploit.c -lpthread
Никаких внешних библиотек, кроме стандартных заголовков Linux, не требуется.
Использование
Запустите программу:
./exploit
Программа выполнит:
Примечание по безопасности
Этот проект предназначен для:
Не запускайте этот код на системах без соответствующего разрешения.
Цели обучения
С помощью этого проекта можно понять: