it-swarm-eu.dev

Využívá nebo jiná bezpečnostní rizika s nahráváním SVG?

Mám web, na kterém mohou lidé nahrávat grafiku, můžete na to myslet jako na hostitele obrázků nebo na fórum pro obrázky.

Nyní dovoluji upload rastrové grafiky do určité velikosti, ale zatím žádná vektorová grafika. Chtěl bych také povolit nahrávání SVG, ale kolem mé hlavy krouží dvě záležitosti:

  1. Mohl by být konstruován SVG tak, aby při čtení meta dat server nereagoval. a mohl by být použit jako útok DoS na serveru?
  2. Je možné sestavit SVG tak, že při vykreslování SVG na klientovi klient přestane reagovat a potenciálně způsobí selhání prohlížeče všech uživatelů na mém webu?

Bylo by také dobré generovat malý (200x200px) PNG pro miniaturu, nebo je lepší manipulovat se SVG samotným s faktorem zoomu nebo tak něco?

V případě, že je možné využít SVG, jak se proti nim mohu chránit?

27
polemon

Mohl by být konstruován SVG tak, aby při čtení meta dat server nereagoval. a mohl by být použit jako útok DoS na serveru?

Co myslíš tím metadaty? Pokud jste po šířce a výšce, museli byste alespoň částečně analyzovat soubory SVG, abyste je dostali; neexistuje zkratka pro čtení několika bytů z hlavičky, jako je tomu u mnoha formátů bitmap. To přináší obvyklá rizika analýzy XML, jako například:

  • útoky na začlenění externí entity/DTD proti vzdáleným souborům, citlivým prostředkům místní sítě, citlivým souborům místního počítače a souborům zařízení
  • vnořené expanzní bomby entit
  • patologicky vnořené struktury značek by mohly zasáhnout limity zdrojů rekurze

jako standardní opatření byste zakázali veškeré zpracování DTD, XInclude, XSL, XSI a rozlišení entit.

Je možné sestavit SVG tak, že při vykreslování SVG na klientovi klient přestane reagovat a potenciálně způsobí selhání prohlížeče všech uživatelů na mém webu?

Možná, ale je to tak možné, že by se to mohlo stát s bitmapovým formátem. Podívejte se například na poškozené chyby souboru PNG, které jsou zpět.

Soubory SVG se více zajímají o to, že mohou obsahovat JavaScript, který bude fungovat v kontextu zabezpečení hostitelského webu, takže se musíte starat o skriptování napříč stránkami.

Ve skutečnosti jsou na to všechny typy nahraných souborů zranitelné, i když ne tak přímým a snadno použitelným způsobem. V některých případech je prohlížeč (zejména IE) bude čichat, a pokud uvidí věci, které vypadají jako tagy, mohou je potenciálně znovu interpretovat jako HTML, včetně JavaScriptu. Existují také některé vedlejší problémy s zpracováním nahraných souborů jako Java applety a soubory zásad Flash).

Standardním zmírněním všech těchto problémů je obsluha nedůvěryhodných zdrojů, ať už bitmapy, SVG nebo čehokoli jiného, ​​z jiné domény na váš hlavní web: doména, která neobsahuje žádné citlivé informace o relacích (cookie/auth) a žádnou schopnost skriptovat do domény vašeho hlavního webu.

Bylo by také dobré generovat malý (200x200px) PNG pro miniaturu, nebo je lepší manipulovat se SVG samotným s faktorem zoomu nebo tak něco?

To by byl pěkný dotek, ale museli byste přetáhnout některé závislosti, aby se vykreslili na bitmapu, například Batik, pokud používáte Javu. Přirozeně zavedení nové komplexní knihovny zvyšuje povrch útoku; může být dobrý nápad spustit miniaturu jako samostatnou úlohu démona s nízkou prioritou účtu s nízkou prioritou.

19
bobince

Jakákoli akce, kterou vaše webová aplikace provádí, je potenciálně nebezpečná. Nahrávání souborů je jednou z nejnebezpečnějších funkcí, protože může vést ke vzdálenému spuštění kódu.

Problém s nahráním jakéhokoli souboru na server je, že to ve skutečnosti nemusí být požadovaný soubor. Nevím, jakou platformu nebo metodiku používáte, ale mnohokrát jsem zmást systémy pro nahrávání souborů, abych nahrál soubor .php nebo .asp a spustil jej. Nezní to, jako byste vykreslovali SVG na straně serveru (což by bylo stejně divné), takže nezpracované XML v SVG na vašem serveru opravdu nezáleží.

Pokud jde o # 2, ano běžné chyby v poškození paměti svg jsou běžné a jsem si jist, že jich existuje více. Ale opět to bude platit pro téměř každý soubor, který nahrajete. Obrázky SVG jsou o něco novější a většinu zranitelností v obrázcích SVG najdete v roce 2011.

Maskování SVG se používá k zakrytí prvků iframe při útoku clickjacking . Ale nemyslím si, že tento útočný vektor se vztahuje na váš systém svg upload.

10
rook