GitHub: Octoscan Static Vuln Scanner
There's also another interesting tool we've found worth mentioning, and it is Octoscan.
It has two commands, dl (download) and scan. Let's start with the first one:
wanderer@trg ~ $ octoscan dl --org theredguild --repo devsecops-toolkit --token github_pat_11AABCCDDEE13802849209HD09283CDFFF
If you check your current working directory, you'll see an output folder, where it as inclided for the target repo all the branches' workflows to be analyzed locally.
wanderer@trg octoscan-output/DevSecOps-toolkit $ ls
ci-moar-space os-motd
develop os-pipx-path-and-shell-prompt
docker-compose readme-docs-1
dockerfile-gosu readme-todo-list
dockerfile-merge-runs tool-2ms-and-zsh
docs-create-howto tool-dockle
docs-readme-motd tool-hadolint-kics
gha-tests tool-semgrep-and-reorder
main tools-clair
misc-dockerfile-make-docs tools-fixes-1
misc-dockerfile-readme-1 tools-fixes-2
misc-hostname-motd tools-scoutsuite-checkov-pmapper
multi-dockerfile-readme tools-versions
multi-tools-pipx-git-asdf-npm workshop-minimal
multi-tools-snyk-grype-and-more
In our case, I know the workflow for each branch is almost the same, except for a few. In order to reduce redundancy, you can delete duplicated workflows by using the fdupes command first.
fdupes -n -r -N -d path/to/repo
Now, you can then run a scan directly to the output. Note that if you already have the repository locally, there's no need to download it like we did.
wanderer@trg ~ $ octoscan scan octoscan-output/theredguild/DevSecOps-toolkit
octoscan-output/theredguild/DevSecOps-toolkit/ci-moar-space/.github/workflows/test-tools.yml:47:27: Expression injection, "steps.**.outputs.**" is potentially untrusted. [expression-injection]
|
47 | build-args: ${{ steps.dotenv.outputs.vars }}
| ^~~~~~~~~~~~~~~~~~~~~~~~~
You can check all the rules being used by running octoscan scan --list-rules, so you may disable the ones you don't need with --disable rules. Their documentation suggests to use this command as a first one when you don't know where to start:
octoscan scan path/to/repos/ --disable-rules shellcheck,local-action --filter-triggers external
The README from Octoscan provides a great explanation with real examples from each of the rules it uses.
There is also a great guide by the Security Lab at GitHub in order to prevent what they call pwn requests.
If you want to add an action that proportionates a wide range of security measures, you can start by installing HardenRunner. It provides runtime security for GitHub-hosted and self-hosted runners:
- name: Harden-Runner
uses: step-security/[email protected]