Bleeping Computer rapporterte 27. april at angripere kompromitterte den populære data-observability-pakken elementary-data ved å publisere en infostealer som versjon 0.23.3. Pakken har 1,1 millioner månedlige nedlastinger på PyPI og er en standard-komponent i mange dbt-pipelines og KI-prosjekter. Community-medlemmet «crisperik» oppdaget bakdøren samme dag og åpnet en issue på GitHub. En ren versjon 0.23.4 er nå publisert.
Angrepsvektoren er det interessante her. StepSecurity-analysen viser at angriperen ikke kompromitterte vedlikeholdernes kontoer (slik tilsvarende angrep ofte gjør), men la igjen en ondsinnet kommentar på en pull request som utnyttet en script injection-feil i workflow-en. Det fikk GitHub Actions til å kjøre angriper-kontrollert shell-kode, som lekket workflow-ens GITHUB_TOKEN. Med tokenet i hånd signerte angriperen en commit og tag (v0.23.3), og det legitime release-pipelinen bygde og publiserte den ondsinnede pakken til både PyPI og GitHub Container Registry.
«Release-workflow-en som laster opp til PyPI har også en build-and-push-docker-image-jobb. Bakdøren spredde seg automatisk til Docker-imaget også.» — StepSecurity-analysen
Payloaden er en elementary.pth-fil som lastes ved Python-oppstart. Den henter SSH-nøkler, Git-credentials, AWS/GCP/Azure-keys, Kubernetes- og Docker-secrets, CI-tokens, .env-filer og kryptolommebøker for Bitcoin, Litecoin, Dogecoin, Zcash, Dash, Monero og Ripple. I tillegg samles /etc/passwd, logger og shell-historie.
Hva bør du gjøre?
- Sjekk om du har installert 0.23.3. Kjør
pip show elementary-datapå alle utvikler-maskiner og CI-runners. Sjekk også Docker-pulls avghcr.io/elementary-data/elementary:0.23.3og:latestdenne uken. - Roter alt som har vært i miljøet. SSH-nøkler, AWS/GCP/Azure-credentials, GitHub-tokens, dbt Cloud-tokens, .env-innhold. Anta full kompromittering hvis pakken kjørte.
- Pin versjoner i requirements.txt og Dockerfile. Bruk eksakt versjon eller hash-pinning (pip-tools eller poetry.lock). «latest»-tags i container-registries er en angrepsoverflate.