Распрацоўнікі вольнай сістэмы кіравання кантэнтам Plone, напісанай на Python і JavaScript/NodeJS, абвясцілі аб інцыдэнце, у выніку якога ў git-рэпазітар праекту на GitHub быў дададзены шкоднасны код. Першапачаткова ў рэпазітары былі выяўлены тры змены, якія з'явіліся 7 студзеня (1, 2, 3), якія дадаюць шкоднасны код у JavaScript-файлы праекта (1, 2, 3). Разбор інцыдэнту паказаў, што інтэграцыя шкоднаснага кода была праведзена ў выніку кампраметацыі ўліковага запісу аднаго з распрацоўшчыкаў, токен доступу якога быў захоплены зламыснікамі пасля запуску шкоднаснага ПЗ у яго сістэме.
14 студзеня скампраметаваны ўліковы запіс быў заблакаваны, а распрацоўшчыкам праекта рэкамендавана прааналізаваць коміты з 1 па 14 студзеня. 27 студзеня было выяўлена, што заўважанымі камітамі справа не абмежавалася і атака закранула пяць рэпазітараў праекта (plone/volto, plone/mockup, plone/plone.app.mosaic, plone/critical-css-cli, plone/plonetheme.barceloneta), у якія быў незаўважна інтэграваны. У выпадку рэпазітара plone.app.mosaic, атакавалым атрымалася падмяніць master-галінку. Атака была праведзена праз два месяцы пасля захопу токена доступу распрацоўшчыка.
Для інтэграцыі зменаў замест звычайных коммітаў атакавалыя скарысталіся аперацыяй «force push» (git push з опцыяй «force»), якая дазваляе прымусова замяніць галінку ў вонкавым рэпазітары сваім змесцівам і, адпаведна, перапісаць гісторыю змен (пасля замены паказваецца гісторыя з галіны, загруж. Для прадухілення падобнай падмены галінак у будучыні распрацоўнікі Plone уключылі ў GitHub правілы, блакавальныя аперацыі "force push" для асноўных галінак і тэгаў.
У рэпазітары plone.app.mosaic для цяжкасці выяўлення кампраметацыі атакавалыя падставілі ў master-галінку шкоднасны коміт, які мае фіктыўную дату – 18 снежня, мяркуючы, што вобласць пошуку шкоднаснага кода засяродзіцца на зменах, дададзеных пасля іх першай актыўнасці ў рэпазітары. Шкодная змена падавалася ў падстаўленым каментары як пачатак распрацоўкі новага тэставага выпуску, але апроч змены нумара версіі ў метададзеных (з 4.0.0a1 на 4.0.0a2.dev0) у выкліканы на этапе зборкі javascript-файл prettier.config.js быў дададзены шкоднасны Для ўтойвання пры праглядзе змены ў тэрмінале код быў дададзены ў адным радку з легітымнай аперацыяй і зрушаны з бачнай вобласці з выкарыстаннем прабелаў. У інтэрфейсе GitHub дадзены код таксама не паказваўся па змаўчанні і патрабаваў націскі кнопкі "Load Diff".

Атака была нацэлена ў большай ступені на распрацоўшчыкаў праекта, чым на карыстальнікаў. У рэліз шкоднасныя змены не ўвайшлі. Шкодны код актываваўся пры зборцы, загружаў эксплоіты для падвышэння прывілеяў, наладжваў аўтазапуск праз выклік сваіх працэсаў са стартавых скрыптоў і дазваляў выдалена кіраваць серверам. Акрамя гэтага ўсталёўваны шкоднасны кампанент ажыццяўляў пошук і адпраўку канфідэнцыйных дадзеных, такіх як токены доступу, профілі браўзэраў і ключы ад криптокошельков.
Крыніца: opennet.ru
