
Не weaponized-стенд анализа и валидации CVE-2016-5195 (Dirty COW) с исследованием первопричины, обзором вышестоящих патчей и безопасным PoC только для лабораторных сред на подтверждённых ядрах.
Защитное исследование, невейпонизированная валидация и анализ исправлений для CVE-2016-5195 (Dirty COW) — состояния гонки при копировании при записи в ядре Linux, которое может позволить локальному пользователю изменять данные, связанные с отображением, доступным только для чтения, и получать повышенные привилегии.
| Поле | Значение |
|---|---|
| Компонент | Управление памятью ядра Linux / get_user_pages() |
| Слабость | CWE-362: одновременное выполнение с использованием общего ресурса без надлежащей синхронизации |
| Серьёзность | Высокая, CVSS 3.1: 7.0 |
| Вектор | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Предварительное условие атаки | Локальный доступ с низкими привилегиями |
| Исправление в апстриме | 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 |
| Первый исправленный релиз в апстриме | Linux 4.8.3; бэкпорты в дистрибутивах различаются |
Dirty COW — это гонка в обработке ядром Linux принудительных записей и отображений с копированием при записи (COW). Локальный пользователь может создать гонку между инвалидацией страниц и записью через /proc/self/mem. На подверженном уязвимости ядре эта гонка может привести к тому, что данные, связанные с номинально доступным только для чтения приватным отображением, будут записаны обратно в нижележащий файл.
Воздействие выражается в локальном повышении привилегий, когда атакующий может применить этот примитив к критичному для безопасности файлу. Уязвимость эксплуатировалась в реальных условиях (in the wild) в октябре 2016 года. Данный репозиторий не автоматизирует этот путь повышения привилегий.
Стандартный стенд намеренно ограничен:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
poc.c -o dirtycow-safe -pthread
Примитив эксплойта только для лаборатории можно собрать отдельно:
cc -std=c11 -Wall -Wextra -Wpedantic -Werror -O2 \
exploit.c -o dirtycow-exploit -pthread
./dirtycow-safe
Необязательное ограниченное число итераций:
./dirtycow-safe --iterations 5000000
Возможные результаты:
marker-observed: на одноразовом inode наблюдалось уязвимое поведение.marker-not-observed: неопределённый результат. Гонка, которая не сработала, не доказывает, что ядро исправлено.77: требуемый интерфейс Linux /proc/self/mem недоступен.Не используйте результат PoC в качестве основного способа проверки статуса исправления. Обратитесь к бюллетеню (advisory) пакета ядра для используемого дистрибутива и убедитесь, что после перезагрузки активно исправленное ядро.
exploit.c принимает явно указанный файл и префикс замены и демонстрирует примитив записи в произвольный файл на подверженном уязвимости ядре. Он требует буквального подтверждения --i-understand, применяет ограничения на размер нагрузки и число итераций и не создаёт нагрузку для повышения привилегий.
Выбранный файл может быть изменён необратимо. Используйте его только в изолированной одноразовой лаборатории, которая принадлежит вам или на тестирование которой у вас есть явное разрешение. Полный анализ гонки и переходов состояний приведён в ROOT_CAUSE.md.
evidence/evidence.json фиксирует сигнатуры исходного кода, наблюдавшиеся в официальных версиях Linux до и после исправления, результат сборки PoC без предупреждений компилятора и свойства безопасности валидации. evidence/validation.log содержит краткую сводку. Проведённая валидация не выполняла гонку.
Установите обновление ядра, предоставленное вендором, и перезагрузитесь в исправленное ядро. Не определяйте подверженность уязвимости только по строке версии из апстрима: корпоративные и дистрибутивные ядра часто бэкпортируют исправление, не перенимая номер версии апстрима. Контейнеры используют ядро хоста, поэтому устранение должно охватывать и хост.
Точное изменение в апстриме см. в PATCH_ANALYSIS.md, а рекомендации по валидации — в VULNERABILITY_REPORT.md.
Используйте этот материал только на системах, которые принадлежат вам или на тестирование которых у вас есть явное разрешение.
| Путь | Назначение |
|---|
poc.c | Невейпонизированная валидация с использованием только отсоединённого (unlinked) временного inode |
exploit.c | Примитив записи в произвольный файл для авторизованной одноразовой лаборатории |
ROOT_CAUSE.md | Подробный анализ уязвимого перехода состояний и гонки |
VULNERABILITY_REPORT.md | Предварительные условия, первопричина, воздействие и устранение |
PATCH_ANALYSIS.md | Построчный анализ апстрим-исправления FOLL_COW |
evidence/ | Структурированный вывод валидации и заметки по интерпретации |