
Octoscan est un scanner statique de vulnérabilités pour les workflows GitHub Actions.
Octoscan est un scanner de vulnérabilités statique pour les workflows GitHub Actions.
$ go mod tidy
$ go build
Ou avec docker :
$ docker pull ghcr.io/synacktiv/octoscan:latest
Octoscan peut être exécuté sur un dépôt git local ou vous pouvez télécharger tous les workflows avec l'action dl :
$ octoscan dl -h
Octoscan.
Usage:
octoscan dl [options] --org <org> [--repo <repo> --token <pat> --default-branch --max-branches <num> --path <path> --output-dir <dir> --include-archives]
Options:
-h, --help Show help
-d, --debug Debug output
--verbose Verbose output
--org <org> Organizations to target
--repo <repo> Repository to target
--token <pat> GHP to authenticate to GitHub
--default-branch Only download workflows from the default branch
--max-branches <num> Limit the number of branches to download
--path <path> GitHub file path to download [default: .github/workflows]
--output-dir <dir> Output dir where to download files [default: octoscan-output]
--include-archives Also download archived repositories
./octoscan dl --token ghp_<token> --org apache --repo incubator-answer
Si vous ne savez pas quoi exécuter, lancez simplement ceci :
./octoscan scan path/to/repos/ --disable-rules shellcheck,local-action --filter-triggers external
Cela réduira les faux positifs et donnera les résultats les plus intéressants.
Si vous avez téléchargé les workflows avec la commande dl, vous pouvez avoir des workflows en double, car par défaut octoscan télécharge tous les workflows de toutes les branches. Pour supprimer les workflows en double et accélérer l'analyse, vous pouvez utiliser la commande fdupes avant de lancer l'analyse :
fdupes -n -r -N -d path/to/repo
$ octoscan scan -h
octoscan
Usage:
octoscan scan [options] --list-rules
octoscan scan [options] <target>
octoscan scan [options] <target> [--debug-rules --filter-triggers=<triggers> --filter-run --ignore=<pattern> ((--disable-rules | --enable-rules ) <rules>) --config-file <config>]
Options:
-h, --help
-v, --version
-d, --debug
--verbose
--format <format> Output format, json, sarif or custom template to format error messages in Go template syntax. See https://github.com/rhysd/actionlint/tree/main/docs/usage.md#format
--oneline Use one line per one error. Useful for reading error messages from programs
Args:
<target> Target File or directory to scan
--filter-triggers <triggers> Scan workflows with specific triggers (comma separated list: "push,pull_request_target" or pre-configured: external/allnopr)
--filter-run Search for expression injection only in run shell scripts.
--ignore <pattern> Regular expression matching to error messages you want to ignore.
--disable-rules <rules> Disable specific rules. Split on ","
--enable-rules <rules> Enable specific rules, this will disable all other rules. Split on ","
--debug-rules Enable debug rules.
--config-file <config> Config file.
Examples:
$ octoscan scan ci.yml --disable-rules shellcheck,local-action --filter-triggers external
Cet outil peut également être utilisé directement comme GitHub Action pour analyser votre dépôt lors des événements push/pull_request. Pour plus d'informations, veuillez consulter ce dépôt.
La liste complète des règles peut être obtenue avec cette commande :
$ octoscan scan --list-rules
2024/08/07 16:50:48 [INFO] Available rules
- shellcheck
Checks for shell script sources in "run:" using shellcheck
- credentials
Checks for credentials in "services:" configuration
- dangerous-action
Check for dangerous actions.
- dangerous-checkout
Check for dangerous checkout.
- expression-injection
Check for expression injection.
- dangerous-write
Check for dangerous write operation on $GITHUB_OUTPUT or $GITHUB_ENV.
- local-action
Check for local actions.
- runner-label
Checks for GitHub-hosted and preset self-hosted runner labels in "runs-on:"
- unsecure-commands
Check 'ACTIONS_ALLOW_UNSECURE_COMMANDS' env variable.
- known-vulnerability
Check for known vulnerabilities.
- bot-check
Check for if statements that are based on a bot identity.
- dangerous-artefact
Check for workflow that upload artefacts containing sensitive files.
- debug-external-trigger
Check for workflow that can be externally triggered.
- debug-artefacts
Check for workflow that upload artefacts.
- debug-js-exec
Check for workflow that execute system commands in JS scripts.
- debug-oidc-action
Check for OIDC actions.
- repo-jacking
Verify that external actions are pointing to a valid GitHub user or organization.
Les déclencheurs comme workflow_run ou pull_request_target s'exécutent dans un contexte privilégié, car ils ont accès en lecture aux secrets et peuvent potentiellement avoir un accès en écriture sur le dépôt ciblé. Effectuer un checkout explicite du code non fiable entraînera le téléchargement du code de l'attaquant dans ce contexte.

Cette règle avertit l'utilisateur si une action dangereuse est utilisée. Elle est principalement axée sur les artefacts non fiables.