W menedżerze pakietów Guix zidentyfikowano luki (brak przypisanych CVE) w implementacji wewnętrznego polecenia «guix substitute», które jest automatycznie wywoływane przez proces w tle guix-daemon podczas wykonywania operacji instalacji pakietów. Polecenie to służy do pobierania już skompilowanych binarnych pakietów z zewnętrznych serwerów z weryfikacją ich integralności za pomocą podpisu cyfrowego. Najgroźniejsza luka pozwala na zdalne wykonanie kodu na systemie użytkownika z uprawnieniami, na których działa proces w tle guix-daemon.
Problem dotyczy wszystkich konfiguracji z procesem guix-daemon, niezależnie od tego, czy jest uruchamiany z uprawnieniami root, czy jako użytkownik pozbawiony uprawnień. Do wykorzystania luki wystarczy jakakolwiek próba pobrania gotowych binarnych pakietów z serwera, kontrolowanego przez atakującego. Przy tym złośliwy serwer nie musi być jawnie wybrany lub wskazany w ustawieniach użytkownika — może być określony za pomocą opcji «—discover», co umożliwia zastąpienie serwera podczas ataku MITM. W konfiguracjach, w których guix-daemon jest uruchomiony z podwyższonymi uprawnieniami, lokalny użytkownik może przeprowadzić atak, jeśli ma dostęp do procesu w tle za pośrednictwem gniazda Unix (domyślnie dostępne dla wszystkich użytkowników).
Luka występuje w obsłudze «restore-file», stosowanej do rozpakowywania podczas pobierania pakietu, zanim zakończy się jego pełne pobieranie i weryfikacja załadowanego archiwum za pomocą podpisu cyfrowego. Problem wynika z braku weryfikacji obecności znaków «.», «/» i «..» w ścieżkach plików umieszczonych w archiwum. Przez wprowadzenie nieprawidłowych nazw plików do archiwum atakujący może uzyskać możliwość zapisania dowolnego pliku w dowolnym obszarze systemu plików, w zależności od uprawnień, na których działa proces w tle guix-daemon.
Aby zrealizować wykonanie swojego kodu w systemie, można na przykład dodać skrypt do automatycznego uruchamiania, taki jak «~/.bashrc» lub «~/.profile», lub zmienić plik «~/.ssh/authorized_keys» z kluczami SSH. Jeśli w systemie wieloużytkownikowym guix-daemon działa jako użytkownik root, atakujący może nadpisać plik z hasłami lub skrypty systemowe.
Możliwość tworzenia fałszywych serwerów do rozprzestrzeniania złośliwych pakietów wynika z faktu, że procedura ładowania metadanych (narinfo) dotyczących dostępnych pakietów binarnych (fetch-narinfos) nie przeprowadzała weryfikacji certyfikatu serwera, polegając na tym, że główna część metadanych była podpisana cyfrowo. Okazało się, że podpis nie obejmował URL do pobierania pakietu, co umożliwiało jego podmianę bez naruszania integralności metadanych. Ostatecznie fałszywy pakiet zostałby odrzucony z powodu niezdania testu zawartości zgodnie z hashem, podpisanym cyfrowo, ale ta weryfikacja była przeprowadzana po etapie rozpakowywania, na którym ujawniał się problem z symbolami specjalnymi w nazwach plików.
Oprócz polecenia „guix substitute”, podatny handler „restore-file” jest wykorzystywany w działaniu poleceń „guix offload”, „guix archive —extract” i „guix challenge”, przez które również można wykorzystać lukę. Jako obejście dla zablokowania luki sugeruje się wyraźne określenie opcji „—no-substitutes” we wszystkich poleceniach guix. Opracowanie poprawki dla luki przyjęto do bazy kodu Guix. Użytkownikom zaleca się niezwłoczne zainstalowanie aktualizacji utworzonych przez deweloperów guix i guix-daemon.
Oprócz wspomnianego problemu w Guix usunięto jeszcze trzy luki:
- Możliwość podmiany pakietów binarnych z powodu braku weryfikacji zgodności żądanego pakietu z zwróconymi metadanymi w handlerze fetch-narinfos. Luka ta może być wykorzystana do dostarczenia przestarzałej wersji żądanego pakietu, zawierającej luki.
- Określenie zawartości pierwszej linii dowolnych plików w systemie przez przesłanie przez lokalnego użytkownika zapytania z URI „file://” („—substitute-urls file:///etc/shadow”). Jeśli guix-daemon wykonywany jest z uprawnieniami root, to odczyta żądany plik, ustali, że nie jest on metadanymi i wyświetli błąd, w treści którego zostanie wspomniana linia, której nie udało się zanalizować.
- Podanie specjalnie sformatowanej nazwy zewnętrznego repozytorium („..../....../..../newfile”) podczas wykonywania poleceń „guix pull” i „guix time-machine” pozwala na zapisanie danych z informacjami o commicie w dowolnym istniejącym pliku w systemie plików, jeśli jego zawartość przypomina listę ciągów w języku Scheme. Ta podatność może być wykorzystywana do ataków DoS, ale nie wyklucza się, że poprzez sprytne manipulacje z pseudo-FS /proc można osiągnąć bardziej niebezpieczne interakcje z systemem.
Źródło: opennet.ru
