Skip to content

PixieFail: ND Redirect out-of-bounds read (CVE-2023-45231)

Bir IPv6 Neighbor Discovery Redirect mesajının içindeki truncated bir option, EDK II'nin option validator'ını atlatıyor; validator daha sonra eksik length byte'ını paketin sonunun ötesinden okuyor — bir out-of-bounds read / information disclosure.

Mechanism

Validator'ın asla incelemediği 1-byte'lık bir option

ICMPv6 option'ları TLV-style'dır: byte 0 type, byte 1 ise length'tir. Ip6IsNDOptionValid() option'ları şu koşulla korunan bir loop ile dolaşır (aşağıdaki snippet NetworkPkg/Ip6Dxe/Ip6Option.c'den sadeleştirilmiştir — verbatim kopya değil, illustrative'dir):

while (Offset + sizeof(IP6_OPTION_HEADER) - 1 < OptionLen) { ... }
return TRUE;

Eğer Redirect, yalnızca type byte'ından oluşan tek bir truncated option taşıyorsa (length byte eksik / paketin sonunun dışında), loop koşulu girişte false olur, loop body asla çalışmaz ve fonksiyon yine de TRUE (geçerli) döner. Daha sonra Ip6ProcessRedirect() içindeki işleme, option'ın length field'ını — ki bu alan alınan buffer'ın ötesinde yer alır — dereference ederek bir out-of-bounds read gerçekleştirir. Bozulan invariant: "validate edilmiş bir option'ın tüm header byte'ları mevcuttur."

Zafiyetli kod NetworkPkg/Ip6Dxe/Ip6Nd.c ve Ip6Option.c içinde yaşıyor. Etki: information disclosure / out-of-bounds read.

Walkthrough

Kavramsal reproduction (link-local IPv6, boot link üzerinde OVMF/QEMU hedefi):

1. Target's IPv6 stack is active during network boot.
2. Send a crafted ICMPv6 Neighbor Discovery Redirect whose options section
   ends with a single byte (option type only, length byte truncated away).
3. Ip6IsNDOptionValid() returns TRUE; Ip6ProcessRedirect() reads the absent
   length byte -> OOB read of adjacent memory.

Quarkslab pixiefail-CVE-2023-45231.py'i sağlıyor. Beklenen sonuç: OOB read; ifşa olan byte'lar layout'a bağlı olarak reflect/gözlemlenebilir veya bir fault'a yol açabilir.

Detection

  • PXE link'inde malformed/truncated option trailer'larına sahip ICMPv6 Redirect frame'lerini izle.
  • ND Redirect'leri yalnızca router'lar emit etmeli; host-sourced Redirect'ler şüphelidir.

Mitigation

  • Header'ı tam olarak mevcut olmayan option'ları validate/parse etmeden önce reddeden EDK II NetworkPkg fix'ini uygula.
  • Access port'larında ICMPv6 Redirect'leri filtrele (RA Guard / ND inspection).

References