Les développeurs du système de gestion de contenu libre Plone, écrit en Python et JavaScript/NodeJS, ont annoncé un incident au cours duquel du code malveillant a été ajouté au dépôt git du projet sur GitHub. Initialement, trois modifications repérées le 7 janvier (1, 2, 3) ont été identifiées, ajoutant du code malveillant dans les fichiers JavaScript du projet (1, 2, 3). L'analyse de l'incident a révélé que l'intégration du code malveillant avait été réalisée suite à la compromission du compte d'un des développeurs, dont le jeton d'accès avait été capturé par des cybercriminels après le lancement d'un logiciel malveillant sur son système.
Le 14 janvier, le compte compromis a été bloqué et il a été recommandé aux développeurs du projet d'analyser les commits du 1er au 14 janvier. Le 27 janvier, il a été découvert que les commits remarqués ne constituaient pas la limite et que l'attaque avait touché cinq dépôts du projet (plone/volto, plone/mockup, plone/plone.app.mosaic, plone/critical-css-cli, plone/plonetheme.barceloneta), dans lesquels le code malveillant avait été intégrés discrètement. Dans le cas du dépôt plone.app.mosaic, les attaquants ont réussi à remplacer la branche master. L'attaque a eu lieu deux mois après la capture du jeton d'accès du développeur.
Pour intégrer les modifications au lieu des commits habituels, les attaquants ont utilisé l'opération « force push » (git push avec l'option « --force »), permettant de remplacer de manière forcée la branche dans le dépôt distant par leur contenu et, par conséquent, de réécrire l'historique des modifications (une fois remplacé, l'historique montre celui de la branche chargée par l'attaquant). Pour prévenir ce type de substitution de branches à l'avenir, les développeurs de Plone ont mis en place sur GitHub des règles bloquant les opérations « force push » pour les branches principales et les tags.
Dans le dépôt plone.app.mosaic, pour rendre la détection de compromission plus difficile, les attaquants ont inséré un commit malveillant dans la branche master, ayant une date fictive — 18 décembre, pensant que la recherche de code malveillant se concentrerait sur les modifications ajoutées après leur première activité dans le dépôt. Le changement malveillant était présenté dans le commit falsifié comme le début du développement d'une nouvelle version de test, mais en plus du changement de numéro de version dans les métadonnées (de 4.0.0a1 à 4.0.0a2.dev0), du code malveillant a été ajouté dans le fichier JavaScript appelé lors de la phase de compilation prettier.config.js. Pour dissimuler le changement lors de son affichage dans le terminal, le code a été ajouté sur une seule ligne avec une opération légitime et décalé hors de la zone visible à l'aide d'espaces. Dans l'interface GitHub, ce code n'était également pas affiché par défaut et nécessitait de cliquer sur le bouton « Charger la différence ».

L'attaque était davantage ciblée sur les développeurs du projet que sur les utilisateurs. Les changements malveillants n'ont pas été inclus dans la sortie. Le code malveillant s'activait lors de la compilation, téléchargeait des exploits pour élever les privilèges, paramétrait l'automatisation par l'appel de ses processus à partir des scripts de démarrage et permettait un contrôle à distance. serveurDe plus, le composant malveillant installé recherchait et envoyait des données sensibles, telles que des jetons d'accès, des profils de navigateurs et des clés de portefeuilles cryptographiques.
Source : opennet.ru
