Los desarrolladores del sistema de gestión de contenido de código abierto Plone, escrito en Python y JavaScript/NodeJS, han anunciado un incidente en el que se añadió código malicioso al repositorio git del proyecto en GitHub. Inicialmente, se detectaron tres cambios realizados el 7 de enero (1, 2, 3), que incorporaron código malicioso en los archivos JavaScript del proyecto (1, 2, 3). El análisis del incidente reveló que la integración del código malicioso se produjo debido a la compromisión de la cuenta de uno de los desarrolladores, cuyo token de acceso fue capturado por los atacantes tras ejecutar malware en su sistema.
El 14 de enero, la cuenta comprometida fue bloqueada, y se recomendó a los desarrolladores del proyecto analizar los commits del 1 al 14 de enero. El 27 de enero, se descubrió que los commits observados no eran los únicos implicados y que el ataque afectó a cinco repositorios del proyecto (plone/volto, plone/mockup, plone/plone.app.mosaic, plone/critical-css-cli, plone/plonetheme.barceloneta), en los que se integró silenciosamente código malicioso. En el caso del repositorio plone.app.mosaic, los atacantes lograron sustituir la rama master. El ataque se llevó a cabo dos meses después de la captura del token de acceso del desarrollador.
Para integrar los cambios en lugar de realizar commits normales, los atacantes utilizaron la operación 'force push' (git push con la opción '--force'), que permite reemplazar forzosamente la rama en un repositorio externo con su contenido y, en consecuencia, reescribir el historial de cambios (tras la sustitución, se muestra el historial de la rama cargada por el atacante). Para evitar sustituciones de ramas como esta en el futuro, los desarrolladores de Plone implementaron en GitHub reglas que bloquean las operaciones de 'force push' para las ramas y etiquetas principales.
En el repositorio de plone.app.mosaic, los atacantes insertaron un commit malicioso en la rama master para dificultar la detección de la compromisión, utilizando una fecha ficticia: 18 de diciembre. Creían que el ámbito de búsqueda del código malicioso se centraría en los cambios añadidos después de su primera actividad en el repositorio. El cambio malicioso se presentaba en el commit como el inicio del desarrollo de una nueva versión de prueba, pero además de cambiar el número de versión en los metadatos (de 4.0.0a1 a 4.0.0a2.dev0), se añadió código malicioso en el archivo javascript llamado prettier.config.js que se invocaba en la etapa de construcción. Para ocultar la visualización del cambio en la terminal, el código se añadió en una línea con una operación legítima y se desplazó fuera del área visible usando espacios. En la interfaz de GitHub, este código tampoco se mostraba por defecto y requería pulsar el botón 'Load Diff'.

El ataque estuvo más dirigido a los desarrolladores del proyecto que a los usuarios. Los cambios maliciosos no formaron parte del lanzamiento. El código malicioso se activaba durante la construcción, cargaba exploits para elevar privilegios, configuraba el arranque automático a través de la invocación de sus propios procesos desde scripts de inicio y permitía el control remoto. el servidorAdemás de esto, el componente malicioso instalado buscaba y enviaba información confidencial, como tokens de acceso, perfiles de navegadores y claves de criptocarteras.
Fuente: opennet.ru
