
Octoscan es un escáner estático de vulnerabilidades para flujos de trabajo de GitHub Actions.
Octoscan es un escáner estático de vulnerabilidades para flujos de trabajo de GitHub Actions.
$ go mod tidy
$ go build
O con docker:
$ docker pull ghcr.io/synacktiv/octoscan:latest
Octoscan se puede ejecutar contra un repositorio git local, o puedes descargar todos los flujos de trabajo con la acción 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 no sabes qué ejecutar, simplemente ejecuta esto:
./octoscan scan path/to/repos/ --disable-rules shellcheck,local-action --filter-triggers external
Reducirá los falsos positivos y dará los resultados más interesantes.
Si has descargado los flujos de trabajo con el comando dl, es posible que tengas flujos de trabajo duplicados, ya que por defecto octoscan descarga todos los flujos de trabajo de todas las ramas. Para eliminar los flujos de trabajo duplicados y acelerar el análisis, puedes usar el comando fdupes antes de ejecutar el análisis:
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
Esta herramienta también se puede usar directamente como una GitHub action para escanear tu repositorio en eventos de push/pull_request. Para más información, consulta este repositorio.
La lista completa de reglas se puede encontrar con este comando:
$ 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.
Disparadores como workflow_run o pull_request_target se ejecutan en un contexto privilegiado, ya que tienen acceso de lectura a los secretos y potencialmente acceso de escritura sobre el repositorio objetivo. Realizar un checkout explícito del código no confiable hará que el código del atacante se descargue en dicho contexto.

Esta regla advierte al usuario si se usa una acción peligrosa. Se centra principalmente en artefactos no confiables.
Es una práctica común usar artefactos para pasar datos entre diferentes flujos de trabajo. Esto se encuentra a menudo con el disparador workflow_run, donde el flujo de trabajo desencadenante prepara algunos datos que luego se envían al flujo de trabajo desencadenado. Dada la naturaleza no confiable de estos datos de artefactos, es crucial tratarlos con precaución y reconocerlos como una amenaza potencial. La vulnerabilidad surge del hecho de que entidades externas, como actores maliciosos, pueden influir en el contenido de los datos del artefacto.