Czy dowiązania symboliczne w szablonach stanowią problem bezpieczeństwa, a jeśli tak, to dlaczego?

35

Magento zaleca, aby nie używać szablonów za pośrednictwem dowiązań symbolicznych:

Advanced > Developer > Template Settings > Allow Symlinks

Ostrzeżenie! Włączenie tej funkcji nie jest zalecane w środowiskach produkcyjnych, ponieważ stanowi potencjalne zagrożenie bezpieczeństwa.

Do dziś nie widzę tutaj żadnych zagrożeń.

  • Jakie jest ryzyko?
Fabian Blechschmidt
źródło
8
Mogę sobie tylko wyobrazić, że stanowi to ryzyko dla współdzielonych hostów, których nie należy przede wszystkim wykorzystywać w eCommerce.
benmarks
3
@benmarks. Dlaczego nie podasz tego jako odpowiedzi?
Marius
2
Bardzo dobre pytanie @Fabi!
user487772,
3
Wiedziałem, że inni oferują bardziej kompletne odpowiedzi. Miałem PRAWO :-D
benmarks
3
@benmarks Witryna potrzebuje w jakikolwiek sposób wyższej odpowiedzi na liczbę pytań ;-)
user487772

Odpowiedzi:

40

Dowiązania symboliczne niekoniecznie są złe.

Po pierwsze: jeśli próbujesz otworzyć cel dowiązania symbolicznego, obowiązują uprawnienia do pliku docelowego. Jeśli nie możesz czytać / zapisywać / wykonywać celu dowiązania symbolicznego, nic się nie dzieje.

Ale: Możesz być w stanie uruchamiać pliki poza katalogiem głównym dokumentu (czasami tak naprawdę chcesz z nimi zrobić, prawda?). Problem może wystąpić, jeśli nie jesteś w środowisku suEXEC i masz hosta współdzielonego apachelub www-dataużytkownika, który jest odpowiedzialny za udostępnianie plików z różnych kont. Użytkownik systemu nie może uzyskiwać dostępu do plików innego klienta, ale apache/www-dataużytkownik będzie miał głównie prawa odczytu na wszystkich współużytkowanych kontach. Może to być scenariusz, w którym jeden użytkownik może uzyskać dostęp do plików innego użytkownika na współdzielonym hoście. Nie z własnym użytkownikiem, ale poprzez dostęp do pliku za pomocą przeglądarki z apache/www-dataużytkownikiem. Podsumowując: W tym scenariuszu będziesz mieć dostęp do plików innych użytkowników => źle.

Kolejną złą rzeczą jest to, że osoba atakująca może utworzyć dowiązania symboliczne, również do plików takich jak / etc / passwd, ..., pobrać te dane i przejść do tych informacji. Dotyczy to nie tylko dowiązania symbolicznego, ale także złej konfiguracji serwera (gdzie dostęp do tych plików jest ściśle ograniczony). Zatem niestosowanie dowiązań symbolicznych zapobiega niektórym możliwym atakom.

Nie chodzi tylko o to, że dowiązanie symboliczne stanowi zagrożenie bezpieczeństwa, ale o problem z konfiguracją serwera.

Anna Völkl
źródło
5
Świetne wyjaśnienie - to jest poprawna odpowiedź, w zasadzie „używaj na własne ryzyko”
philwinkle,
2
Prawdopodobnie warto wspomnieć (chociaż zawsze istnieje równowaga między błędami związanymi z bezpieczeństwem w środowisku „nienawiści do aktualizacji”) - Magento silnie zniechęcające dowiązania symboliczne związane były z exploitem, w którym pliki szablonów i układów poza app/designfolderem, w połączeniu z innymi drobnymi exploitami, może być użyty przez administratora do eskalacji uprawnień i innych exploitów na serwerze.
Alan Storm,
1
Na serwerze httpd Apache, jeśli chcesz obsługiwać dowiązania symboliczne, rozważ tę SymLinksIfOwnerMatchopcję zamiast FollowSymlinks.
hakre
15

tak, są, dlatego serwery zwykle mają również konfigurację „nie podążaj za dowiązaniami symbolicznymi” lub przynajmniej „podążaj tylko za dowiązaniami symbolicznymi do celu z tym samym użytkownikiem”. To dlatego, że serwer / php zwykle działa z większą liczbą praw, niż powinieneś mieć dostęp.

A ponieważ serwery zwykle starają się unikać rzeczy takich jak widoczny / etc / shadow, jest to jeszcze bardziej niebezpieczne dla szablonów magento, ponieważ szablony są analizowane przez include (), więc możesz mieć bardzo silne wycieki bezpieczeństwa, jeśli nie masz pełnej kontroli nad swoimi plikami.

Możesz argumentować, że są wtedy inne problemy, ale kto tak naprawdę zna każdy potencjalny scenariusz ataku, i najczęściej jest to kombinacja różnych mniej problematycznych luk bezpieczeństwa, które prowadzą do dużych przerw.

Jakiś czas temu wprowadzono poprawkę bezpieczeństwa dotyczącą katalogu multimediów i dowiązań symbolicznych, dlatego należy poszukać tam możliwych scenariuszy ataku.

Flyingmana
źródło
1
Jeśli ktoś inny może utworzyć dowiązania symboliczne na twoim serwerze, masz już większe kłopoty. Mam na myśli - patrz komentarz Bena poniżej. Kto kiedykolwiek hostowałby Magento na hostingu współdzielonym? Kto kiedykolwiek hostowałby teraz coś na współdzielonym hostingu i dlaczego? :)
Sven
3
po prostu dlatego, że są ludzie, którzy to robią. Nie możesz oczekiwać, że inni będą postępować rozsądnie. Zawsze znajdą się ludzie, którzy to zrobią, i zawsze będą ludzie, którzy popełniają błędy dotyczące ogólnej konfiguracji serwera.
Flyingmana,
14

Mogę sobie tylko wyobrazić, że stanowi to ryzyko dla współdzielonych hostów, których nie należy przede wszystkim wykorzystywać w eCommerce.

zalety
źródło
1
Niestety jest dość często używany.
Piotr Kamiński
2
Zgodnie ze standardami Rady Bezpieczeństwa PCI, technicznie chmura publiczna jest wielodostępna, więc nawet to jest uważane za „ryzyko”.
philwinkle
4

Poprawka Magento SUPEE-9767 zawiera APPSEC-1281: Zdalne wykonanie kodu za pomocą dowiązań symbolicznych , więc tak, dowiązania symboliczne w szablonach stanowią problem bezpieczeństwa.

Typ:
Zdalne wykonanie kodu (RCE)

Istotność CVSSv3:
8,8 (wysoka)

Znane ataki:
tak. Atakujący wyłączają ochronę konfiguracji po uzyskaniu dostępu administratora i przesyłają złośliwy kod.

Opis:
użycie opcji AllowSymlinks w ustawieniach konfiguracji może umożliwić przesłanie obrazu zawierającego złośliwy kod. Chociaż ta opcja jest domyślnie wyłączona, osoba atakująca z dostępem do ustawień konfiguracji sklepu może ją włączyć i zdalnie wykonać kod.

Produkty, których dotyczy problem:
Magento CE przed wersją 1.9.3.3 i Magento EE przed wersją 1.14.3.3

Naprawiono w:
CE 1.9.3.3, EE 1.14.3.3, SUPEE-9767

Reporter:
Wilko Nienhaus

Ehannes
źródło
0

Nie zaleca się zezwalać. Wystąpił błąd ładowania pliku js, gdy dowiązania symboliczne były włączone.
Wiele;

TypeError: $ .widget nie jest funkcją

Muszę spróbować odświeżyć 4-5 dla pomyślnie załadowanych stron.
Po jego zamknięciu może nie zostać wdrożony ładowanie zasobów po raz pierwszy powoli, ale błędy js zniknęły.

PS: Po wyłączeniu dowiązania symbolicznego musisz usunąć wdrożoną kopię plików po każdej zmianie static.php, skopiuj ją ponownie.

rbostan
źródło
1
Przepraszam, nie rozumiem - musisz zrobić 4-5 odświeżeń, zanim to zadziała? Co to ma wspólnego z dowiązaniami symbolicznymi?
Fabian Blechschmidt
Przed wyłączeniem dowiązań symbolicznych :) Przepraszam za mój angielski.
rbostan
Czy mówimy o magento2? Rozumiem więc, że nie rozumiem - jeszcze nie mam pojęcia o 2.
Fabian Blechschmidt,