Dependency Confusion
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
W skrócie, luka w zależności nazywana dependency confusion występuje, gdy projekt używa biblioteki o błędnie napisanej nazwie, nieistniejącej lub z niesprecyzowaną wersją, a używana repozytorium zależności pozwala na zbieranie zaktualizowanych wersji z publicznych repozytoriów.
Błędnie napisana: Import reqests
zamiast requests
Nieistniejąca: Import company-logging
, wewnętrznej biblioteki, która już nie istnieje
Niesprecyzowana wersja: Import wewnętrznej istniejącej biblioteki company-requests
, ale repozytorium sprawdza publiczne repozytoria, aby zobaczyć, czy są większe wersje.
W każdym przypadku atakujący musi tylko opublikować złośliwy pakiet o nazwie bibliotek używanych przez firmę ofiary.
Jeśli twoja firma próbuje zaimportować bibliotekę, która nie jest wewnętrzna, istnieje duże prawdopodobieństwo, że repozytorium bibliotek będzie jej szukać w publicznych repozytoriach. Jeśli atakujący ją stworzył, twój kod i działające maszyny prawdopodobnie zostaną skompromitowane.
Bardzo często zdarza się, że deweloperzy nie określają żadnej wersji używanej biblioteki lub określają tylko główną wersję. Wtedy interpreter spróbuje pobrać najnowższą wersję spełniającą te wymagania.
Jeśli biblioteka jest znaną zewnętrzną biblioteką (jak python requests
), atakujący nie może wiele zrobić, ponieważ nie będzie w stanie stworzyć biblioteki o nazwie requests
(chyba że jest oryginalnym autorem).
Jednak jeśli biblioteka jest wewnętrzna, jak requests-company
w tym przykładzie, jeśli repozytorium biblioteki pozwala na sprawdzanie nowych wersji również zewnętrznie, będzie szukać nowszej wersji dostępnej publicznie.
Więc jeśli atakujący wie, że firma używa biblioteki requests-company
wersji 1.0.1 (pozwalającej na drobne aktualizacje). Może opublikować bibliotekę requests-company
wersji 1.0.2 i firma użyje tej biblioteki zamiast wewnętrznej.
Ta luka została znaleziona w AWS CodeArtifact (przeczytaj szczegóły w tym poście na blogu). AWS naprawiło to, pozwalając określić, czy biblioteka jest wewnętrzna czy zewnętrzna, aby uniknąć pobierania wewnętrznych zależności z zewnętrznych repozytoriów.
W oryginalnym poście o dependency confusion autor przeszukał tysiące ujawnionych plików package.json zawierających zależności projektów javascript.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)