Skip to content

PixieFail: PadN option infinite loop (CVE-2023-45233)

Bir IPv6 Destination Options header'ındaki length'i 0xFE olan bir PadN option, bir UINT8 offset counter'ının sıfıra wrap etmesine neden olarak EDK II'nin option parser'ını sonsuz bir döngüde hapsediyor — network boot'u kilitleyen bir denial of service.

Mechanism

İlerlemek yerine wrap eden 8-bit'lik bir offset

Ip6IsOptionValid(), her option'ı geçecek şekilde bir offset'i ilerleterek IPv6 extension-header option'ları üzerinde iterate eder. Offset bir UINT8 içinde tutulur ve şöyle ilerletilir:

Offset = (UINT8)(Offset + *(Option + Offset + 1) + 2);

Bir PadN option (type 1) için Option + Offset + 1'deki length byte attacker-chosen'dır. Eğer bu 0xFE ise, Offset == 0 için yeni değer (UINT8)(0 + 0xFE + 2) = (UINT8)0x100 = 0x00 olur. Offset asla hareket etmez; while-loop asla sonlanmaz. Bozulan invariant: "her iterasyon offset'i en az bir option kadar ilerletir." 8-bit'lik bir counter +0x100 adımını temsil edemez, bu yüzden sessizce truncate olup hiç ilerleme kaydetmez.

Zafiyetli kod: NetworkPkg/Ip6Dxe/Ip6Option.c içindeki Ip6IsOptionValid(). Etki: denial of service (firmware boot süresiz olarak kilitlenir).

Walkthrough

Kavramsal reproduction (boot link üzerinde OVMF/QEMU hedefi):

1. Target's IPv6 stack processes an inbound packet during PXE boot.
2. Send an IPv6 packet with a Destination Options extension header containing
   a PadN option (type 0x01) whose length byte is 0xFE.
3. Ip6IsOptionValid() computes (UINT8)(0 + 0xFE + 2) == 0 and loops forever.

Quarkslab pixiefail-CVE-2023-45233.py'i sağlıyor. Beklenen sonuç: target'ın firmware'i Ip6IsOptionValid() içinde döner ve network boot asla tamamlanmaz (reset gerektiren hard hang).

Detection

  • Boot hang'e neden olan tek bir crafted IPv6 paketi semptomdur; PXE link'inde trafiği yakala ve length'i 0xFE olan Destination Options PadN'i ara.

Mitigation

  • Offset type'ını genişleten / option length'i validate ederek counter'ın her zaman ilerlemesini sağlayan EDK II NetworkPkg fix'ini uygula.
  • Network edge'inde anormal PadN option'ları içeren IPv6 extension header'ları drop et.

References