
Framework d'analyse statique de flux de données (taint analysis) par étapes pour les workflows GitHub Actions. Détecte les vulnérabilités d'injection de code en utilisant le suivi de flux (taint-tracking) et un classifieur d'impact, produisant des rapports SARIF pour la sécurité CI/CD.
Ce dépôt contient le code de notre article USENIX Security '23 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus est un outil d'analyse de sécurité complet spécialement conçu pour GitHub Actions. Construit dans le but d'améliorer la sécurité des workflows CI/CD, Argus utilise des techniques de suivi de flux (taint-tracking) et un classificateur d'impact pour détecter les vulnérabilités potentielles dans les workflows GitHub Actions.
Visitez notre site web - secureci.org pour plus d'informations.
Taint-Tracking : Argus utilise des algorithmes sophistiqués pour suivre le flux de données potentiellement non fiables depuis des sources spécifiques jusqu'à des sinks critiques pour la sécurité dans les workflows GitHub Actions. Cela permet d'identifier les vulnérabilités qui pourraient conduire à des attaques par injection de code.
Classificateur d'impact : Argus classe les vulnérabilités identifiées en classes de sévérité Haute, Moyenne et Basse, offrant une meilleure compréhension de l'impact potentiel de chaque vulnérabilité identifiée. Ceci est crucial pour prioriser les efforts de correction.
Ce script Python fournit une interface en ligne de commande pour interagir avec les dépôts GitHub et les actions 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 : Le mode de fonctionnement. Choisissez entre 'repo' ou 'action'. Ce paramètre est obligatoire.--url : L'URL GitHub. Utilisez USERNAME:TOKEN@URL pour les dépôts privés. Ce paramètre est obligatoire.--output-folder : Le dossier de sortie. La valeur par défaut est '/tmp'. Ce paramètre est facultatif.--config : Le fichier de configuration. Ce paramètre est facultatif.--verbose : Mode verbeux. Si cette option est fournie, le niveau de journalisation est défini sur DEBUG. Sinon, il est défini sur INFO. Ce paramètre est facultatif.--branch : Le nom de la branche. Vous devez fournir exactement un des paramètres : --branch, --commit, --tag. Ce paramètre est facultatif.--commit : Le hash du commit. Vous devez fournir exactement un des paramètres : --branch, , . Ce paramètre est facultatif.Pour utiliser ce script afin d'interagir avec un dépôt GitHub, vous pouvez exécuter une commande comme suit :
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Cela exécuterait le script en mode repo sur la branche master du dépôt spécifié.
Argus peut être exécuté dans un conteneur Docker. Pour ce faire, suivez les étapes :
resultsVous pouvez visualiser les résultats SARIF soit via un visualiseur en ligne, soit avec une extension Visual Studio Code (VSCode).
Visualiseur en ligne : Le SARIF Web Viewer est un outil en ligne qui vous permet de visualiser les fichiers SARIF. Vous pouvez télécharger votre fichier SARIF (argus_report.sarif) directement sur le site pour voir les résultats.
Extension VSCode : Si vous préférez utiliser VSCode, vous pouvez installer l'extension SARIF Viewer. Après avoir installé l'extension, vous pouvez ouvrir votre fichier SARIF (argus_report.sarif) dans VSCode. Les résultats apparaîtront dans le volet SARIF Explorer, qui offre une vue détaillée et navigable des résultats.
N'oubliez pas de manipuler le fichier SARIF avec précaution, surtout s'il contient des informations sensibles provenant de votre base de code.
Si un problème survient concernant l'autorisation GitHub nécessaire pour l'exécution, vous pouvez fournir username:TOKEN dans la variable d'environnement GITHUB_CREDS. Celle-ci sera utilisée pour toutes les requêtes faites à GitHub. Notez que nous ne stockons ces informations nulle part et ne créons rien sur le compte GitHub - nous les utilisons uniquement pour cloner les dépôts.
Argus est un projet open-source, et nous accueillons les contributions de la communauté. Que ce soit pour signaler un bug, suggérer une fonctionnalité ou écrire du code, vos contributions sont toujours les bienvenues !
Si vous utilisez Argus dans vos recherches, veuillez citer notre article :
@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 sous licence GPL.
--commit--tag--tag : Le tag. Vous devez fournir exactement un des paramètres : --branch, --commit, --tag. Ce paramètre est facultatif.--action-path : Le chemin (relatif) vers l'action. Vous ne pouvez pas fournir --action-path en mode repo. Ce paramètre est facultatif.--workflow-path : Le chemin (relatif) vers le workflow. Vous ne pouvez pas fournir --workflow-path en mode action. Ce paramètre est facultatif.