Sploitus

Exploit for Zapscape

kitploit · 2026-08-25

Exploit Code

MARKDOWN129 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-V4BEL-ZAPSCAPE
### Трилогия побегов из KVM

![ITScape](https://raw.githubusercontent.com/v4bel/zapscape/HEAD/assets/sym-itscape.svg)   
**ITScape**   
(CVE‑2026‑46316) |  ![Januscape](https://raw.githubusercontent.com/v4bel/zapscape/HEAD/assets/sym-januscape.svg)   
**Januscape**   
(CVE‑2026‑53359) |  ![Zapscape](https://raw.githubusercontent.com/v4bel/zapscape/HEAD/assets/sym-zapscape.svg)   
**Zapscape**   
(CVE‑2026‑64561)  
---|---|---  
  
  


# Zapscape: побег с гостевой системы на хост в KVM/x86

![tux](https://assets.kitploit.com/production/public/readmes/49386/c71f60ed9a718361b89d7483e9caae632732731b10c9472936e8f69ebf739cee.png)

# Аннотация

![demo](https://assets.kitploit.com/production/public/readmes/49386/2f19b0c00662eaef25526c0fafb615bb9d61904c59176899b56fb628871079c6.gif)

В этом документе описывается уязвимость **Zapscape (CVE-2026-64561)** , которую обнаружил и о которой сообщил Hyunwoo Kim (@v4bel). Это уязвимость побега из KVM, которая позволяет гостевой системе выйти на хост в среде KVM/x86 и выполнять на хосте команды с привилегиями ядра (root).

Zapscape — это уязвимость использования после освобождения (use-after-free) в эмуляции **теневой MMU** KVM/x86, а именно в рекурсивном пути **zap** , который выполняется при освобождении теневых страниц. Её можно вызвать одними лишь действиями гостевой системы, чтобы повредить теневую страницу ядра хоста, и она может угрожать изоляции гость—хост для KVM/x86-хостов, принимающих недоверенные гостевые системы и предоставляющих вложенную виртуализацию, особенно мультитенантным публичным x86-облакам.

Подробную техническую информацию см. здесь.

> [!NOTE] После сообщения об этой уязвимости в some-email@example.com согласованное эмбарго завершилось, поэтому эксплоит опубликован в oss-security, а также опубликован этот документ о Zapscape. Хронологию раскрытия см. в документе с техническими подробностями.

# Структура PoC

PoC написан под AMD, и для безопасного тестирования его рекомендуется запускать под QEMU TCG. PoC имеет следующую структуру.

root@kitploit:~
    
    
    L0: Linux 7.1.3 + KVM_AMD on an x86_64 CPU (AMD SVM/NPT) emulated by QEMU TCG. The escape target
      └─ L1: the guest poc creates. Switching long -> PAE aliases one shadow page as both child and pinned root, and L1 then escalates the UAF into L0 kernel code-exec
           └─ L2: the guest L1 VMRUNs. Its memory touches trigger L0's quota reclaim -> recursive zap with no root_count guard -> UAF
    

Этот PoC — не боевой эксплоит, который сразу выполняется в облачном окружении, а демонстрационный код, воспроизводящий уязвимость и полную цепочку эксплоита поверх QEMU TCG. Чтобы использовать его в реальном облачном окружении, действия L1, выполняемые PoC, необходимо перенести в модуль ядра гостевой системы, а эксплоит — портировать под kconfig ядра хоста. Это несложная задача.

# Использование PoC

  1. Загрузите исходный код уязвимого ядра v7.1.3, затем соберите образ ядра на основе прилагаемого kconfig.
  2. Соберите PoC, затем составьте подходящий initramfs с помощью BusyBox или аналогичных средств и поместите собранный PoC в initramfs.



root@kitploit:~
    
    
    # gcc -O2 -g -static -pthread poc.c -o poc
    

  3. Загрузите целевую систему Linux 7.1.3 следующей командой. Тестируйте на QEMU v9.2.0 или новее.



root@kitploit:~
    
    
    # ./qemu.sh bzImage initramfs.cpio.gz
    

  4. После загрузки QEMU TCG запустите PoC. При успешном эксплоите он выходит из гостевой системы и создаёт на хосте файл /Zapscape, принадлежащий root.



root@kitploit:~
    
    
     /$$$$$$$$  /$$$$$$  /$$$$$$$
    |_____ $$  /$$__  $$| $$__  $$
         /$$/ | $$  \ $$| $$  \ $$
        /$$/  | $$$$$$$$| $$$$$$$/
       /$$/   | $$__  $$| $$____/
      /$$/    | $$  | $$| $$
     /$$$$$$$$| $$  | $$| $$
    |________/|__/  |__/|__/
    
    [+] /Zapscape created by the target KVM host kernel (owner uid=0, mode=0644).
    [+] exploit completed - verify with: ls -la /Zapscape
    zapscape(uid=65534)$ ls -la /Zapscape
    -rw-r--r--    1 root     root             0 Jul 29 05:27 /Zapscape
    zapscape(uid=65534)$
    

Этот PoC предназначен для предоставления точной информации. Не используйте его в системах, для тестирования которых у вас нет разрешения.

# Затронутые версии

Zapscape (CVE-2026-64561) охватывает диапазон от f95eec9bed76 (2020-07-08) до 2abd5287f083 (2026-07-21).

# FAQ

## Каково влияние этой уязвимости?

То же, что и у Januscape (CVE-2026-53359):

  1. **Побег из KVM** : Только действиями на стороне гостевой системы злоумышленник может скомпрометировать хост, на котором работает его ВМ. Например, арендовав всего один инстанс в публичном облаке, злоумышленник может вызвать панику ядра хоста и остановить все остальные арендуемые ВМ на той же физической машине (DoS), либо выполнить код с root-привилегиями на хосте и захватить хост со всеми гостевыми системами на нём (RCE).
  2. **LPE** : В таких дистрибутивах, как RHEL, `/dev/kvm` доступен для записи всем (`0666`), поэтому непривилегированный пользователь также может использовать эту уязвимость как LPE для получения root. При использовании в качестве LPE доступны ioctl VMM на стороне хоста, поэтому эксплоит становится проще и стабильнее.



## Как это связано с Januscape?

Она возникает в той же теневой MMU, но это отдельная уязвимость с другой первопричиной.

Тем не менее, в отличие от Januscape, на Intel её можно вызвать только тогда, когда L1 доступны оба значения длины обхода страниц EPT — 4 и 5. Это важный момент при оценке затронутого диапазона, поэтому его нужно точно понимать. См. документ с техническими подробностями.

## Возникает ли эта уязвимость в QEMU?

Нет. Как и Januscape, она возникает во внутриядерном KVM, поэтому срабатывает независимо от эмуляции QEMU. Из-за этого она может угрожать и крупным публичным облакам, которые реализуют и используют собственный стек виртуализации.

## Нужен ли root внутри гостевой ВМ?

Да. Требуются привилегии ядра на уровне L1. Когда вам выделяется инстанс в публичном облаке, у вас обычно есть root в вашей собственной ВМ, так что это условие выполняется. В сценарии без root в гостевой системе её необходимо комбинировать с LPE, например с Dirty Frag.

## Как вы думаете, уязвимости в KVM будут появляться и дальше?

Да. Я рекомендую выстроить устойчивый процесс установки исправлений для гипервизоров хостов. _Зима близко._

## Планируете ли вы продолжение после трилогии?

Надеюсь, что нет.