Na konferenci 39C3 (Chaos Communication Congress) v Německu byly zveřejněny podrobnosti o 12 dříve neznámých a neopravených (zero-day) zranitelnostech v sadě nástrojů GnuPG (GNU Privacy Guard), která poskytuje nástroje kompatibilní s OpenPGP a S/MIME pro šifrování dat, digitální podpisy, správu klíčů a přístup k úložištím veřejných klíčů. Nejnebezpečnější zranitelnosti umožňují obejít ověřování digitálního podpisu a dosáhnout spuštění kódu při zpracování šifrovaných dat v reprezentaci ASCII (ASCII Armor). Slibuje se, že funkční prototypy a záplaty exploitů budou zveřejněny později. Identifikátory CVE zatím nebyly přiřazeny.
Zranitelnosti jsou způsobeny chybami v kódu pro zpracování dat a parsování formátu a nesouvisejí s nedostatky v kryptografických algoritmech. Například chyba parseru vede k selhání při určování skutečně podepsaných dat a vytváří podmínky, za kterých se ověřovaná data nemusí shodovat s podepsanými daty, což útočníkovi umožňuje nahradit prostý text bez přístupu k soukromému klíči.
Zjištěné problémy:
- Chyba v analyzátoru šifrovaných dat distribuovaných ve formátu ASCII-Armor (textové soubory s blokem „BEGIN/END PGP ARMORED FILE“) způsobuje zápis do paměti mimo hranice vyrovnávací paměti. Tento problém může vést ke spuštění kódu při zpracování speciálně vytvořených dat v gpg. Zranitelnost se projevuje ve funkci armor_filter() a je způsobena dvojitým zvýšením hodnoty čítače „n“ ve smyčce „for“. Navzdory zadání hodnoty „n++“ v samotné smyčce se hodnota čítače zvyšuje i v těle smyčky při zápisu dat do vyrovnávací paměti „buf[n++]“. V důsledku toho se zapíše jeden bajt navíc za hranice vyrovnávací paměti a proměnná „ret_len“ se nastaví na hodnotu větší než její skutečná velikost.
- Možnost vytvořit nebo přepsat libovolný soubor v rámci aktuálních přístupových práv v důsledku nesprávného zpracování pole „název souboru“ v datovém paketu. Tuto zranitelnost lze zneužít ke spuštění kódu v systému, když příjemce provede příkazy „gpg --decrypt poc.enc“ a „gpg poc.enc“ pro zobrazení souboru poc.enc odeslaného útočníkem. Spuštění kódu lze dosáhnout například vytvořením souborů ~/.bash_completion nebo ~/.ssh/authorized_keys.
- Možnost nahradit prostý text zobrazený uživateli při zadání volby „--decrypt“ a ověření pomocí samostatně dodaných digitálních podpisů (oddělený podpis, vytvořený volbou „--detach-sig“ a dodaný v samostatném souboru .sig). Podstata problému spočívá v tom, že při odděleném odesílání zprávy a souboru .sig může útočník ovládající mezilehlý provoz (MITM) provést změny v souboru .sig, po kterých ověření zůstane úspěšné, ale při prohlížení zprávy ze souboru .sig pomocí volby „--decrypt“ se zobrazí jiný obsah. echo Plaintext > plaintext gpg --detach-sig plaintext # útočníkova modifikace plaintext.sig s přidáním dalšího textu gpg --verify plaintext.sig plaintext # ověřeno gpg --decrypt plaintext.sig # ověřeno, ale zobrazuje se jiný text
- Možnost přidat libovolná data k podepsané zprávě a zároveň zachovat úspěšné ověření podpisu. Problém nastává kvůli zkrácení dat na hranici 20 000 znaků při výpočtu hash.
- Nesprávné ověření ověřených šifrovacích kódů (MDC - Modification Detection Codes), které umožňuje manipulaci se šifrovanými pakety tak, že po dešifrování bude přijatý obsah zpracován jako jiný typ paketu (například vnímán jako veřejný klíč určený k publikaci).
- Možnost vkládat další data do podpisů v cleartextu vytvořených pomocí příznaku „--not-dash-escaped“ nebo převedených ze samostatně vložených podpisů (oddělené podpisy). Tuto zranitelnost lze zneužít k uvedení uživatele v omyl ohledně skutečně podepsaných dat. Uživatel si například může stáhnout platný ověřovací klíč digitálního podpisu z důvěryhodného zdroje, ale útočník by mohl během útoku typu „man-in-the-middle“ (MITM) nahradit ISO obraz stažený uživatelem a přidat k podpisu další hash, takže ověření nahrazeného obrazu bude úspěšné, pokud systém má správný ověřovací klíč.
- Nahrazení dalších dat do ASCII reprezentace podpisu CS (Cleartext Signature) vložením znaku s nulovým kódem. Tato zranitelnost například umožňuje vložení libovolného textu do hlavičky Hash.
- Nesprávná interpretace formátu OpenPGP umožňuje zpracování zprávy „One-Pass Signed Message“ s kódováním ASCII jako zprávy s „cleartextovým podpisem“ se specifickou úpravou záhlaví. Tato zranitelnost umožňuje nahrazení původních podepsaných dat škodlivým obsahem a zároveň zachování zdání úspěšného ověření.
- Absence jasného oddělení výstupních informací o úspěšnosti ověření digitálního podpisu od obsahu zprávy, což umožňuje vytváření falešných nepodepsaných zpráv, které se při spuštění příkazu „gpg --decrypt“ jeví jako autentické.
- Možnost vytvářet zprávy OpenPGP, které budou v gpg zpracovávány odlišně než v jiných implementacích OpenPGP. Tento problém je způsoben způsobem, jakým OpenPGP zpracovává velmi dlouhé řetězce v ASCII reprezentaci dat OpenPGP.
- Vytvoření podmínek během procesu ověřování digitálního podpisu pro vrácení algoritmu ověřování hash zpět na nezabezpečený SHA1.
- Možnost nahradit sekundární klíče (podklíče) bez autorizace pomocí soukromé komponenty hlavního klíče. Útok se provádí přidáním falešného úložiště klíčů pomocí volby „--keyring“.
V nástroji minisign, zjednodušeném nástroji pro vytváření a ověřování digitálních podpisů, byly identifikovány dvě další zranitelnosti. Obě zranitelnosti (1, 2) umožňují použití escape sekvencí terminálu („\e[1E“) nebo speciálních znaků („\r“) v poli komentáře k úpravě výstupu programu, například k nahrazení informací o výsledku ověření.
Zdroj: opennet.ru
