To je trochu, jakobys každému druhému programovacímu jazyku vyčítal, že má funkci na čtení souborů, pokud ji v něm napsaná aplikace použije na útočníkem dodanou cestu k souboru.
Tady logovací funkce umožňuje interpolovat logované řetězce, no. Velký rozdíl je, že tady nebylo úmyslné nebo zřejmé, že jde šikovným výrazem jaksi oklikou i načíst vlastní kód, ale není to důvod prstíčkem ukazovat na Javu.
Prstíčkem na Javu ukazovat nebudeme, ale prostá interpolace to taky není. Tady nejde o expanzi nějaké jednoduché proměnné.
Nechat dělat logovací nástroj by default JNDI na základě tainted řetězce je, velmi, velmi nešťasné. Hlavně takovou vlastnost asi normální člověk vůbec nepředpokládá a nehledá jak to proaktivně vypnout.
tak nějak vedlejší efekt, logovací třída má pár funkcí ze šablonovacího jazyka, je tedy možné doplnit proměnné, některé proměnné je dokonce možné získat i z databáze jako ldap, no a ldap umožňuje vrátit odpověď, která donutí klienta načíst vzdálený kód.
Java za to nemůže. I MS se svým C/C++/C# má svoje mouchy, např. celý Printer Spooler service je jedno velké RCE, před pár lety jsme řešili CVE-2019-1040, tam myslím je použit stejný mechanismus u ldapu, jen to je ještě v kombinaci s ntlm.
Celé technologie kolem Html, javascriptu a webu jsou postavené na stejném principu, kdy uživatelský kód spouští běžně RCE, jen se tomu říká jinak, XSS. Obranné technologie jako CSP by se mi strašně moc líbily i na linuxu, dneska je extrémně technicky obtížné omezit aplikaci jen na některé komunikace, běžný FW to řeší pro celý systém.
Tohle není chyba autorů toho kódu, ale spíše všech, který ten kód používali.
Prijde mi, ze cokoliv, co neni nativni binarka, prakticky vypina NX bit, protoze dokaze bud spustit interpretaci zdrojaku (skritovaci jazyky), nebo v pripade JIT se tento vystup strojoveho kodu musi objevit mimo NX (neni to staticka/konstatni sekce sveho spustitelneho souboru).
V tomto by meli mit navrch ty MS sluzby ale, to je prece C/C++ a kod objevijsi v datech/na stacku, by nemel byt spustitelny.