Linux Kernel bis 6.18.58/7.2.12 x86/kvm arch/x86/kvm/x86.c __kvm_handle_async_pf Race Condition

CVSS Meta Temp ScoreAktueller Exploitpreis (≈)CTI Interest Score
5.3$0-$5k0.00

Zusammenfassunginfo

In Linux Kernel bis 6.18.58/7.2.12 wurde eine kritische Schwachstelle entdeckt. Betroffen hiervon ist die Funktion __kvm_handle_async_pf der Datei arch/x86/kvm/x86.c der Komponente x86/kvm. Die Bearbeitung verursacht Race Condition. Die Identifikation der Schwachstelle wird mit CVE-2026-99178 vorgenommen. Der Angriff muss auf lokaler Ebene erfolgen. Es existiert kein Exploit. Ein Upgrade der betroffenen Komponente wird empfohlen.

Detailsinfo

Eine kritische Schwachstelle wurde in Linux Kernel bis 6.18.58/7.2.12 ausgemacht. Dies betrifft die Funktion __kvm_handle_async_pf der Datei arch/x86/kvm/x86.c der Komponente x86/kvm. Dank der Manipulation mit einer unbekannten Eingabe kann eine Race Condition-Schwachstelle ausgenutzt werden. Klassifiziert wurde die Schwachstelle durch CWE als CWE-362. Dies wirkt sich aus auf die Verfügbarkeit. CVE fasst zusammen:

In the Linux kernel, the following vulnerability has been resolved: x86/kvm: Don't consume async #PF flags on a kernel #PF in NMI context An async #PF "page not present" event arrives through the #PF vector, and its reason sits in the per-CPU apf_reason.flags until __kvm_handle_async_pf() reads and clears it. If an NMI arrives after the event is injected and before the #PF handler reads the flags, and the NMI handler itself takes a #PF, that fault reads and clears the flags belonging to the #PF it interrupted. It then finds interrupts disabled in the NMI context it interrupted, and panics: Kernel panic - not syncing: Host injected async #PF in interrupt disabled region Call Trace: <NMI> panic+0x52/0x60 __kvm_handle_async_pf+0xb0/0xb0 exc_page_fault+0x71/0xb0 asm_exc_page_fault+0x27/0x30 RIP: 0010:__get_user_nocheck_8+0x6/0x20 perf_callchain_user+0x147/0x1a0 get_perf_callchain+0x12d/0x1c0 ... perf_event_nmi_handler+0x26/0x50 exc_nmi+0xe8/0x110 RIP: 0010:asm_exc_page_fault+0x0/0x30 </NMI> The last RIP line shows the NMI landing on the first instruction of the #PF entry. perf with user call chains takes such a fault: the sampling NMI walks the user stack with __get_user(), which faults when a saved frame pointer is not a valid user address or the walk runs off the top of the stack. The same window exists when KVM, running as an L1 hypervisor with DELIVERY_AS_PF_VMEXIT, reads the flags itself after a #PF VM-exit. The NMI entry code saves and restores CR2 for this nesting, but not the async #PF reason. Andy Lutomirski described the race, with perf as the example, when async #PF delivery was reworked in 2020 [1]. Saving and clearing the flags across the NMI, next to CR2, was discussed there but not merged. Since that rework, Linux has stopped setting KVM_ASYNC_PF_SEND_ALWAYS, so the host delivers "page not present" only for user mode faults and a kernel-mode fault in NMI context (including kernel-mode #MC and #DB) cannot be an async page fault. In that case, return without touching the flags so that the interrupted handler finds them intact. Tested on v7.3-rc5 in a 4-vCPU, 2 GiB guest restored from a snapshot whose memory is served on demand through userfaultfd, so that reading it back takes async #PFs, while every thread samples hardware cycles with user call chains and points its frame pointer at an unmapped page. Without this patch the guest panicked as above in 3 of 3 runs. With it, the guest survived 3 of 3 runs of 60 seconds, and the host counted 148,441 to 153,334 kvm_async_pf_not_present events in the first 20 seconds of each. On 6.18.50 the results were the same: the guest panicked without the patch and survived with it.

Auf git.kernel.org kann das Advisory eingesehen werden. Die Identifikation der Schwachstelle findet seit dem 25.09.2026 als CVE-2026-99178 statt. Die Ausnutzbarkeit gilt als leicht. Der Angriff muss lokal passieren. Zur Schwachstelle sind technische Details bekannt, ein verfügbarer Exploit jedoch nicht.

Ein Upgrade auf die Version 6.18.59 oder 7.2.13 vermag dieses Problem zu beheben. Die Schwachstelle lässt sich auch durch das Einspielen des Patches b77e9622bbade9812e2090c66d25c372f515e921/f45ee1ff6358a22d7e22a4c53cb3148ea97b10d9/81d99abe2bd81379abfb595e403bbbee6fbfc624 beheben. Als bestmögliche Massnahme wird das Aktualisieren auf eine neue Version empfohlen.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Produktinfo

Typ

Hersteller

Name

Version

Lizenz

Webseite

CPE 2.3info

CPE 2.2info

CVSSv4info

VulDB Vector: 🔒
VulDB Zuverlässigkeit: 🔍

CVSSv3info

VulDB Meta Base Score: 5.5
VulDB Meta Temp Score: 5.3

VulDB Base Score: 5.5
VulDB Temp Score: 5.3
VulDB Vector: 🔒
VulDB Zuverlässigkeit: 🔍

CVSSv2info

AVACAuCIA
💳💳💳💳💳💳
💳💳💳💳💳💳
💳💳💳💳💳💳
VektorKomplexitätAuthentisierungVertraulichkeitIntegritätVerfügbarkeit
freischaltenfreischaltenfreischaltenfreischaltenfreischaltenfreischalten
freischaltenfreischaltenfreischaltenfreischaltenfreischaltenfreischalten
freischaltenfreischaltenfreischaltenfreischaltenfreischaltenfreischalten

VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Zuverlässigkeit: 🔍

Exploitinginfo

Klasse: Race Condition
CWE: CWE-362
CAPEC: 🔒
ATT&CK: 🔒

Physisch: Teilweise
Lokal: Ja
Remote: Nein

Verfügbarkeit: 🔒
Status: Nicht definiert
Preisentwicklung: 🔍
Aktuelle Preisschätzung: 🔒

0-Dayfreischaltenfreischaltenfreischaltenfreischalten
Heutefreischaltenfreischaltenfreischaltenfreischalten

Threat Intelligenceinfo

Interesse: 🔍
Aktive Akteure: 🔍
Aktive APT Gruppen: 🔍

Gegenmassnahmeninfo

Empfehlung: Upgrade
Status: 🔍

0-Day Time: 🔒

Upgrade: Kernel 6.18.59/7.2.13
Patch: b77e9622bbade9812e2090c66d25c372f515e921/f45ee1ff6358a22d7e22a4c53cb3148ea97b10d9/81d99abe2bd81379abfb595e403bbbee6fbfc624

Timelineinfo

25.09.2026 CVE zugewiesen
28.10.2026 +33 Tage Advisory veröffentlicht
28.10.2026 +0 Tage VulDB Eintrag erstellt
28.10.2026 +0 Tage VulDB Eintrag letzte Aktualisierung

Quelleninfo

Hersteller: kernel.org

Advisory: git.kernel.org
Status: Bestätigt

CNA: Linux
CVE: CVE-2026-99178 (🔒)

GCVE (CVE): GCVE-0-2026-99178
GCVE (VulDB): GCVE-100-427922

Eintraginfo

Erstellt: 28.10.2026 12:50
Anpassungen: 28.10.2026 12:50 (60)
Komplett: 🔍
Cache ID: 216::103

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Diskussion

Bisher keine Kommentare. Sprachen: de + en.

Bitte loggen Sie sich ein, um kommentieren zu können.

Want to know what is going to be exploited?

We predict KEV entries!