Zespół badawczy Wiz wykrył niezabezpieczone domyślne ustawienia w usłudze Azure App Service, które ujawniają kod źródłowy aplikacji napisanych w PHP, Python, Ruby lub Node. Warunek jest taki, że aplikacje muszą być wdrożone przez „Local Git”. Luka została nazwana „NotLegit” i istnieje w Azure od września 2017 roku oraz prawdopodobnie została wiele razy wykorzystana w atakach.
Wiz zgłosił tę podatność do Microsoft 7 października 2021 r. i od tej pory Microsoft poczynił pewne kroki łagodzące. Małe grupy klientów nadal są potencjalnie narażone i powinny podjąć działania w celu ochrony swoich aplikacji. Opisano je w kilku alertach e-mail, które Microsoft wysłał w dniach 7-15 grudnia.
Przed wyjaśnieniem podatności zajmijmy się podstawowymi pojęciami.
Co to jest usługa Azure App Service?
Azure App Service (aka Azure Web Apps) to oparta na chmurze platforma do hostowania witryn i aplikacji internetowych. Usługa jest łatwa w obsłudze, a co za tym idzie bardzo popularna. Najpierw wybieramy obsługiwany język programowania i system operacyjny. Następnie wdrażamy kod źródłowy aplikacji lub artefakty na serwer zarządzany przez platformę Azure przy użyciu protokołu FTP, SSH lub pobierając kod źródłowy z usługi Git (takiej jak GitHub lub prywatne repozytoria Git). Po wdrożeniu aplikacja jest dostępna publicznie dla każdego w Internecie w domenie *.azurewebsites.net.
Co to jest „Local Git”?
Platforma Azure obsługuje wiele metod wdrażania kodu źródłowego i artefaktów w usłudze Azure App Service, z których jedna korzysta z lokalnej instancji Git. Za pomocą „Local Git” instalujemy lokalne repozytorium Git w kontenerze usługi Azure App Service, które umożliwia wypchnięcie kodu bezpośrednio na serwer.
Podatność „NotLegit”
W ramach najlepszych praktyk, gdy wdrażamy repozytoria git na serwerach internetowych, zawsze ważne jest, aby upewnić się, że folder .git również nie zostanie przesłany. Czemu? Ponieważ folder .git zawiera kod źródłowy, e-maile programistów i inne wrażliwe dane. Jednak w przypadku użycia metody wdrażania „Local Git” do implementacji w usłudze Azure App Service repozytorium git zostało utworzone w publicznie dostępnym katalogu (/home/site/wwwroot), do którego każdy może uzyskać dostęp. To znane już wcześniej dziwactwo Microsoftu. Aby chronić te pliki, Microsoft dodał plik „web.config” do folderu .git w katalogu publicznym, który ograniczył dostęp publiczny. Jednak tylko serwer webowy IIS firmy Microsoft obsługuje pliki „web.config”, więc jeśli używamy C# lub ASP.NET, aplikacja jest wdrażana z usługami IIS i „papierowa” łatka Microsoftu działa.
Ale co się dzieje, gdy ktoś użyje PHP, Ruby, Python lub Node w swojej aplikacji? Te języki programowania są wdrażane z różnymi serwerami internetowymi (Apache, Nginx, Flask itp.), które nie obsługują plików „web.config”, pozostawiając aplikacje podatną. W zasadzie wszystko, co musi zrobić tutaj złośliwy aktor, to pobrać katalog „/.git” z docelowej aplikacji i pobrać jej kod źródłowy. Ciężko to więc nazwać podatnością. Bardziej błędem w konfiguracji dostępów.
Ciekawostka: plik web.config Microsoftu zawierał literówkę (tag konfiguracyjny nie został poprawnie zamknięty), przez co plik nie mógł zostać przeanalizowany przez IIS. Na szczęście błąd zgłoszony przez literówkę zablokował dostęp do całego katalogu… Można więc powiedzieć, że „web.config” mimo wszystko spełnił swoją rolę na serwerów IIS 🙂
Później Microsoft odkrył, że użytkownicy, którzy korzystali z innych narzędzi do wdrażania usługi Git, mogą być również narażeni. Jeśli plik został utworzony lub zmodyfikowany w kontenerze usługi Azure App Service (przy użyciu protokołu FTP, Web Deploy lub SSH) przed wdrożeniem usługi Git, usługa wejdzie w stan „inplace deployment”. Ten stan wymusza inicjowanie przyszłego wdrażania usługi Git w publicznie dostępnym katalogu.
Kto powinien się przejmować?
Podatne są wszystkie aplikacje PHP, Node, Ruby i Python, które zostały wdrożone przy użyciu „Local Git” w czystej aplikacji domyślnej w usłudze Azure App Service od września 2017 r.
Również podatne są wszystkie aplikacje PHP, Node, Ruby i Python, które zostały wdrożone w Azure App Service od września 2017 r. przy użyciu dowolnego źródła Git, po utworzeniu lub zmodyfikowaniu pliku w kontenerze aplikacji.
Jedynymi aplikacjami, na które ta luka w zabezpieczeniach nie wpłynęła, są aplikacje oparte na usługach IIS.
Podsumowanie
Po ujawnieniu luki NotLegit, Microsoft zrozumiał wagę problemu i podjął wszelkie niezbędne kroki w celu zbadania go i złagodzenia. MSRC i zespół usługi Azure App Service przeprowadzili dogłębne dochodzenie i znaleźli przyczynę problemu, zastosowali poprawkę, która obejmuje najbardziej dotkniętych klientów oraz przesłali powiadomienia pocztą e-mail, aby ostrzec wszystkich klientów, którzy nadal są narażeni i oczekują na działanie od strony użytkownika.
Microsoft przyznał również odkrywcom luki nagrodę w wysokości 7500 USD, które jak twierdzą planują przekazać na cele charytatywne.