ITScape: Guest-to-Host Escape in KVM/ARM64

_callumguy1 pts0 comments

GitHub - V4bel/ITScape · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

V4bel

ITScape

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star<br>53

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>5 Commits<br>5 Commits

assets

assets

README.md

README.md

build.sh

build.sh

kconfig

kconfig

poc.c

poc.c

qemu.sh

qemu.sh

View all files

Repository files navigation

ITScape: Guest-to-Host Escape in KVM/arm64

Abstract

This document describes the ITScape (CVE-2026-46316) vulnerability reported and patched by Hyunwoo Kim (@v4bel). It is a KVM escape vulnerability that lets a guest escape to the host in a KVM/arm64 environment and run commands on the host with kernel (root) privilege. To the best of public knowledge, this is the first guest-to-host escape exploit research targeting KVM/arm64.

ITScape exploits a race condition in the vGIC-ITS (Interrupt Translation Service) emulation of KVM/arm64. It triggers the bug with guest-side actions alone to escape to the host, and it can threaten the guest-host isolation of KVM/arm64 hosts that accept untrusted guests, particularly multi-tenant arm64 public clouds.

Unlike the commonly published QEMU escapes, the bug lives in in-kernel KVM rather than QEMU user-space, so it works independently of QEMU's emulation, and it can run commands on the host with host kernel privilege rather than the privilege of a user process (such as QEMU).

For the detailed technical information, see here.

Note<br>After reporting this vulnerability to linux-distros@vs.openwall.org, the agreed embargo has ended, so this ITScape document is now published. For the disclosure timeline, see the technical detail document.

PoC Structure

For safe testing, running the PoC under QEMU TCG is recommended. (Triggering the vulnerability has nothing to do with QEMU.) When run under QEMU TCG, the PoC has the following structure.

double-put -> HOST kernel code-exec">QEMU TCG: emulates an arm64 CPU (including EL2) so an arm64 kernel runs as the KVM host<br>└─ arm64 Host Kernel: the KVM host and the escape target<br>└─ poc: opens the HOST's /dev/kvm and creates one guest VM "G" (uid=1000)<br>└─ 1. G's guest code (run by poc via KVM_RUN) performs GIC/ITS MMIO<br>2. traps into the HOST's in-kernel KVM -> double-put -> HOST kernel code-exec

This PoC is not a fully weaponized exploit that runs immediately in an arm64 cloud environment, but demonstration code that reproduces the vulnerability and the full exploit chain on top of a kvm selftest. An attacker who knows the target cloud's virtualization stack implementation is expected to find the transition to weaponization itself not difficult, but it entails porting the selftest's host-side direct construction to a real guest-driven path and tuning the addresses, gadget, offsets, race timing, and so on to the target kernel version and config. A weaponized real-world exploit exists but is not being released.

PoC Usage

The PoC is built on top of the kvm selftest in the Linux kernel source. Download the v7.1-rc6 kernel source, the version right before the vulnerability was patched, then build the PoC with the build script. Then build the kernel image with the bundled kconfig.

/tools/testing/selftests/kvm"># ./build.sh /tools/testing/selftests/kvm

Put the built PoC into a suitable initramfs, then run qemu based on the attached QEMU script.

"># ./qemu.sh

After QEMU TCG boots, run poc. On a successful exploit, it escapes the guest and creates the /ITScape file on the host.

# ./poc<br>...<br>[+] /ITScape created by the host kernel (owner uid=0). verify: ls -la /ITScape<br># ls -la /ITScape<br>-rw-r--r-- 1 0 0 0 Jun 9 00:02 /ITScape

This PoC is intended to provide accurate information. Do not use it on systems you are not authorized to test.

Affected Versions

ITScape (CVE-2026-46316) covers the range from 8201d1028caa (2024-04-25) to 13031fb6b835 (2026-06-05).

FAQ

Should I be worried?

If you operate an arm64 KVM host that accepts multi-tenant guests, or use an instance on top of one, check that the 13031fb6b835 patch is applied...

host qemu itscape kernel arm64 guest

Related Articles