Byly objeveny chyby v Sandboxu v Latte

David Grudl
Nette Core | 8082
+
+3
-

Pokud používáte šablony z nedůvěryhodného zdroje v Sandboxu v Latte, aktualizujte na poslední verze 2.8.8, 2.9.6, 2.10.8, kde jsou opravené všechny objevené zranitelnosti.

Pokud sandbox a nedůvěryhodné šablony nepoužíváte, aktualizovat nemusíte.

Zranitelnosti objevili: 赵钰迪, JinYiTong

David Grudl
Nette Core | 8082
+
+10
-

Pro zajímavost šlo o následující chyby:

  • Pokud V PHP za názvem funkce napíšete kontrolní znak (např. "exec\x00()"), PHP 8 to nechápe jako volání funkce, ale jako nevalidní kód, takže ani sandbox v Latte jej neošetřuje. Bohužel PHP 7.x takový kód vykoná, takže Latte situaci nyní řeší tak, že zakazuje jakékoliv kontrolní znaky v šabloně. issue (credits: 赵钰迪, JinYiTong)
  • Druhý problém se týkal toho, že sandbox neošetřoval komplexní výrazy uvnitř řetězců. Tipuju, že málokdo ví, že v PHP znamenají zpětné uvozovky totéž co shell_exec(). Latte je proto nedovoluje používat, ani mimo sandbox. Co jsem ale netušil, že takto fungují i uvnitř stringu. Tohle "${`ls`}"; spustí ls. V sandboxu jsou proto komplexní výrazy v řetězcích zakázané. (credits: 赵钰迪)
  • Třetí problém se týkal zpracování komentářů, především toho, že Latte parser nepodporoval jednořádkové PHP komentáře //. Nepodporuje je stále, ale teď na to upozorní, aby nevznikl chybný výsledný kod. (credits: 赵钰迪)