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.

Из выявленных 749 тысяч проблем 442 тысячи (41%) помечены как незначительные, 227 тысяч (30%) как проблемы умеренной опасности и 80 тысяч (11%) как опасные. Некоторые пакеты выбиваются из общей массы и содержат тысячи проблем: например, в пакете PyGGI выявлено 2589 проблем, в основном связанных с применением конструкции «try-except-pass», в пакете appengine-sdk найдено 2356 проблем. Большое число проблем также присутствует в пакетах genie.libs.ops, pbcore и 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 solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster