hacktricks/pentesting-web/dependency-confusion.md

6 KiB

Dependency Confusion

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

{% embed url="https://websec.nl/" %}

Podstawowe informacje

W skrócie, podatność na dependency confusion występuje, gdy projekt używa biblioteki z błędnie napisaną nazwą, nieistniejącą lub z nieokreśloną wersją, a repozytorium użytej zależności pozwala na pobieranie zaktualizowanych wersji z publicznych repozytoriów.

  • Błędnie napisana: Importuj reqests zamiast requests
  • Nieistniejąca: Importuj company-logging, wewnętrzną bibliotekę, która już nie istnieje
  • Nieokreślona wersja: Importuj wewnętrzną istniejącą bibliotekę company-requests, ale repo sprawdza publiczne repozytoria, aby zobaczyć, czy są nowsze wersje.

Wykorzystanie

{% hint style="warning" %} W każdym przypadku atakujący musi tylko opublikować złośliwy pakiet o nazwie używanej przez firmę ofiary. {% endhint %}

Błędnie napisana & Nieistniejąca

Jeśli twoja firma próbuje importować bibliotekę, która nie jest wewnętrzna, bardzo prawdopodobne jest, że repozytorium bibliotek będzie próbować jej znaleźć w publicznych repozytoriach. Jeśli atakujący ją stworzył, twój kod i uruchomione maszyny prawdopodobnie zostaną skompromitowane.

Nieokreślona wersja

Bardzo często deweloperzy nie określają żadnej wersji używanej biblioteki, lub określają tylko główną wersję. Wtedy interpreter spróbuje pobrać najnowszą wersję spełniającą te wymagania.
Jeśli biblioteka jest znaną zewnętrzną biblioteką (jak python requests), atakujący nie może zrobić wiele, ponieważ nie będzie mógł 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 publicznie dostępnej.
Więc jeśli atakujący wie, że firma używa biblioteki requests-company wersji 1.0.1 (pozwala na aktualizacje mniejsze). Może opublikować bibliotekę requests-company wersji 1.0.2 i firma będzie używać tej biblioteki zamiast wewnętrznej.

Poprawka AWS

Ta podatność została znaleziona w AWS CodeArtifact (przeczytaj szczegóły w tym wpisie 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.

Znajdowanie podatnych bibliotek

W oryginalnym poście o dependency confusion autor szukał tysięcy odsłoniętych plików package.json zawierających zależności projektów JavaScript.

Odnośniki

{% embed url="https://websec.nl/" %}

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!