Pixel Thief: Exploiting SVG Filter Leakage in Firefox and Chrome¶
Browser SVG-filter rendering'indeki data-bağımlı memory erişimlerini okumak için bir CPU cache side channel (yalnızca wall-clock timing değil) kullanan bir pixel-stealing saldırısı; ~267 bit/sn sızdırır — ekran refresh hızından daha hızlı.
Mechanism¶
Bug sınıfı / invariant
SVG filter'lar bir page'in, bir iframe içine gömülü cross-origin içerik dahil, içeriğe pixel-işleme operasyonları uygulamasına izin verir. Leakage-free kalmak için browser'lar yıllarca filter timing'i content-independent yaptı (ör. CVE-2017-5407'in arkasındaki subnormal-float yavaşlamasını kaldırarak).
Pixel Thief bu düzeltmelerin yetersiz olduğunu gösterir çünkü daha derin bir
invariant ihlal edilir: wall-clock time sabit olsa bile, filter'ın memory
access pattern'i hâlâ data-bağımlıdır. feComponentTransfer filter'ı,
erişilen adresleri dönüştürülen pixel değerine bağlı olan table/array lookup'lar
yapar. Bu erişimler CPU cache'inde, eş-konumlu (co-resident) web-tabanlı bir
attacker'ın gözlemleyebileceği bir ayak izi bırakır.
Geçilen sınır same-origin policy'dir: bir cross-origin iframe üzerine bir filter render ederek ve filter rutininin memory erişimlerini izlemek için bir cache side channel (ör. browser içinde bir eviction/Prime+Probe tarzı veya cache-template primitive'i) kullanarak, attacker okumasına izin verilmeyen içeriğin tek tek pixel renklerini recover eder — ve bunu ekran frame'i başına birden çok bit ile yapar.
Walkthrough¶
USENIX Security 2024 paper'ından kavramsal yeniden üretim (O'Connell, Aben Sour, Magen, Genkin, Oren, Shacham, Yarom).
-
Victim'i cross-origin göm. Hedef içeriği (bir cross-origin page, ya da history sniffing için visited-link stillemesi) attacker page'indeki bir iframe'e yükle.
-
Data-bağımlı bir filter uygula. SVG filter'ları öyle istifle ki bir hedef pixel'in rengi, memory access address'i pixel değerine bağlı olan bir
feComponentTransferlookup'ını sürsün.
-
Bir cache side channel ile casusluk yap. Tüm render'ı timing yerine, attacker, bir frame sırasında filter rutininin hangi memory line'larına dokunduğunu tespit eden bir JavaScript cache side channel çalıştırır, kaba wall-clock farklarına dayanmadan pixel değerinin bit'lerini recover eder.
-
Yeniden inşa et. Gömülü page'den metin veya görüntüleri yeniden kurmak, ya da history sniffing için visited-link render'ını test etmek üzere pixel'ler/ frame'ler boyunca tekrarla. Cache channel refresh başına birden çok bit verir, toplamda ~267 bit/sn — önceki wall-clock SVG saldırılarından ve ekran refresh hızının kendisinden daha hızlı.
Warning
Yalnızca kavramsal. Tam filter zinciri, cache primitive'i ve bit-recovery pipeline'ı atlanmıştır; yetkili araştırma için paper'a bakın.
Detection¶
- Page-içerik sezgileri: cross-origin iframe'lere SVG filter (özellikle
feComponentTransfer) uygulayan ve bunu JS'te yüksek çözünürlüklü cache-timing döngüleriyle birleştiren page'ler şüphelidir. Browser/extension politikası bu kombinasyonu işaretleyebilir. - Davranışsal telemetri: güvenilmeyen page'lerde sürekli frame-başına timing/
ölçüm döngüleri,
SharedArrayBuffer-tabanlı timer'lar veya eviction-set hammering. - Renderer enstrümantasyonu: filtrelenmiş bir cross-origin subtree'nin frame ritminde anormal tekrarlı yeniden render edilmesi.
- website-fingerprinting tespitiyle örtüşür — yüksek çözünürlüklü timer'lar kuran ve cache state'i prob'layan JS'e dikkat et.
Mitigation¶
- Browser yamaları: Firefox ve Chrome bilgilendirildi; vendor düzeltmeleri filter render yolunu sertleştirir ki memory-access pattern'leri pixel-bağımlı olmasın (constant-access-pattern / data-oblivious filtering).
- Cross-origin filtreleme'yi kısıtla: cross-origin içeriğe uygulanan SVG filter'larını yasakla veya sandbox'la; bu SOP-ihlali sınıfı için yapısal düzeltmedir.
- Timer/cache-channel çözünürlüğünü düşür: JS timer'larını kabalaştır,
SharedArrayBuffer/yüksek çözünürlüklü timer'ları cross-origin isolation arkasına al ve jitter ekle — cache açığa çıkarma tarafını köreltir. - Özellikle history sniffing için: visited ve unvisited link'ler arasındaki gözlemlenebilir stilleme farklarını sınırla.