
Образовательный защитный набор для двух LPE-уязвимостей ядра Linux, связанных с повреждением страничного кэша (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331): усиление защиты, обнаружение, верификация, seccomp + механизм проверки. Только обнаружение и предотвращение — без эксплойтов. TLP:CLEAR.
Обнаружение, сдерживание и проверка защит от двух локальных повышений привилегий через повреждение page cache в Linux — DirtyClone (CVE-2026-43503) и pedit COW (CVE-2026-46331) — на хостах и контейнерах.
Это образовательный, защитный набор средств безопасности. Он объясняет, как обе уязвимости работают на уровне системных вызовов, и содержит инструменты для усиления защиты, обнаружения, проверки и seccomp, а также проверочный стенд, подтверждающий работоспособность инструментов на реальных ядрах. Он не содержит эксплойтов, шелл-кода или целевых смещений — по замыслу.
Оба CVE позволяют непривилегированному локальному пользователю стать root, повреждая page cache (копию в ОЗУ) setuid-root-двоичного файла, такого как /usr/bin/su, — при этом файл на диске остаётся нетронутым. Это делает атаку скрытной: мониторинг целостности файлов молчит, криминалистический анализ диска ничего не находит, а повреждение исчезает после перезагрузки.
Обновление ядра — настоящее исправление. Но в период развёртывания, а также в качестве эшелонированной защиты после него необходимо закрыть пути атак, следить за цепочкой атаки и проверять свою защиту. Именно это и предоставляет данный набор, где каждый элемент управления привязан к документированному шагу цепочки атак, чтобы вы видели, почему он работает.
Обе ошибки относятся к одному классу дефектов: ядро записывает в буфер, который считает частным, однако этот буфер всё ещё поддерживается общей, привязанной к файлу page-cache-памятью. Два структурных шлюза управляют всеми вариантами обеих цепочек:
| Шлюз | Что это | Эффективность как защита |
|---|---|---|
| 1. Путь через capabilities | CAP_NET_ADMIN, полученный через непривилегированные пространства имён пользователей (unshare(CLONE_NEWUSER|CLONE_NEWNET)) | Надёжная точка блокировки — через неё проходят все варианты, известные и неизвестные. Закройте её первой. |
| 2. Поверхность модулей | Уязвимые модули: act_pedit, esp4/esp6, rxrpc, xt_TEE, nf_dup_ipv4/nf_dup_ipv6 | Глубокоэшелонированная защита — удаляет только известные примитивы; новая точка входа обойдёт её. |
Исправлено в стабильных точечных релизах вышестоящего репозитория (DirtyClone ≥ 6.12.91 / 7.0.10; pedit COW ≥ 6.12.94 / 7.0.13), а также в бэкпортах от вендоров; магистральная ветка 7.1 — финальная. Проверьте своё ядро по трекеру вашего дистрибутива — см. docs/analysis.md §8.
Только хосты Linux. Эти скрипты читают и записывают реальное состояние ядра. Запускайте усиление на контролируемом хосте; запускайте разрушительный проверочный стенд на одноразовой ВМ. См. Требования.
# 1. Предпросмотр изменений по изоляции хоста (ничего не записывает)
sudo ./kit/harden-pagecache-lpe.sh --dry-run
# 2. Применить ограничения на пространства имён пользователей + блокировки уязвимых модулей
sudo ./kit/harden-pagecache-lpe.sh
# 3. Проверить состояние — запустить функциональный зонд от НЕпривилегированного пользователя
sudo -u nobody ./kit/verify-pagecache-lpe.sh # код выхода: 0=ПРОЙДЕН 1=ПРЕДУПРЕЖДЕНИЕ 2=НЕ ПРОЙДЕН
# 4. (Необязательно) Наблюдать цепочку атаки в реальном времени с помощью eBPF
sudo bpftrace ./kit/detect-pagecache-lpe.bt
Для контейнеров примените seccomp-оверлей
(kit/seccomp-pagecache-lpe.json):
docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json <образ>
Новичок? Прочтите START-HERE.md — пошаговое руководство в стиле лекции: от первопричины до полного прогона проверки.
.
├── START-HERE.md Пошаговое руководство — рекомендуемая точка входа
├── docs/ "Почему": анализ и рекомендации по эксплуатации
│ ├── analysis.md Анализ первопричин, цепочки атак, разработка средств обнаружения
│ ├── HARDENING-GUIDE.md Руководство по изоляции для операторов (хост → systemd → Docker → Kubernetes)
│ └── plain-language-summary.md Упрощённый обзор на простом английском для обеих ошибок
├── kit/ "Что запускать": четыре самодостаточных артефакта
│ ├── harden-pagecache-lpe.sh Применить изоляцию хоста (sysctl + блокировки модулей)
│ ├── verify-pagecache-lpe.sh Проверка состояния только для чтения (ПРОЙДЕН/ПРЕДУПРЕЖДЕНИЕ/НЕ ПРОЙДЕН)
│ ├── detect-pagecache-lpe.bt bpftrace/eBPF телеметрия для подготовительной цепочки
│ └── seccomp-pagecache-lpe.json Seccomp-оверлей для контейнеров, блокирующий системные вызовы цепочки
└── testkit/ "Доказательство": проверочный стенд + описание SHOWCASE.md
| Компонент | Роль |
|---|---|
docs/analysis.md | Источник истины: первопричины, поведенческие цепочки атак, разработка средств обнаружения, усиление защиты, сравнительная таблица. |
docs/HARDENING-GUIDE.md | Многоуровневая изоляция для хостов, systemd-юнитов, Docker/Podman и Kubernetes. |
kit/ | Четыре поставляемых артефакта. Скопируйте этот каталог на хост для его защиты. |
testkit/ | Воспроизводимая проверка на реальных ядрах (локальный Docker + одноразовые EC2) и SHOWCASE.md — честная оценка того, что проверки доказывают, а что нет. |
harden, verify): хост Linux с bash, sysctl, modprobe и unshare. Root для усиления; запускайте зонд проверки от непривилегированного пользователя.detect-pagecache-lpe.bt): root, bpftrace ≥ 0.16 и BTF ядра (/sys/kernel/btf/vmlinux). Некоторые kprobes могут быть встроены (inlined) в конкретном ядре — в заголовке скрипта поясняется, как адаптировать.testkit/): одноразовая ВМ с Linux — он записывает реальные конфигурации и выгружает модули ядра. Средство запуска EC2 требует AWS CLI v2 и jq; SSH не используется (транспорт — AWS SSM). Пользователи macOS могут запустить локальный smoke-тест Docker, но полная проверка требует Linux.TLP:CLEAR — публичное, неограниченное распространение. Этот репозиторий предназначен только для обнаружения и предотвращения. Он намеренно включает:
…и намеренно исключает:
Честные ограничения этого подхода — что проверка доказывает, а что нет — задокументированы в testkit/SHOWCASE.md §8. Используйте только на системах, которыми владеете или на тестирование которых уполномочены. Усиление — это сдерживание, а не лекарство: обновите ядро.
START-HERE.md — пошаговое руководство (начните здесь)docs/analysis.md — полный технический анализdocs/plain-language-summary.md — упрощённый обзор на простом английскомПриветствуются сообщения об ошибках и pull-запросы — см. CONTRIBUTING.md. Поскольку элементы управления дублируются в нескольких файлах (список модулей, настройки пространств имён пользователей, маска обнаружения), перед изменением поверхности атаки прочтите инварианты синхронизации в этом руководстве.
Лицензировано в соответствии с Apache License 2.0.