
Framework de análisis estático de propagación de datos (taint analysis) por etapas para flujos de trabajo de GitHub Actions. Detecta vulnerabilidades de inyección de código mediante el rastreo de datos contaminados (taint-tracking) y un clasificador de impacto, generando informes SARIF para la seguridad de CI/CD.
Este repositorio contiene el código de nuestro artículo de USENIX Security '23 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus es una herramienta integral de análisis de seguridad diseñada específicamente para GitHub Actions. Construido con el objetivo de mejorar la seguridad de los flujos de trabajo CI/CD, Argus utiliza técnicas de rastreo de flujo de datos (taint-tracking) y un clasificador de impacto para detectar vulnerabilidades potenciales en los flujos de trabajo de GitHub Actions.
Visita nuestro sitio web - secureci.org para más información.
Rastreo de flujo de datos (Taint-Tracking): Argus utiliza algoritmos sofisticados para rastrear el flujo de datos potencialmente no confiables desde fuentes específicas hasta destinos críticos de seguridad dentro de los flujos de trabajo de GitHub Actions. Esto permite la identificación de vulnerabilidades que podrían conducir a ataques de inyección de código.
Clasificador de Impacto: Argus clasifica las vulnerabilidades identificadas en clases de gravedad Alta, Media y Baja, proporcionando una comprensión más clara del impacto potencial de cada vulnerabilidad identificada. Esto es crucial para priorizar los esfuerzos de mitigación.
Este script de Python proporciona una interfaz de línea de comandos para interactuar con repositorios de GitHub y acciones de GitHub.
python argus.py --mode [mode] --url [url] [--output-folder path_to_output] [--config path_to_config] [--verbose] [--branch branch_name] [--commit commit_hash] [--tag tag_name] [--action-path path_to_action] [--workflow-path path_to_workflow]
--mode: El modo de operación. Elija 'repo' o 'action'. Este parámetro es obligatorio.--url: La URL de GitHub. Use USERNAME:TOKEN@URL para repositorios privados. Este parámetro es obligatorio.--output-folder: La carpeta de salida. El valor predeterminado es '/tmp'. Este parámetro es opcional.--config: El archivo de configuración. Este parámetro es opcional.--verbose: Modo verbose. Si se proporciona esta opción, el nivel de registro se establece en DEBUG. De lo contrario, se establece en INFO. Este parámetro es opcional.--branch: El nombre de la rama. Debe proporcionar exactamente uno de: --branch, --commit, --tag. Este parámetro es opcional.--commit: El hash del commit. Debe proporcionar exactamente uno de: --branch, , . Este parámetro es opcional.Para usar este script e interactuar con un repositorio de GitHub, puede ejecutar un comando como el siguiente:
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Esto ejecutaría el script en modo repo en la rama master del repositorio especificado.
Argus se puede ejecutar dentro de un contenedor Docker. Para hacerlo, siga los pasos:
resultsPuede ver los resultados SARIF a través de un visor en línea o con una extensión de Visual Studio Code (VSCode).
Visor en línea: El Visor Web SARIF es una herramienta en línea que permite visualizar archivos SARIF. Puede cargar su archivo SARIF (argus_report.sarif) directamente en el sitio web para ver los resultados.
Extensión de VSCode: Si prefiere usar VSCode, puede instalar la extensión SARIF Viewer. Después de instalar la extensión, puede abrir su archivo SARIF (argus_report.sarif) en VSCode. Los resultados aparecerán en el panel SARIF Explorer, que proporciona una vista detallada y navegable de los resultados.
Recuerde manejar el archivo SARIF con cuidado, especialmente si contiene información sensible de su código.
Si hay un problema con la necesidad de autorización de GitHub para ejecutarse, puede proporcionar username:TOKEN en la variable de entorno GITHUB_CREDS. Esto se utilizará para todas las solicitudes realizadas a GitHub. Tenga en cuenta que no almacenamos esta información en ningún lugar, ni creamos nada en la cuenta de GitHub; solo la usamos para clonar los repositorios.
Argus es un proyecto de código abierto y agradecemos las contribuciones de la comunidad. Ya sea reportando un error, sugiriendo una característica o escribiendo código, ¡siempre apreciamos sus contribuciones!
Si usa Argus en su investigación, por favor cite nuestro artículo:
@inproceedings{muralee2023Argus,
title={ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions},
author={S. Muralee, I. Koishybayev, A. Nahapetyan, G. Tystahl, B. Reaves, A. Bianchi, W. Enck,
A. Kapravelos, A. Machiry},
booktitle={32st USENIX Security Symposium (USENIX Security 23)},
year={2023},
}
Argus está licenciado bajo la Licencia GPL.
--commit--tag--tag: La etiqueta. Debe proporcionar exactamente uno de: --branch, --commit, --tag. Este parámetro es opcional.--action-path: La ruta (relativa) a la acción. No puede proporcionar --action-path en modo repo. Este parámetro es opcional.--workflow-path: La ruta (relativa) al flujo de trabajo. No puede proporcionar --workflow-path en modo action. Este parámetro es opcional.