Resumen

  • El compromiso del cargador de Bash de Codecov en 2021 se convirtió en una prueba de responsabilidad por secretos de CI porque la actualización de seguridad de Codecov indicó que un tercero modificó el cargador de Bash y pudo exportar variables de entorno e información remota de Git de los entornos de CI de los clientes.
  • El informe posterior de Codecov señaló que el atacante extrajo una clave HMAC para una cuenta de servicio de Google Cloud Storage desde una capa intermedia en una imagen Docker autogestionada pública y utilizó esa clave para modificar el cargador de Bash.
  • El problema de responsabilidad no es solo que los usuarios debieron verificar los checksums; Codecov controlaba la ruta de distribución del cargador, el proceso de construcción de la imagen Docker, la monitorización del script alojado y el plan de migración.
  • Los clientes controlaban qué secretos estaban disponibles, el método de carga, la validación de checksums y la rapidez para rotar credenciales; pero esos controles no eliminan la responsabilidad del proveedor sobre la integridad del script.
  • Este artículo trata la actualización de seguridad y el informe posterior de Codecov como fuentes primarias, las respuestas de los clientes como evidencia de primera mano, y la documentación de NIST, CISA, SLSA, Sigstore y CI como vocabulario de control técnico.

Por qué este caso pertenece a un expediente de riesgo y responsabilidad

Codecov pertenece a un expediente de riesgo y responsabilidad porque el compromiso del cargador de Bash de 2021 convirtió un paso rutinario de carga de cobertura en una posible vía de exposición de secretos de CI. La actualización de seguridad de Codecov del 15 de abril de 2021 indicó que la empresa supo el 1 de abril que alguien había obtenido acceso no autorizado al script del cargador de Bash y lo había modificado sin permiso. La empresa señaló que el actor obtuvo acceso debido a un error en el proceso de creación de imágenes Docker de Codecov que permitió la extracción de una credencial necesaria para modificar el cargador.

Codecov informó que desde el 31 de enero de 2021 hubo alteraciones periódicas no autorizadas que podrían exportar información almacenada en los entornos de integración continua de los clientes a un servidor externo fuera de la infraestructura de Codecov.

Este relato público agranda el caso más allá de un script de proveedor comprometido. El cargador de Bash se ejecutaba dentro de los trabajos de CI de los clientes, a menudo después de las pruebas y antes de cargar los datos de cobertura. Los trabajos de CI pueden contener URL de repositorios, metadatos de compilación, tokens de despliegue, credenciales de publicación de paquetes, credenciales en la nube, claves de firma, URL de bases de datos, secretos de webhook y tokens de acceso personal.

Una pequeña adición maliciosa a un cargador puede convertirse en un punto de recolección de credenciales porque los clientes intencionalmente colocan confianza y secretos en CI.

El informe posterior de Codecov (https://about.codecov.io/apr-2021-post-mortem/) afiló la historia de control. Indicó que el actor de amenazas apuntó al cargador de Bash y lo utilizó para entregar una carga maliciosa a los usuarios que empleaban el cargador de Bash, la acción de GitHub de Codecov, el Orb de CircleCI de Codecov y el Step de Bitrise de Codecov. Dijo que el atacante extrajo una clave HMAC para una cuenta de servicio de Google Cloud Storage de una capa intermedia en una imagen Docker autogestionada pública y usó esa clave para modificar el cargador de Bash.

También señaló que un cliente detectó el incidente al realizar una verificación SHASUM y notar una discrepancia entre el hash informado en GitHub y el hash calculado para el cargador descargado.

Estos hechos sitúan la responsabilidad en un sistema compartido pero desigual. Codecov controlaba el cargador alojado, la ruta de escritura de Google Cloud Storage, el proceso de construcción de la imagen Docker, la rotación de claves posterior al incidente, la notificación al cliente y la transición hacia un nuevo cargador. Los clientes controlaban qué variables de CI estaban presentes cuando se ejecutaba el cargador, si obtenían el script en vivo, si realizaban validación de checksums y la rapidez con que rotaban los secretos expuestos.

Los proveedores de CI controlaban partes del enmascaramiento de secretos, el aislamiento de trabajos y el registro. Los usuarios posteriores asumían el riesgo si las credenciales expuestas permitían acceso posterior a sistemas o código. La pregunta práctica es si cada parte tenía suficiente evidencia para actuar a tiempo.

El evento encaja en la economía de herramientas para desarrolladores porque la propuesta de valor de Codecov era la generación de informes de cobertura de baja fricción en múltiples sistemas de CI. El repositorio archivado del cargador de Bash de Codecov (https://github.com/codecov/codecov-bash) muestra el patrón de conveniencia directamente: los clientes podían obtener y ejecutar un script remoto, usar el mismo cargador en muchos proveedores de CI y opcionalmente verificar SHASUMs. La conveniencia era el motor de adopción.

Pero cuando el script remoto de confianza se volvió mutable desde una ruta controlada por el atacante, el costo oculto apareció como inventario de emergencia de credenciales, rotación, revisión de repositorio, notificación al cliente y respuesta a incidentes.

Nota: Esta es una traducción parcial del artículo completo para fines de demostración.