deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

librsvg ve NanoSVG'deki SVG parser hataları script temizlemenin tek başına yeterli olmadığını gösteriyor

librsvg ve NanoSVG'deki bellek güvenliği açıkları hiç JavaScript olmadan tetiklenebiliyor; bu da script temizlemenin tek başına güvenilir olmayan SVG yüklemelerini güvenli kılmadığının bir hatırlatması.

librsvg ve NanoSVG'deki SVG parser hataları script temizlemenin tek başına yeterli olmadığını gösteriyor

Yakın zamanda yayınlanan bir dev.to yazısı, SVG yüklemesi kabul eden herkese önemli bir uyarıda bulunuyor: bir dosyadan script'leri ve event handler'ları temizlemek yalnızca risk kategorilerinden birini ele alıyor ve ikincisine — dosyayı ilk place'de işleyen ve render eden yazılıma — hiç dokunmuyor.

"Your SVG Has No Scripts. Is It Safe to Process?" başlıklı yazı, argümanını, ikisi de sömürülmek için JavaScript gerektirmeyen iki yakın güvenlik açığı raporuna dayandırıyor.

JavaScript gerektirmeyen hatalar

İlki, CVE-2026-96889 olarak takip edilen ve librsvg'yi etkileyen açık. dev.to yazısına göre hata, yinelenen entity bildirimleri içeren iç içe XML inclusion'lardan kaynaklanıyor; böyle bir dosya işlenirken kütüphane, parser'ın hâlâ kullandığı bir XML entity'sini serbest bırakabiliyor ve bu da bir use-after-free durumuna yol açıyor. 23 Eylül 2026 tarihli bir RustSec danışma belgesi, etkilenen iki sürüm dalı için librsvg 2.63.2 ve 2.62.4'te düzeltmelerin yapıldığını listeliyor.

İkincisi NanoSVG ile ilgili ve CVE-2026-88366 olarak kayıtlı. Yazıda, patolojik biçimde büyük arc yarıçapı değerlerinin bir ara hesaplamayı NaN — kayan noktalı "sayı değil" değeri — üretmeye nasıl itebileceği anlatılıyor. Bu değeri önce kontrol etmeden bir tam sayıya dönüştürmek tanımsız davranışa (undefined behavior) yol açıyor. Temelindeki hata raporu bir runtime sanitizer ile gösterildi ve CVE, pratik etkisini olası bir hizmet reddi (denial of service) olarak nitelendiriyor.

Yazarın dikkatle belirttiği gibi, bunlar belirli sürümlerdeki belirli implementasyonlardaki kusurlar; her SVG renderer'ının bozuk olduğunun kanıtı değil. Ancak birlikte ele alındıklarında, bir dosyayı script'ler için taramanın eksiksiz bir güvenlik testi olmadığını gösteriyorlar.

Tek yükleme, birçok parser

Yazıda taslak olarak çizilen tipik ikon hattı, bir dosyayı kullanıcı önizlemeyi görmeden önce birkaç bileşenden geçiriyor: bir XML parser'ı, bir sanitizer, bir optimizer ve küçük resimler üreten bir rasterizer. Bunların her biri, bir yabancının sağladığı girdiyi işliyor.

Bu sıralama önemli, çünkü zincirin ilerleyen aşamalarında uygulanan bir filtre, kötü niyetli baytları çoktan okumuş bir bileşeni — temizlemek için orijinal belgeyi ayrıştırmak zorunda olan sanitizer'ın kendisi dahil — geriye dönük olarak koruyamaz.

Dört savunma katmanı

Yazı, güvenilir olmayan SVG'lerle uğraşan ekipler için dört önlem sıralıyor.

Amaçlı bir şekilde sanitize edin. Uygulamanın gerçekten hangi elementlere, attribute'lara ve referanslara ihtiyacı olduğuna karar verin — statik bir ikon, etkileşimli bir belgeden çok daha küçük bir özellik seti gerektirir — ve açık bir politikaya sahip, bakımı yapılan bir sanitizer kullanın. Yine de, sanitize edilmiş çıktı, aşağı akıştaki parser'ların dosyayı güvenli işleyebileceğinin garantisi değildir.

Gerçek bağımlılıkları yamalayın. Dağıtılan yığındaki SVG'yi işleyen veya render eden her kütüphaneyi belirleyin; dönüştürücülerin ve görüntü işleme araçlarının içinde paketlenmiş olanlar dahil. Kendi kodunuzu güncellemek, bir küçük resim servisine gömülü eski bir kütüphane için hiçbir şey yapmaz.

İşi sınırlayın. Yükleme boyutu, render boyutları, yürütme süresi ve bellek üzerinde sınırlar dayatın. Küçük bir dosya işlenmesi mutlaka ucuz değildir; karmaşık geometri, dosya boyutunun ima ettiğinden çok daha fazla iş gerektirebilir. Sınırlar aşırı kaynak tüketimini içerir ama bellek güvenliği hatalarını onaramaz.

İşlemeyi izole edin. Dönüştürme ve önizleme üretimini, en düşük izinlerle, gereksiz ağ veya dosya sistemi erişimi olmayan kısıtlı worker'larda çalıştırın ve bir worker'ın başarısız olduğunda ana servisi de yanına sürüklememesi için uygulamayı bu şekilde tasarlayın. Bu korumalar, sanitize etme dahil, güvenilir olmayan girdiye dokunan ilk bileşenden itibaren uygulanmalıdır.

Neden önemli

SVG'nin "sadece bir resim" olarak ele alınması kolaydır ve birçok yükleme özelliği, güvenlik sınırları olarak tamamen script temizleyen sanitizer'lara yaslanır. Bu iki hata, o sınırın ardındaki parser'ların ve rasterizer'ların kendilerinin de saldırı yüzeyi olduğunu gösteriyor; ikon içe aktarıcıları, asset hatları ve önizleme servisleri için hizmet reddi ve bellek bozulması somut sonuçlar olarak öne çıkıyor. Yazının da ifade ettiği gibi, sorulması gereken soru script'lerin kaldırılıp kaldırılmadığı değil; bu dosyayı hangi bileşenlerin okuduğu ve bunlardan biri başarısız olduğunda ne olduğu.

  • #svg
  • #security
  • #vulnerabilities
  • #librsvg
  • #nanosvg
  • #memory-safety

İlgili yazılar