Nette security bug CVE-2020-15227

21. října 2020

Lang: cs en de es

V oblíbeném PHP frameworku Nette, který je určen pro webové aplikace, byl objeven bezpečnostní bug. Jak zabezpečit aplikaci nebo server? V tomto článku se dočtete jaké jsou různé možnosti nápravy nebo dodatečného zabezpečení serveru.

Oficiální vyjádření objevené bezpečnostní chybě se dočtete v článku Objevena první zranitelnost v Nette, aktualizujte! od autora Nette frameworku. Nejlepší řešení a zároveň, které jde udělat i velice jednoduše, je aktualizovat verzi nette frameworku a bezpečnostní problém zmizí. Změna s kterou přichází aktualizace nemá vliv na funkčnost, takže to je opravdu jednoduchý a bezpečný úkon.

Nebezpečí

V čem je tato bezpečnostní díra nebezpečná? Ten kdo zna HTML, JavaSript a nebo umí skriptovat v BASH, může provést XSS injection nebo rovnou přečíst zdrojové soubory včetně konfigurace a přístupu do databáze a tedy stáhnout veškerá data.

Kontrola verze Nette

Pokud provozujete víc aplikací budete chtít asi i hromadně zkontrolovat, že máte nainstalovanou verzi Nette, která obsahuje opravu. Chyba je v balíčku, který se jmenuje nette/application. Seznam aktuálně instalovaných balíčků včetně informací o verzi je v souboru composer.loc Můžete tedy následujícím příkazem získat výpis verzí všech instalovaných balíčků nette/application:

    grep -r '"name": "nette/application"' */composer.lock -A1
Pokud používáte Nette ve verzi 3 měli by jste mít nainstalovanou verzi v3.0.6

Kontrola logů

Unixové programy logují co se děje. Stejně tak web sever. Logy jsou umísteny v adresáři /var/log/apache2 pokud používate web server Apache v debian-like distribucích, v adresáři /var/log/httpd v RPM base distribucích. POkud používate web server Nginx, tak logy jsou v adresáři v adresáři /var/log/nginx.

následujícím příkazem:

    grep -r callback /var/log/apache2
tedy získáte z logu záznamy, které zkoušely jestli je daná web aplikace zranitelná.

Co jsem viděl logy, tak roboti zkouší různé weby, přitom můžou dle HTTP odpovědi odhadnout, jestli webová aplikace používá Nette framework.

Fix bugu

Pokud nepoužíváte composer pro aktualizaci balíčků ani nechce stahovat archív s Nette, jsou i jiné možnosti jak bug opravit.

Composer

Pokud používáte composer, což by jste měli! Aktualizaci knihoven provedete příkazem:

    composer update

Skript na fix bugu

Můžete použí skript, který používá unixové utility na opravu zdrojáků bash skript pro opravu Nette. Nebo PHP skript, který také opraví Nette. Proces opravy tam může být mnohem rychlejší. Ale dejte si pozor, aby jste pak při nějaké změně nezprovoznili zase původní verzi knihovny, která opravu neopravuje.

Zakázání URL

Pro provedení útoku je potřeba zadat specifickou URL. Web server Apache i Nginx umožňuje aplikovat na URL pravidla. Je tedy možnost na danou specifickou URL vytvořit pravidlo, které URL rovnou na úrovni web-serveru zablokuje.

Zvýšení zabezpečení

Zvýšit bezpečnost se dá i obecně snížením povolených funkcí na webserveru. Můžete upravit konfiguraci PHP, která je v souboru php.ini. Stačí přidat následující řádek:

    disable_functions=exec,passthru,shell_exec,system,proc_open,popen
A minimálně některé typy útoků omezíte. Ale zároveň to může omezit některé aplikace, které je potřebují používat.

Fun

Například web hosting wedos blokuje dynamicky na určitou domu kompletně webový provoz HTTP/HTTPS prostě asi porty 80 a 443, a tím odřízne návštěvníka od všech webů, které hostuje, a tedy i jiných zákazníků, přestože třeba mají web na jiné technologii nebo opravený. Zároveň odříznou přístup i na svůj hlavní firemní web. A protože to nejspíš blokují podle IP, tak znepřístupní weby u nich pro všechny lidi co jsou NAT-ování za stejnou IP.

Novinky

Nové informace ohledně cve-2020-15227 najdete na Nette fóru.

Články na podobné téma

Analýza zadání a nacenění vývoje softwarového projektu
Python program na ovládání Dockeru pomocí API
Jak použít aplikaci MailCatcher pro testování emailů
Návod: Python OpenAI API
Vytvoření WebSocket webové aplikace a nastavení proxy
Řízení projektů: Agilní vývoj softwaru
Jak provozovat staré PHP aplikace
Co by měl umět dobrý programátor
Programovací jazyk Rust
NodeJS: vývoj, konfigurace serveru
Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Připojení k Microsoft SQL Serveru z Linuxu
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
How to make wireless low power Arduino
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Roulette
Vývoj pro procesory ARM s Arduino IDE
Wireless low power Arduino
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Comparison IQRF vs Wireless Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+