CVE-2020–15227: Chyba potenciálně umožňující vzdálené spuštění kódu

před 4 lety od David Grudl  

Vůbec poprvé za 13letou historii Nette v něm byla objevena bezpečnostní chyba. Našel ji vývojář z malebného Taiwanu. Jde o chybu závažnou, která může za určitých okolností vést k vzdálenému vykonání kódu.

Chyba dovoluje útočníkovi za určitých okolností na některých webech pomocí speciálně sestaveného URL vykonat PHP kód. Bližší popis mechanismu útoku nebudeme zveřejňovat.

K dispozici je oprava pro úplně všechny postižené verze Nette, tj. počínaje verzí 2.0. Ta už sice není přes 6 let udržovaná, ale Nette si na bezpečnosti velmi zakládá a proto vyšly i opravy nepodporovaných verzí.

Aktualizujte prosím co nejdříve na nejnovější setinkové verze:

  • nette/application 3.0.6 (případně 3.0.2.1, 3.1.0-RC2 nebo dev)
  • nette/application 2.4.16
  • nette/application 2.3.14
  • nette/application 2.2.10
  • nette/nette 2.1.13
  • nette/nette 2.0.19

Chtěli bychom poděkovat Cyku Hong z DEVCORE, který zranitelnost objevil a nahlásil.

O chybě byli neprodleně informování všichni partneři Nette e-mailem, aby měli dostatečný čas záplatovat weby dříve, než vyjde informace veřejně.

Aktualizace pomocí Composeru

Obvykle stačí v projektu zavolat composer update a stáhnou se aktuální verze všech balíčků. Pro aktualizaci jen konkrétního balíčku použijte např. composer update nette/application.

Jakou máte nainstalovanou verzi jednotlivých balíčků zjistíte příkazem composer show.

Pozor, Composer je potřeba spustit se stejnou verzí PHP, jako je na hostingu, nebo doplnit verzi do composer.json, viz dokumentace.

Aktualizace stažením balíčku

Pokud místo Composeru používáte distribuční balíčky, můžete si je stáhnout z archivu.

Nejrychlejší oprava

Michal Špaček připravil Linuxový skript (+ obdoba v PHP), který automaticky aplikuje patch přímo do zdrojových kódů Nette na disku. Hodí se v případě, že udržujete velké množství projektů, které nemáte prostor korektně aktualizovat pomocí Composeru.

Komentáře

  1. https://files.nette.org/…k-2.1.13.zip → obsahuje verzi 2.1.12
    viz. např. záhlaví v minifikované verzi → Nette Framework (version 2.1.12 released on 2015–12–03

    či v loader.php → Nette Framework (version 2.1.12 released on 2015–12–03

    či v class Framework → const NAME = ‚Nette Framework‘,
    VERSION = ‚2.1.12‘,
    VERSION_ID = 20112,
    REVISION = ‚released on 2015–12–03‘;

    Asi se vloudila chybička.

    Radek

    před 4 lety · replied [2] David Grudl
  2. #1 ras opraveno

    před 4 lety
  3. Asi je nějaká chybka i v označení verze/revize u 2.2 a 2.3:

    https://files.nette.org/…20201001.zip
    class Framework
    REVISION = ‚released on 2016–04–13‘

    https://files.nette.org/…e-2.2.14.zip
    class Framework
    VERSION = ‚2.2.13‘,
    VERSION_ID = 20213,
    REVISION = ‚released on 2016–04–13‘;

    před 4 lety · replied [4] David Grudl
  4. #3 lukas.haj tam už se po rozdělení Nette na jednotlivé composerové balíčky přestalo verzovat

    před 4 lety
  5. Narazil jsem na to, že meta balíček pro nette 2.3 nebyl aktualizován, byť ho některé projekty ještě používají, pro ně tedy buď rozpad na balíčky a nebo explicitní 2.3.14 as 2.3.11, kterou 2.3.9 i 2.3.10 explicitně vyžadují.

    před 4 lety · replied [6] David Grudl
  6. #5 repli2dev V tom jsem se úplně ztratil.

    Metabalíček nette/nette 2.3.10 má otevřenou závislost na nette/application, takže composer update by měl nainstalovat nejnovější verzi.

    před 4 lety
  7. #6 ano, na GitHubu jsem taky koukal, že je ta závislost otevřená, přesto jsem narazil na projekt, ve kterém to via composer upgrade nette/application nešlo aktualizovat a když jsem zkoušel vyžádat přímo tu verzi, tak mi řekl, že je konfliktní s tím co vyžaduje nette/nette, pro které jsem v composer.lock dohledal „nette/application“: „2.3.11“…

    před 4 lety
  8. Da se prosim nekde stahnout verze nette 2.0.19 jako ZIP? V gitu to nemuzu najit. DIky

    před 4 lety · replied [9] tom
  9. před 4 lety
  10. Myslel jsem, že composer require nette/nette:dev-master mi už nainstaluje opravenou verzi nette/application, ale zjistil jsem, že je nutné potom ještě explicitně uvést composer require nette/application:3.1-dev nebo 3.0.6 .

    před 4 lety
  11. Tupě se zeptám…
    tedy toto v sekci require:
    „nette/nette“: „~2.3.0“,

    změním na:
    „nette/application“: „2.3.14“,

    a spustím: „composer update nette/application“
    Mate ta změna jména balíčku.
    Díky moc!

    před 4 lety · replied [12] David Grudl
  12. Doplnil jsem do článku ještě stručný postup aktualizace.

    #11 Eve v sekci require nic potřeba měnit není, stačí jen composer update nette/application

    před 4 lety
  13. Davide, můžeš prosím vydat i opravený release verze 3.1-RC? Už to používám na produkci a nerad bych dělal downgrade.

    před 4 lety

Chcete-li odeslat komentář, přihlaste se