Dependency Confusion
Reading time: 3 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Basic Information
W skrócie, luka w zależności z powodu pomyłki występuje, gdy projekt używa biblioteki o błędnie napisanej nazwie, nieistniejącej lub z niesprecyzowaną wersją, a używane repozytorium zależności pozwala na zbieranie zaktualizowanych wersji z publicznych repozytoriów.
- Błędnie napisana: Import
reqests
zamiastrequests
- 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ą nowsze wersje.
Exploitation
warning
W każdym przypadku atakujący musi tylko opublikować złośliwy pakiet o nazwie bibliotek używanych przez firmę ofiary.
Misspelled & Inexistent
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.
Unspecified Version
Bardzo często programiści nie określają żadnej wersji używanej biblioteki lub określają tylko główną wersję. Wtedy interpreter spróbuje pobrać najnowocześniejszą 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 jej 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
wersja 1.0.1 (pozwala na drobne aktualizacje). Może opublikować bibliotekę requests-company
wersja 1.0.2, a firma użyje tej biblioteki zamiast wewnętrznej.
AWS Fix
Ta luka została znaleziona w AWS CodeArtifact (przeczytaj szczegóły w tym poście na blogu).
AWS naprawiło to, pozwalając na określenie, czy biblioteka jest wewnętrzna czy zewnętrzna, aby uniknąć pobierania wewnętrznych zależności z zewnętrznych repozytoriów.
Finding Vulnerable Libraries
W oryginalnym poście o zależności z powodu pomyłki autor przeszukał tysiące ujawnionych plików package.json zawierających zależności projektów javascript.
References
- https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
- https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.