GitHub i Python Package Index, znany jako PyPI, wprowadzają zmiany mające ograniczyć ryzyko ataków na łańcuch dostaw oprogramowania. Nowe zasady dotyczą dwóch różnych etapów publikowania i pobierania zależności. GitHub opóźnia działanie Dependabota po pojawieniu się nowej wersji pakietu, natomiast PyPI ogranicza możliwość dodawania plików do starszych wydań. W obu przypadkach chodzi o utrudnienie szybkiego wykorzystania przejętych kont, tokenów lub procesów publikowania.
Dependabot nie pobierze najnowszej wersji od razu
Dependabot automatyzuje między innymi wykrywanie aktualizacji zależności i tworzenie pull requestów z propozycją ich wdrożenia. Zgodnie z nową zasadą narzędzie odczeka co najmniej trzy dni od opublikowania wydania, zanim otworzy pull request dotyczący aktualizacji niezwiązanej z poprawką bezpieczeństwa. Okres oczekiwania ma ograniczyć ryzyko, że złośliwa wersja pakietu zostanie szybko pobrana i zaproponowana wielu projektom, zanim ktokolwiek zdąży ją przeanalizować.
- Trzydniowe opóźnienie dotyczy zmian wersji, które nie są aktualizacjami bezpieczeństwa.
- W tym czasie nową wersję mogą sprawdzić opiekunowie projektów, badacze bezpieczeństwa i automatyczne skanery.
- Zasada działa domyślnie, ale jej zachowanie można zmienić w pliku dependabot.yml.
- GitHub opisuje trzy dni jako kompromis między ograniczeniem ryzyka a opóźnianiem aktualizacji zależności.
PyPI zamyka drogę do zatruwania starych wydań
PyPI wprowadza z kolei ograniczenie dotyczące wydań starszych niż 14 dni. Po wejściu zasady w życie nie będzie można dodawać nowych plików do takich publikacji. Oznacza to ochronę wydań, które przez dłuższy czas pozostawały stabilne, przed sytuacją, w której osoba uzyskująca dostęp do tokenu publikowania albo procesu projektu dopisuje do nich złośliwy plik.
PyPI zaznacza, że nie ma obecnie informacji o wykorzystaniu tego mechanizmu w ataku. Platforma wskazuje jednak, że od strony technicznej nie było przeszkody, która uniemożliwiałaby takie działanie, poza brakiem wiedzy atakujących o tej możliwości. Nowa reguła ma zostać wymuszona po standaryzacji interfejsu Upload 2.0 API oraz Staged Previews w ramach PEP 694. Do tego czasu zmiana nie powinna być traktowana jako już w pełni obowiązująca.
Zmiana ma dotknąć niewielkiej części projektów
Według testów przeprowadzonych przez PyPI nowe ograniczenie wpłynie na niewielką część publikujących projektów. Wśród 15 tysięcy najpopularniejszych pakietów tylko 56 opublikowało koło zgodne z Pythonem 3.14 później niż 14 dni po udostępnieniu danego wydania. Wynik ten sugeruje, że większość projektów nie dodaje nowych plików do starych wydań po upływie dwutygodniowego okresu.
Obie decyzje mają ograniczyć czas, w którym złośliwa zmiana może przejść z platformy programistycznej do użytkowników i organizacji. W przypadku Dependabota kluczowe jest opóźnienie automatycznej propozycji aktualizacji. W przypadku PyPI znaczenie ma utrudnienie modyfikowania już opublikowanej historii wydań. Jeśli mimo zabezpieczeń dojdzie do incydentu, rozdzielenie stabilnych publikacji od później dodanych plików powinno także ułatwić ustalenie, które elementy zostały naruszone i ograniczyć zakres prac porządkowych.