Badacze GitGuardian opublikowali wyniki analizy poufnych danych, które zostały zapomniane przez programistów w kodzie umieszczonym w repozytorium pakietów Python, PyPI (Python Package Index). Po zbadaniu ponad 9.5 miliona plików i 5 milionów wydań pakietów związanych z 450 tysiącami projektów, zidentyfikowano 56866 przypadków wycieku poufnych danych. Jeśli weźmiemy pod uwagę tylko unikalne dane, bez duplikacji w różnych wydaniach, liczba zidentyfikowanych wycieków wyniosła 3938, a liczba projektów, w których występuje przynajmniej jeden wyciek, to 2922.
Całkowicie zidentyfikowano ponad 150 typów wycieków poufnych informacji, w tym typowe hasła, klucze kryptograficzne, tokeny dostępu do usług chmurowych, systemów ciągłej integracji i API. Co najmniej 768 danych uwierzytelniających pozostawało aktywnych w momencie przeprowadzania badań. Jako przykład popularnych wycieków, które nadal są istotne, wspomina się klucze dostępu do Azure Active Directory, dane logowania do SSH, MongoDB, MySQL i PostgreSQL, klucze do GitHub OAuth App, Dropbox i Auth0, oraz dane logowania do Coinbase i Twilio.
Wśród typów wycieków, które zyskują na popularności, wspomina się tokeny dostępu do botów w Telegramie, których liczba podwoiła się na początku 2021 roku, a następnie jeszcze raz podwoiła się wiosną 2023 roku. Ciągły wzrost wycieków obserwuje się również od 2020 roku w przypadku kluczy dostępu do Google API, a od 2022 roku - danych uwierzytelniających do baz danych. Z pakietów, które przodują pod względem liczby wycieków, wspomina się pakiety chatllm i safire, w których zapomniano 209 kluczy do OpenAI i 320 kluczy do Google Cloud.
Wśród typów plików, w których zidentyfikowano najwięcej wycieków, oprócz plików z rozszerzeniem „.py”, odnotowano pliki z rozszerzeniem .json (610 wycieków), .md (270), PKG-INFO (240), METADATA (210), .txt (170), a także pliki README (209) i pliki z katalogów noszących nazwę test (675). Wiele wycieków wiąże się również z przeoczeniem i błędami w konfiguracji wykluczania plików podczas tworzenia pakietów. Na przykład pliki z lokalnymi plikami konfiguracyjnymi (.cookiecutterrc, .env, .pypirc itp.) mogą być wykluczane z repozytorium Git za pomocą pliku „.gitignore”, który nie jest brany pod uwagę podczas tworzenia pakietu. W szczególności w repozytorium znaleziono 43 pliki .pypirc, zawierające dane uwierzytelniające do dostępu do PyPI. W 15 przypadkach wycieków programiści nie planowali publicznego publikowania pakietów, które pierwotnie były stworzone do użytku wewnętrznego, ale opublikowali je w PyPI przez pomyłkę.
Dodatkowo warto wspomnieć o dwóch wydarzeniach związanych z PyPI:
- W repozytorium PyPI wykryto 8 złośliwych pakietów, podawanych jako narzędzia do obfuskacji, czyli przekształcania kodu w nieczytelną formę, co utrudnia przywrócenie algorytmu działania. Wykryte pakiety miały w nazwach ciąg 'pyobf' (Pyobftoexe, Pyobfusfile, Pyobfexecute, Pyobfpremium, Pyobflight, Pyobfadvance, Pyobfuse i pyobfgood) i zostały pobrane ponad 2000 razy.
Zintegrowany w pakietach złośliwy kod był specyficzny dla platformy Windows i umożliwiał połączenie z zewnętrznym serwerem sterującym, serwera, uruchamianie dowolnych poleceń na komputerze dewelopera, znajdowanie i wysyłanie na zewnętrzny serwer poufnych informacji, takich jak klucze dostępu, a także przesyłanie dowolnych plików z systemu. Ponadto złośliwy kod mógł pełnić funkcje keyloggera, przechwytywać wprowadzone w Chrome hasła, robić zrzuty ekranu, nagrywać dźwięk, a nawet zarządzać kamerą internetową.
- Opublikowano wyniki niezależnego audytu kodu narzędzi, używanego do organizacji pracy repozytorium pypi.org, oraz frameworku 'cabotage', zaangażowanego w infrastrukturę orkiestracji kontenerów. Audyt został przeprowadzony przy wsparciu organizacji non-profit OTF (Open Technology Fund). W trakcie audytu nie wykryto problemów o wysokim poziomie ryzyka, a teksty źródłowe uznano za zgodne z podstawowymi wymaganiami dotyczącymi bezpiecznego pisania kodu. Zauważono jednak niewystarczający zasięg testów kodu bazowego cabotage oraz wykryto 29 problemów, z czego osiem przypisano umiarkowanemu poziomowi ryzyka, 6 — niskiemu, a 14 oznaczono jako uwagi informacyjne.
Najbardziej zauważalne problemy:
- Niewystarczająca weryfikacja podpisów cyfrowych, używanych do integracji PyPI z AWS SNS, umożliwiała wysyłanie powiadomień na e-mail poszczególnych użytkowników.
- Wycieki informacji w przetwarzaniu pobrań, umożliwiające ustalenie istnienia konta bez generowania zdarzeń o próbach logowania.
- Zastosowanie nierzetelnych kryptograficznych haszy, nie eliminujących ataków na zanieczyszczenie pamięci podręcznej.
- Przy posiadaniu uprawnień do uruchamiania procesów budowy przez cabotage, atakujący potencjalnie mógłby wprowadzić własne polecenia.
- Przy posiadaniu uprawnień do wdrażania w cabotage, atakujący potencjalnie mógłby wdrożyć legalnie wyglądający obraz.
Źródło: opennet.ru
