46% pakietów Python w repozytorium PyPI zawiera potencjalnie niebezpieczny kod

Grupa badaczy z Uniwersytetu w Turku (Finlandia) opublikowała wyniki analizy pakietów w repozytorium PyPI pod kątem użycia potencjalnie niebezpiecznych konstrukcji, które mogą prowadzić do pojawienia się luk w zabezpieczeniach. W trakcie analizy 197 tysięcy pakietów zidentyfikowano 749 tysięcy potencjalnych problemów z bezpieczeństwem. W 46% pakietów występuje przynajmniej jeden taki problem. Najczęściej występujące problemy to niedociągnięcia związane z obsługą wyjątków oraz używaniem mechanizmów, które dopuszczają podstawianie kodu.

Spośród 749 tysięcy zidentyfikowanych problemów, 442 tysiące (41%) oznaczono jako niewielkie, 227 tysięcy (30%) jako problemy o umiarkowanym ryzyku i 80 tysięcy (11%) jako niebezpieczne. Niektóre pakiety wyróżniają się na tle innych i zawierają tysiące problemów: na przykład w pakiecie PyGGI zidentyfikowano 2589 problemów, głównie związanych z używaniem konstrukcji "try-except-pass", w pakiecie appengine-sdk znaleziono 2356 problemów. Wiele problemów występuje również w pakietach genie.libs.ops, pbcore i genie.libs.parser.

Należy zauważyć, że wyniki uzyskano na podstawie przeprowadzenia zautomatyzowanej analizy statycznej, która nie uwzględnia kontekstu użycia danej konstrukcji. Programista narzędzia bandit, które wykorzystano do skanowania kodu, wyraził opinię, że z powodu dość wysokiej liczby fałszywych alarmów, wyniki kontroli nie mogą być bezpośrednio uznawane za luki w zabezpieczeniach bez dodatkowego ręcznego przeglądania każdego problemu.

Na przykład, analizator uważa za problem bezpieczeństwa stosowanie niepewnych generatorów liczb losowych oraz algorytmów haszujących, takich jak MD5, podczas gdy w kodzie podobne algorytmy mogą być używane do celów nie mających wpływu na bezpieczeństwo. Analizator również uznaje za problem jakąkolwiek obsługę danych zewnętrznych w niebezpiecznych funkcjach, takich jak pickle, yaml.load, subprocess i eval, jednak takie użycie niekoniecznie musi wiązać się z pojawieniem się luki i w rzeczywistości zastosowanie tych funkcji może być zrealizowane bez zagrożenia dla bezpieczeństwa.

Wśród kontroli wykorzystanych w badaniu:

  • Użycie potencjalnie niebezpiecznych funkcji exec, mktemp, eval, mark_safe itp.
  • Niebezpieczne ustalanie praw dostępu do plików.
  • Podłączenie gniazda sieciowego do wszystkich interfejsów sieciowych.
  • Użycie twardo zakodowanych haseł i kluczy.
  • Użycie zdefiniowanego z góry katalogu tymczasowego.
  • Użycie pass i continue w obsługiwaniu wyjątków w stylu catch-all;
  • Uruchamianie aplikacji webowych opartych na frameworku Flask z włączonym trybem debugowania.
  • Użycie niebezpiecznych metod deserializacji danych.
  • Użycie funkcji haszujących MD2, MD4, MD5 i SHA1.
  • Użycie niebezpiecznych algorytmów szyfrowania DES i trybów szyfrowania.
  • Użycie niebezpiecznej implementacji HTTPSConnection w niektórych wersjach Pythona.
  • Określenie schematu file:// w urlopen.
  • Użycie generatorów liczb pseudolosowych do realizacji zadań kryptograficznych.
  • Użycie protokołu Telnet.
  • Użycie niebezpiecznych parserów XML.

Dodatkowo można zauważyć, że w katalogu PyPI odkryto 8 złośliwych pakietów. Przed usunięciem problematyczne pakiety zostały pobrane ponad 30 tysięcy razy. W celu ukrycia złośliwej aktywności oraz ominięcia ostrzeżeń prostych analizatorów statycznych w pakietach zastosowano kodowanie bloków kodu przy użyciu Base64 oraz zorganizowano ich wykonanie po dekodowaniu poprzez wywołanie eval.

W pakietach noblesse, genesisbot, are, suffer, noblesse2 i noblessev2 zidentyfikowano kod do przechwytywania numerów kart kredytowych oraz haseł zapisanych w przeglądarkach Chrome i Edge, a także do przesyłania tokenów kont z aplikacji Discord oraz wysyłania danych o systemie, w tym zrzutów ekranu. W pakietach pytagora i pytagora2 istniała możliwość pobierania i wykonywania zewnętrznego kodu wykonywalnego.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster