SUPEE-9767, modman i dowiązania symboliczne

16

Chciałbym załatać sklep Magento za pomocą SUPEE-9767. Dokumentacja SUPEE-9767 mówi mi, aby wyłączyć Symlinks ustawienie przed nałożeniem plastra:

Przed zastosowaniem poprawki lub aktualizacji do najnowszej wersji należy wyłączyć ustawienie Symlinks ... Ustawienie, jeśli jest włączone, zastąpi ustawienie pliku konfiguracyjnego, a jego zmiana wymagać będzie bezpośredniej modyfikacji bazy danych.

Ale używam modmana do zarządzania modułami, a ponieważ niektóre moduły używają plików szablonów, ustawienie Symlinks jest włączone zgodnie z sugestią README modmana. Czy pozostawienie włączonej opcji Symlinks jest bezpieczne jako jeden z postów w poprawce bezpieczeństwa SUPEE-9767 - Możliwe problemy? sugeruje (nie mogę jeszcze komentować postów, ponieważ jestem nowym użytkownikiem)?

Użytkownicy używający modmana do zarządzania modułami Magento 1.x powinni upewnić się, że nie wyłączają dowiązań symbolicznych, ponieważ spowoduje to wyłączenie modułów modmana.

Jeśli pozostawię włączone ustawienie Symlinks, czy sklep nie będzie narażony na APPSEC-1281: Zdalne wykonanie kodu za pomocą dowiązań symbolicznych , zagrożenie bezpieczeństwa, które łatka ma naprawić?

Czy istnieją inne sposoby używania modmana z plikami szablonów po tej łatce? (Znam opcję „poprawionej wersji Mage / Core / Block / Template.php”, o której wspomina README modmana, ale łatanie pliku rdzenia wydaje się niebezpieczne.)

Ehannes
źródło
1
Używam Modmana i Kompozytora w swoich projektach. Nie mogę uwierzyć, że przez wiele lat opcja Symlinks w Magento nie była uważana za bombę. Nagle jest to bomba! Ta zmiana bez powiadomień i wyjaśnień spowoduje wiele problemów dla wielu osób. Smutne o przyszłości Modmana i kompozytora w Magento.
ADDISON74
1
To spore wyzwanie. Jeśli chcesz zainwestować, tworzenie procesu kompilacji, który generuje scalony (bez dowiązań symbolicznych) artefakt, jest naprawdę dobrym rozwiązaniem.
Joseph w SwiftOtter
Świetny artykuł na ten temat można znaleźć na stronie tomlankhorst.nl/..., gdzie wyjaśnia on również, jak pozbyć się „włączonych dowiązań symbolicznych” - ostrzeżenia wprowadzonego w Magento 1.9.3.4.
ehannes,

Odpowiedzi:

14

Oto kilka wyjaśnień dotyczących tej zmiany:

Najpierw przeczytaj to wyjaśnienie od Petera O'Callaghana, aby uzyskać doskonałe zrozumienie: https://peterocallaghan.co.uk/2017/06/appsec-1281-dangerous-symlinks/

Kolejną interesującą lekturą jest ten post Maxa Chadwicka https://maxchadwick.xyz/blog/what-allow-symlinks-actally-does

Ta modyfikacja naprawdę polega na wywołaniu treści do przesłania (takich jak obrazy) za pomocą dyrektyw szablonów.

Problem związany z dowiązaniami symbolicznymi można wykorzystać tylko w przypadku dostępu administratora, a Magento dodał także trochę więcej ochrony przed przesyłaniem obrazów.

Pamiętaj, że oprócz samego ustawienia są to niektóre zabezpieczenia przed znanym sposobem wykorzystania.

Jeśli więc rozumiesz związane z tym ryzyko, możesz pozostawić włączone dowiązania symboliczne.

Jeśli chcesz włączyć je dla nowej instalacji, możesz uruchomić:

UPDATE core_config_data SET value = 1 WHERE path = "dev/template/allow_symlink";
Raphael at Digital Pianism
źródło
Jeśli pozostawię włączone dowiązania symboliczne, jak mam chronić sklep przed „APPSEC-1281: Zdalne wykonanie kodu przez dowiązania symboliczne”?
ehannes
@ehannes, chroniąc dostęp do backendu, ponieważ exploit wymaga dostępu do backendu. Ponadto przesyłanie obrazu ma teraz dodatkową funkcję sprawdzania oddzwonienia.
Raphael w Digital Pianism
3
uzyskanie dostępu administratora oznacza, że ​​masz dostęp do całego interfejsu zaplecza Magento. kogo obchodzi exploit na tym etapie znaleziony w przesyłanym skrypcie graficznym? ten złośliwy użytkownik może usunąć wszystkie twoje produkty i zrobić niewyobrażalne rzeczy. dyskusja powinna zaczynać się od „jeśli ten użytkownik uzyska uprawnienia administratora, ponieważ prawdziwy administrator jest głupi, nie chroni zaplecza na wiele sposobów”
ADDISON74
1
@ehannes proszę przeczytać to peterocallaghan.co.uk/2017/06/appsec-1281-dangerous-symlinks
Raphael at Digital Pianism
2
Peter O'Callaghan pisze: „Dlatego jeśli komuś uda się uzyskać dostęp do panelu administracyjnego, może on wykonać złośliwy program, aby osiągnąć RCE.”. To wydaje się być wspólnym wnioskiem w tej dyskusji. Jak wspomniano wcześniej, jeśli złośliwy użytkownik ma dostęp do panelu administracyjnego, należy martwić się innymi sprawami niż RCE. Jeśli ktoś ma coś do dodania do dyskusji, zrób to. W każdym razie myślę, że wyjaśniłeś wszystko @RaphaelatDigitalPianism i zaakceptuję tę odpowiedź.
ehannes
6

Problemem nie są dowiązania symboliczne, problemem są ścieżki, które osiągają wyższe poziomy, takie jak ../../../../../media/tmp/hahaha.png. Jeśli się mylę, proszę, oświeć mnie. Poprawka została zatytułowana „Zezwalaj na dowiązania symboliczne”, a włączenie tej opcji wyłącza sprawdzanie, które zostało zaimplementowane realpath(). Moim zdaniem poprawką, która jest równie bezpieczna, wydajniejsza i nadal kompatybilna z dowiązaniami symbolicznymi jest użycie strpos($path, '..')i / lub sprawdzenie, czy realpath()pasuje do niektórych ryzykownych katalogów, takich jak mediai var. Jeśli zostanie zaimplementowany w ten sposób, nie musi być konfigurowalny, może po prostu zawsze być włączony i nadal nie powodować awarii tysięcy sklepów.

Niezależnie od tego użytkownik serwera WWW nie powinien mieć dostępu do zapisu plików w katalogach kodów źródłowych (tak jak robi to Magento Connect ...), dzięki czemu jest to kolejny sposób na uniknięcie gdzieś złośliwego kodu i wykonanie go jako szablonu bloku.

Tak więc ten atak na dowiązania symboliczne jest po prostu źle skierowany i istnieje lepsza poprawka. W rzeczywistości, pod warunkiem, jeden ponad rok temu i nie jest nawet link do niego w modman github README.

ColinM
źródło
0

Jeśli w dodatku do pliku kompozytora ustawisz magento-deploystrategy na kopiowanie, twoje pliki zostaną skopiowane z folderu dostawcy, a nie z Symlinks.

    "extra":{
        "magento-root-dir":"./",
        "magento-deploystrategy":"copy",
        "magento-force": true
    }

Następnie możesz zmodyfikować dane core_config_data, aby ustawić wartość dev / template / allow_symlink na 0

Zasób do informacji

Stacja robocza B.
źródło