Omlouvám se, ale může mi někdo, jako laikovi, vysvětlit, jak funguje ten útok přes EXIF hlavičky? Z tohoto článku mi to není vůbec jasné, tak jsem se podíval na odkazovaný zdroj [1], který mi taktéž nijak nepomohl a z jeho odkazů mi přišlo, že asi nejbližší původnímu zdroji je stránka [2]. Ta ovšem popisuje, jak se k přiloženému nežádoucímu kódu dostat, ale ne, jak se může stát, že bude spuštěn.
Tento článek (myšleno na rootu) i jeho zdroj [1] ve mně vyvolávají dojem (a omlouvám se, pokud jsem to pochopil špatně), že problémem je, že i když mám plně aktualizovaný web, jen samotným nahráním škodlivého obrázku dojde k napadení a to tak, že při použití PHP funkce pro čtení exif dat se onen kód spustí. Pokud to tak skutečně je, pak je problémem IMHO bug v PHP, jenže jednak to už nikde zmíněné není a především, stránka [2] vyloženě demonstruje, jak se pomocí oné funkce ke skrytému kódu dostat, ale ta funkce vrátila „obyčejný“ string, který nebyl spuštěn - to by musel být např. prohnán funkcí eval, což je IMHO už blbost člověka, který by něco takového udělal (a zranitelnost jeho konkrétní aplikace).
Odkazy:
1. https://threatpost.com/rare-steganography-hack-can-compromise-fully-patched-websites/146701/
2. https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/hiding-php-code-in-image-files-revisited/
PHP nema bugy, ale features. Utok funguje tak, jak byl popsan pred mnoha lety: https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/hiding-webshell-backdoor-code-in-image-files/
Ted k tomu scriptkiddies pouze pridali dalsi stage. Princip je porad stejny - nekam nemuzete neco dostat (typicky sdileny web service), ale maji tam whitelisting neceho (treba obrazku), tak problematickou vec schovate (via steganografii) prozenete ji whitelistovanym kanalem, a pak si ji vyzvednete a pouzijete. Neni to zadny silver bullet, treba na Ministerstvo zahranici CR by to tak snadno nefungovalo, tam byste musel vyuzit jiny trik.
Jo ták, takže problém je v tom, že jsem to trochu špatně pochopil - ta zranitelnost není o tom, že nahráním obrázku rovnou něco spustím, ale jen o tom, že na server dostanu nějaký nežádoucí kód, který ale ještě musím spustit nějakým jiným kanálem. (Nebo, jak je popsáno ve vašem odkazu, to někdo prožene funkcí „preg_replace“, která umožňuje spustit eval.) Děkuji za vysvětlení.
Děkuji za vysvětlení, než jsem četl komentáře, říkal jsem si že jediná možnost jak spustit uživatelem nahraný kód je použít nad ním eval. V článku ani linku to nebylo uvedeno. Dle vašeho linku vidím, že tam je skutečně eval, byť schovaný v preg_replace a jeho argument je schovaný v EXIF hlavičce.
No už jsem 15 let v PHP nic nepsal, ale vím že občas tam zakazují kde co, protože je to security issue, takže bych očekával zakázaný i ten eval.