Se han revelado vulnerabilidades en los controladores de GitHub Actions, que se invocan automáticamente al enviar solicitudes de extracción al repositorio de paquetes Nixpkgs, utilizado en la distribución NixOS y el ecosistema del gestor de paquetes Nix. La vulnerabilidad permitió a un usuario no autorizado extraer un token que otorga acceso de lectura y escritura al código fuente de todos los paquetes alojados en Nixpkgs. Este token permitió la modificación directa de cualquier paquete a través del repositorio Git del proyecto, omitiendo los procesos de revisión y aprobación.
La capacidad de comprometer Nixpkgs e inyectar código personalizado en cualquier paquete fue demostrada por investigadores de seguridad el pasado octubre en la conferencia NixCon, y se implementó de inmediato en la infraestructura del proyecto. Sin embargo, los detalles del ataque no se revelaron hasta un año después. El problema estaba relacionado con el uso de los controladores de GitHub Actions en el repositorio de GitHub de Nixpkgs, que están vinculados al evento "pull_request_target" y realizan comprobaciones automáticas al recibir nuevas solicitudes de extracción.
A diferencia del evento "pull_request", los controladores en "pull_request_target" tienen acceso de lectura y escritura al entorno de compilación, lo que requiere especial cuidado al trabajar con los datos pasados en una solicitud de extracción. Uno de los controladores vinculados a "pull_request_target" validó el archivo "OWNERS" proporcionado en la solicitud de extracción compilando y llamando a la utilidad codeowners-validator: pasos: — usos: acciones/checkout@eef61447b9ff4aafe5dcd4e0bbf con: ref: refs/pull/$/merge ruta: pr — ejecutar: nix-build base/ci -A codeownersValidator — ejecutar: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
El problema radicaba en que, si el archivo OWNERS tenía un formato incorrecto, la utilidad codeowners-validator mostraba el contenido de la cadena malformada en el registro estándar, de acceso público. El ataque consistía en colocar un enlace simbólico llamado OWNERS en la solicitud de extracción, que apuntaba al archivo ".credentials", que almacena las credenciales en el entorno de compilación. Por consiguiente, al procesar este archivo se producía un error y la primera línea, que contenía el token de acceso al repositorio, se mostraba en el registro público.

Además, se encontró otra vulnerabilidad en el controlador que verifica las reglas de editorconfig. pasos: — nombre: Obtener la lista de archivos modificados de PR ejecutar: gh api […] | jq [ … ] > «$HOME/changed_files» — usos: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 con: ref: refs/pull/$/merge — nombre: Verificando EditorConfig ejecutar: cat «$HOME/changed_files» | xargs -r editorconfig-checker
En este caso, el problema residía en el uso de la utilidad "xargs" para ejecutar editorconfig-checker con cada archivo de la solicitud de extracción. Dado que los nombres de archivo no se validaban, un atacante podría incluir un archivo con caracteres especiales en la solicitud de extracción, que se procesarían como argumentos de la línea de comandos al ejecutar editorconfig-checker. Por ejemplo, al crear un archivo "--help", editorconfig-checker mostraría una pista sobre las opciones disponibles.
Fuente: opennet.ru
