Charles Fol objevil ve standardní knihovně GNU C (glibc) chybu starou 24 let. Problém se konkrétně nachází ve funkci iconv()
v knihovně GNU C verze 2.39 a starší. Při převodu řetězců na znakovou sadu ISO-2022-CN-EXT může přetéct výstupní vyrovnávací paměť až o čtyři bajty, což může vést k pádu aplikace nebo k přepsání sousední proměnné.
Jde o klasické přetečení bufferu, které je ale jen zřídka zneužitelné, protože vyžaduje těžko splnitelné předběžné podmínky. Ukázalo se však, že v kombinaci s PHP umožňuje napadení aplikace a kompromitaci serveru. Chyba zatím není opravena ve všech distribucích, Debian postupně vydává opravené balíčky a Ubuntu už opravené balíky uvolnilo.
Vývojáři Rocky Linuxu zveřejnili způsob, jak problém vyřešit na zranitelném systému. Je potřeba vypnout ohroženou znakovou sadu. Nejprve můžete ověřit, zda je váš systém zranitelný:
$ iconv -l | grep -E 'CN-?EXT' ISO-2022-CN-EXT// ISO2022CNEXT//
Pokud výpis vypadá takto, je váš systém zranitelný. Pak je potřeba editovat soubor /usr/lib64/gconv/gconv-modules.d/gconv-modules-extra.conf
a v něm od řádky 1254 zakomentovat následující řádky:
alias ISO2022CNEXT// ISO-2022-CN-EXT// module ISO-2022-CN-EXT// INTERNAL ISO-2022-CN-EXT 1 module INTERNAL ISO-2022-CN-EXT// ISO-2022-CN-EXT 1
V Debianu se soubor nachází na cestě /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.d/gconv-modules-extra.conf
, v Ubuntu pak na /usr/lib/x86_64-linux-gnu/gconv/gconv-modules
.
Poté jako root spusťte příkaz iconvconfig
pro přegenerování keše. Druhou variantou je vyprázdnění obsahu souboru /usr/lib64/gconv/gconv-modules.cache
. Poté by výše uvedený test neměl mít na výstupu žádný obsah, což značí vypnutí problémové znakové sady a zabezpečení systému proti zneužití chyby.