Skip to content

Fuzz Testing

Fuzz Testing #102

Workflow file for this run

name: Fuzz Testing
on:
schedule:
- cron: '0 3 * * *' # 3 AM UTC daily
workflow_dispatch: {}
permissions:
contents: read
jobs:
fuzz:
name: "Fuzz ${{ matrix.target }}"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- fuzz_yaml_manifest
- fuzz_check_loader
- fuzz_cel_eval
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Install Rust nightly
uses: dtolnay/rust-toolchain@5b842231ba77f5c045dba54ac5560fed2db780e2 # nightly
- name: Install cargo-fuzz
run: cargo install cargo-fuzz --locked
- name: Cache fuzz corpus
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: fuzz/corpus/${{ matrix.target }}
key: fuzz-corpus-${{ matrix.target }}-${{ github.sha }}
restore-keys: |
fuzz-corpus-${{ matrix.target }}-
- name: Run fuzzer
working-directory: fuzz
env:
FUZZ_TARGET: ${{ matrix.target }}
# Dummy credentials so manifest fuzzer can explore deeper paths
GITHUB_TOKEN: fuzz_tok
GITHUB_ORG: fuzz_org
OKTA_API_TOKEN: fuzz_tok
OKTA_DOMAIN: fuzz.okta.com
AWS_ACCESS_KEY_ID: AKIAFUZZ
AWS_SECRET_ACCESS_KEY: fuzz_secret
AWS_REGION: us-east-1
AZURE_CLIENT_ID: fuzz_client
AZURE_CLIENT_SECRET: fuzz_secret
AZURE_TENANT_ID: fuzz_tenant
AZURE_SUBSCRIPTION_ID: fuzz_sub
run: |
# Validate target name against allowlist to prevent injection
case "$FUZZ_TARGET" in
fuzz_yaml_manifest|fuzz_check_loader|fuzz_cel_eval)
cargo +nightly fuzz run "$FUZZ_TARGET" -- -max_total_time=60
;;
*)
echo "::error::Unknown fuzz target: $FUZZ_TARGET"
exit 1
;;
esac
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: fuzz-crashes-${{ matrix.target }}
path: |
fuzz/artifacts/${{ matrix.target }}/
retention-days: 30