Nette security bug CVE-2020-15227
21. října 2020V 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 od autora Nette frameworku: Objevena první zranitelnost v Nette, aktualizujte! 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 zná 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 určitě chtít 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.lock
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 -A1Pokud používáte Nette ve verzi 3 mátenainstalovanou verzi minimálně v3.0.6, tak jste v bezpečí.
Kontrola logů
Unixové programy logují co se děje. Stejně tak
linuxový 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
.
spusťte následující příkaz a získáte z logu záznamy, které zkoušely jestli je daná web aplikace je zranitelná:
grep -r callback /var/log/apache2
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 tak 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 neobsahuje.
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,popenA 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 - protokol HTTP/HTTPS nebo spíš rovnou 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ů. A to i weby, které používají jiné programovací jazyky nebo jiné PHP frameworky, včetně těch kde byla aplikovaná oprava. 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
Jak zrychlit web
Rector: upgrade PHP aplikace
Programovací jazyk Go
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.
+