Vývojáři open-source systému pro správu obsahu Plone, napsaného v Pythonu a JavaScriptu/NodeJS, oznámili incident, při kterém byl do git repozitáře projektu na GitHubu přidán škodlivý kód. Původně byly v repozitáři identifikovány tři úpravy z 7. ledna (1, 2, 3), které do projektových JavaScriptových souborů přidávaly škodlivý kód (1, 2, 3). Analyza incidentu ukázala, že integrace škodlivého kódu byla provedena v důsledku kompromitace účtu jednoho z vývojářů, jehož přístupový token byl zachycen útočníky po spuštění škodlivého softwaru v jeho systému.
Dne 14. ledna byl kompromitovaný účet zablokován a vývojářům projektu bylo doporučeno analyzovat commity od 1. do 14. ledna. Dne 27. ledna bylo zjištěno, že zmíněnými commity incident nekončil a útok zasáhl pět repozitářů projektu (plone/volto, plone/mockup, plone/plone.app.mosaic, plone/critical-css-cli, plone/plonetheme.barceloneta), do nichž byl nenápadně integrován škodlivý kód. V případě repozitáře plone.app.mosaic se útočníkům podařilo podvrhnout master větev. Útok byl proveden dva měsíce po zachycení přístupového tokenu vývojáře.
K integraci změn místo obvyklých commitů útočníci využili operaci „force push“ (git push s volbou „—force“), která umožňuje násilně nahradit větev ve externím repozitáři vlastním obsahem a tím přepsat historii změn (po nahrazení se zobrazuje historie z větve nahrané útočníky). Aby se v budoucnu předešlo podobné manipulaci s větvemi, vývojáři Plone aktivovali na GitHubu pravidla, která blokují operace „force push“ pro hlavní větve a tagy.
Ve veřejném repozitáři plone.app.mosaic útočníci vložili do master větve škodlivý commit s falešným datem - 18. prosince, aby oklamali detekci kompromitace, s domněním, že oblast hledání škodlivého kódu se zaměří na změny přidané po jejich první aktivitě v repozitáři. Škodlivá změna byla v podvrženém commitu představena jako začátek vývoje nové testovací verze, avšak kromě změny čísla verze v metadatech (z 4.0.0a1 na 4.0.0a2.dev0) byl do javascriptového souboru prettier.config.js přidán škodlivý kód. Aby se při prohlížení změn v terminálu zakryl, byl kód přidán na jeden řádek s legitimní operací a posunut z viditelné oblasti pomocí mezer. V uživatelském rozhraní GitHubu nebyl tento kód také ze své podstaty zobrazen a vyžadoval stisknutí tlačítka „Načíst diff“.

Útok byl více zaměřen na vývojáře projektu než na uživatele. Škodlivé změny nebyly zahrnuty do vydání. Škodlivý kód se aktivoval během sestavení, stahoval exploit pro povýšení oprávnění, nastavoval automatické spouštění prostřednictvím volání vlastních procesů ze startovacích skriptů a umožňoval vzdálené ovládání. serveremKromě toho instalovaný škodlivý komponent prováděl vyhledávání a odesílání citlivých údajů, jako jsou přístupové tokeny, profily prohlížečů a klíče od kryptopeněženek.
Zdroj: opennet.ru
