Szczegóły ataku na infrastrukturę wykorzystywaną do rozwoju frameworka uczenia maszynowego PyTorch ujawniają, że udało się uzyskać klucze dostępu wystarczające do umieszczania dowolnych danych w repozytorium wydań projektu na GitHubie i AWS, a także do wprowadzenia kodu do głównej gałęzi repozytorium i dodania backdoora poprzez zależności. Podmiana wydań PyTorch mogła być wykorzystywana do ataków na dużych przedsiębiorców, takich jak Google, Meta, Boeing i Lockheed Martin, które używają PyTorch w swoich projektach. W ramach programu Bug Bounty firma Meta wypłaciła badaczom 16 250 USD za informacje o problemie.
Istota ataku polega na możliwości uruchomienia własnego kodu na serwerach ciągłej integracji, przeprowadzających ponowne budowanie i wykonywanie zadań do testowania nowych zmian wysyłanych do repozytorium. Problem dotyczy projektów, które korzystają z własnych zewnętrznych przetworników „Self-Hosted Runner” z GitHub Actions. W przeciwieństwie do tradycyjnych akcji GitHub, przetworniki Self-Hosted nie są wykonywane w infrastrukturze GitHub, lecz na własnych serwerach lub w wirtualnych maszynach, wspieranych przez programistów.
Wykonywanie zadań budowlanych na własnych serwerach umożliwia uruchomienie kodu, który może przeprowadzać skanowanie wewnętrznej sieci przedsiębiorstwa, wyszukiwanie w lokalnym systemie plików kluczy szyfrowania i tokenów dostępu, analizę zmiennych środowiskowych z parametrami dostępu do zewnętrznych magazynów lub usług chmurowych. Przy braku odpowiedniej izolacji środowiska budowy znalezione dane poufne mogą być przekazywane atakującemu na zewnątrz, na przykład poprzez wywołania do zewnętrznych interfejsów API. Do określenia zastosowania projektów „Self-Hosted Runner” można wykorzystać narzędzie Gato, analizujące publicznie dostępne pliki workflow oraz logi uruchamiania zadań CI.
W PyTorch i wielu innych projektach wykorzystujących „Self-Hosted Runner”, uruchamianie zadań budowlanych jest dozwolone tylko dla programistów, których zmiany wcześniej przeszły recenzję i zostały włączone do bazy kodu projektu. Posiadanie statusu „contributor” przy użyciu domyślnych ustawień w repozytorium daje możliwość uruchamiania przetworników GitHub Actions przy przesyłaniu pull-requestów i tym samym wykonywania własnego kodu w dowolnym środowisku GitHub Actions Runner, powiązanym z repozytorium lub organizacją kurującą projekt.
Ominięcie ograniczenia do statusu „contributor” okazało się łatwe — wystarczyło wprowadzić drobną zmianę i poczekać na jej zaakceptowanie w kodzie, po czym deweloper automatycznie uzyskiwał status aktywnego członka, którego pull-requesty można testować w infrastrukturze CI bez dodatkowej weryfikacji. Aby uzyskać status aktywnego dewelopera, w trakcie eksperymentu zastosowano nieznaczne kosmetyczne zmiany związane z poprawą błędów w dokumentacji. Aby uzyskać dostęp do repozytorium i magazynu wydań PyTorch podczas ataku, przechwycono token GitHub używany do dostępu do repozytorium z procesów kompilacji, a także klucze AWS, które były wykorzystywane do przechowywania wyników kompilacji.
Problem nie jest specyficzny dla PyTorch i dotyczy wielu innych dużych projektów, które korzystają z domyślnych ustawień dla „Self-Hosted Runner” w GitHub Actions. Na przykład, wspomniano o podobnych atakach mających na celu wprowadzenie backdoora do kilku dużych portfeli kryptowalutowych oraz projektów blockchain z miliardową kapitalizacją, modyfikacjach wydań Microsoft Deepspeed i TensorFlow, kompromitacji jednego z aplikacji firmy CloudFlare, a także wykonaniu kodu na komputerze w sieci Microsoft. Szczegóły tych incydentów wciąż nie zostały ujawnione. W ramach istniejących programów Bug Bounty badacze złożyli ponad 20 zgłoszeń o wynagrodzenia na łączną kwotę kilku setek tysięcy dolarów.
Źródło: opennet.ru
