Os desenvolvedores do sistema de gerenciamento de conteúdo livre Plone, escrito em Python e JavaScript/NodeJS, anunciaram um incidente que resultou na adição de código malicioso ao repositório git do projeto no GitHub. Inicialmente, foram identificadas três alterações que surgiram em 7 de janeiro (1, 2, 3), que adicionaram código malicioso aos arquivos JavaScript do projeto (1, 2, 3). A análise do incidente mostrou que a integração do código malicioso ocorreu devido à comprometimento da conta de um dos desenvolvedores, cujo token de acesso foi capturado por criminosos após a execução de malware em seu sistema.
Em 14 de janeiro, a conta comprometida foi bloqueada e os desenvolvedores do projeto foram recomendados a analisar os commits de 1 a 14 de janeiro. Em 27 de janeiro, foi descoberto que os commits observados não eram tudo e o ataque afetou cinco repositórios do projeto (plone/volto, plone/mockup, plone/plone.app.mosaic, plone/critical-css-cli, plone/plonetheme.barceloneta), nos quais o código malicioso foi integrados de forma discreta. No caso do repositório plone.app.mosaic, os atacantes conseguiram substituir o branch master. O ataque foi realizado dois meses após a captura do token de acesso do desenvolvedor.
Para integrar as alterações em vez de commits normais, os atacantes utilizaram a operação "force push" (git push com a opção "—force"), que permite substituir forçadamente o branch em um repositório externo pelo seu conteúdo e, consequentemente, reescrever o histórico de alterações (após a substituição, mostra-se o histórico do branch carregado pelo atacante). Para evitar tais substituições de branches no futuro, os desenvolvedores do Plone implementaram regras no GitHub que bloqueiam operações de "force push" para branches principais e tags.
No repositório plone.app.mosaic, para dificultar a identificação de uma possível comprometimento, os atacantes inseriram um commit malicioso no branch master, com uma data falsa — 18 de dezembro, acreditando que a área de busca por código malicioso se concentraria nas alterações adicionadas após sua primeira atividade no repositório. A alteração maliciosa foi apresentada no commit inserido como o início do desenvolvimento de um novo lançamento de teste, mas além da mudança no número da versão nos metadados (de 4.0.0a1 para 4.0.0a2.dev0), um código malicioso foi adicionado ao arquivo javascript chamado prettier.config.js que é chamado na fase de construção. Para ocultar durante a visualização das mudanças no terminal, o código foi adicionado em uma única linha com uma operação legítima e deslocado da área visível usando espaços. Na interface do GitHub, esse código também não era exibido por padrão, requerendo que o botão 'Load Diff' fosse pressionado.

O ataque foi mais direcionado aos desenvolvedores do projeto do que aos usuários. As mudanças maliciosas não foram incluídas no lançamento. O código malicioso se ativava durante a construção, carregava exploits para elevação de privilégios, configurava a inicialização automática através da chamada de seus processos a partir de scripts de inicialização e permitia controle remoto. servidorAlém disso, o componente malicioso instalado realizava buscas e enviava dados confidenciais, como tokens de acesso, perfis de navegadores e chaves de carteiras de criptomoedas.
Fonte: opennet.ru
