zizmor 1.2.2__tar.gz → 1.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of zizmor might be problematic. Click here for more details.
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/workflows/ci.yml +6 -4
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/workflows/pypi.yml +8 -8
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/workflows/site.yml +1 -1
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/workflows/zizmor.yml +2 -2
- {zizmor-1.2.2 → zizmor-1.3.1}/Cargo.lock +69 -25
- {zizmor-1.2.2 → zizmor-1.3.1}/Cargo.toml +16 -9
- {zizmor-1.2.2 → zizmor-1.3.1}/PKG-INFO +13 -3
- {zizmor-1.2.2 → zizmor-1.3.1}/README.md +12 -2
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/audits.md +63 -2
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/development.md +22 -7
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/release-notes.md +50 -1
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/trophies.md +94 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/trophies.txt +17 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/usage.md +1 -1
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/bot_conditions.rs +15 -10
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/mod.rs +39 -4
- zizmor-1.3.1/src/audit/overprovisioned_secrets.rs +117 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/template_injection.rs +14 -15
- {zizmor-1.2.2 → zizmor-1.3.1}/src/expr/expr.pest +1 -1
- {zizmor-1.2.2 → zizmor-1.3.1}/src/expr/mod.rs +167 -25
- {zizmor-1.2.2 → zizmor-1.3.1}/src/finding/mod.rs +118 -23
- {zizmor-1.2.2 → zizmor-1.3.1}/src/github_api.rs +1 -1
- {zizmor-1.2.2 → zizmor-1.3.1}/src/main.rs +17 -5
- {zizmor-1.2.2 → zizmor-1.3.1}/src/models.rs +9 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/registry.rs +2 -2
- {zizmor-1.2.2 → zizmor-1.3.1}/src/render.rs +31 -3
- {zizmor-1.2.2 → zizmor-1.3.1}/src/utils.rs +27 -24
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshot.rs +33 -16
- zizmor-1.3.1/tests/snapshots/snapshot__invalid_inputs.snap +17 -0
- zizmor-1.3.1/tests/snapshots/snapshot__overprovisioned_secrets.snap +22 -0
- zizmor-1.3.1/tests/snapshots/snapshot__ref_confusion-2.snap +5 -0
- zizmor-1.3.1/tests/snapshots/snapshot__ref_confusion.snap +13 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/artipacked/issue-447-repro.yml +1 -1
- zizmor-1.3.1/tests/test-data/invalid/invalid-workflow.yml +14 -0
- zizmor-1.3.1/tests/test-data/overprovisioned-secrets.yml +27 -0
- zizmor-1.3.1/tests/test-data/ref-confusion/issue-518-repro.yml +12 -0
- zizmor-1.3.1/tests/test-data/ref-confusion.yml +11 -0
- zizmor-1.2.2/src/finding/locate.rs +0 -59
- zizmor-1.2.2/tests/snapshots/snapshot__conflicting_online_options-2.snap +0 -10
- zizmor-1.2.2/tests/snapshots/snapshot__conflicting_online_options-3.snap +0 -10
- zizmor-1.2.2/tests/snapshots/snapshot__conflicting_online_options.snap +0 -10
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/dependabot.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/.github/workflows/release.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/.gitignore +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/CONTRIBUTING.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/LICENSE +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/Makefile +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/assets/favicon48x48.png +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/assets/rainbow.svg +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/assets/zizmor-demo.gif +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/configuration.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/index.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/installation.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/magiclink.css +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/quickstart.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/help.txt +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/render-sponsors.py +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/render-trophies.py +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/sponsors.html +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/snippets/sponsors.json +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/docs/trophy-case.md +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/mkdocs.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/pyproject.toml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/artipacked.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/cache_poisoning.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/dangerous_triggers.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/excessive_permissions.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/github_env.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/hardcoded_container_credentials.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/impostor_commit.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/insecure_commands.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/known_vulnerable_actions.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/ref_confusion.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/secrets_inherit.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/self_hosted_runner.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/unpinned_uses.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/audit/use_trusted_publishing.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/config.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/models/coordinate.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/models/uses.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/sarif.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/src/state.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/acceptance.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/common.rs +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__artipacked-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__artipacked-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__artipacked-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__artipacked.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__bot_conditions.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-10.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-11.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-12.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-13.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-14.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-5.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-6.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-7.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-8.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning-9.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cache_poisoning.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__cant_retrieve.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-10.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-11.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-12.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-5.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-6.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-7.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-8.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions-9.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__excessive_permissions.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__github_env-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__github_env-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__github_env.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__insecure_commands-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__insecure_commands-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__insecure_commands.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__secrets_inherit.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-5.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-6.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-7.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted-8.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__self_hosted.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-5.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-6.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-7.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection-8.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__template_injection.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__unpinned_uses-2.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__unpinned_uses-3.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__unpinned_uses-4.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/snapshots/snapshot__unpinned_uses.snap +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/artipacked.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/bot-conditions.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-disabled-by-default.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-enabled-by-default.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-not-configurable.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-opt-in-boolean-toggle.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-opt-in-boolish-toggle.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-opt-in-expression.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-opt-in-multi-value-toggle.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/caching-opt-out.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/issue-343-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/issue-378-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/no-cache-aware-steps.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/publisher-step.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/workflow-release-branch-trigger.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning/workflow-tag-trigger.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/cache-poisoning.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/issue-336-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/issue-472-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/jobs-broaden-permissions.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/reusable-workflow-call.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/reusable-workflow-other-triggers.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-default-perms-all-jobs-explicit.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-default-perms.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-empty-perms.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-read-all.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-write-all.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions/workflow-write-explicit.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/excessive-permissions.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/github-env/action.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/github-env/github-path.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/github-env/issue-397-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/github_env.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/hardcoded-credentials.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/inlined-ignores.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/insecure-commands/action.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/insecure-commands.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/secrets-inherit.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/issue-283-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/self-hosted-matrix-dimension.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/self-hosted-matrix-exclusion.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/self-hosted-matrix-inclusion.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/self-hosted-runner-group.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted/self-hosted-runner-label.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/self-hosted.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/issue-22-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/issue-339-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/issue-418-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/pr-317-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/pr-425-backstop/action.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/static-env.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/template-injection-dynamic-matrix.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection/template-injection-static-matrix.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/template-injection.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/unpinned-uses/action.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/unpinned-uses/issue-433-repro.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/unpinned-uses.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/tests/test-data/use-trusted-publishing.yml +0 -0
- {zizmor-1.2.2 → zizmor-1.3.1}/uv.lock +0 -0
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
- uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2
|
|
23
23
|
|
|
24
24
|
- name: Lint
|
|
25
|
-
run: cargo clippy -- -D warnings
|
|
25
|
+
run: cargo clippy -- -D warnings -D clippy::dbg_macro
|
|
26
26
|
|
|
27
27
|
test:
|
|
28
28
|
runs-on: ubuntu-latest
|
|
@@ -33,10 +33,12 @@ jobs:
|
|
|
33
33
|
|
|
34
34
|
- uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2
|
|
35
35
|
|
|
36
|
-
- uses: astral-sh/setup-uv@
|
|
36
|
+
- uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5.2.2
|
|
37
37
|
|
|
38
38
|
- name: Test
|
|
39
|
-
run: cargo test
|
|
39
|
+
run: cargo test --features online-tests
|
|
40
|
+
env:
|
|
41
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
40
42
|
|
|
41
43
|
- name: Test snippets
|
|
42
44
|
run: |
|
|
@@ -50,7 +52,7 @@ jobs:
|
|
|
50
52
|
with:
|
|
51
53
|
persist-credentials: false
|
|
52
54
|
|
|
53
|
-
- uses: astral-sh/setup-uv@
|
|
55
|
+
- uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5.2.2
|
|
54
56
|
|
|
55
57
|
- name: Test site
|
|
56
58
|
run: make site
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
- runner: ubuntu-24.04
|
|
24
24
|
target: x86
|
|
25
25
|
manylinux: auto
|
|
26
|
-
- runner: ubuntu-24.04
|
|
26
|
+
- runner: ubuntu-24.04
|
|
27
27
|
target: aarch64
|
|
28
28
|
manylinux: "2_24"
|
|
29
29
|
- runner: ubuntu-24.04
|
|
@@ -40,7 +40,7 @@ jobs:
|
|
|
40
40
|
with:
|
|
41
41
|
persist-credentials: false
|
|
42
42
|
- name: Build wheels
|
|
43
|
-
uses: PyO3/maturin-action@
|
|
43
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
44
44
|
with:
|
|
45
45
|
target: ${{ matrix.platform.target }}
|
|
46
46
|
args: --release --out dist
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
with:
|
|
71
71
|
persist-credentials: false
|
|
72
72
|
- name: Build wheels
|
|
73
|
-
uses: PyO3/maturin-action@
|
|
73
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
74
74
|
with:
|
|
75
75
|
target: ${{ matrix.platform.target }}
|
|
76
76
|
args: --release --out dist
|
|
@@ -96,7 +96,7 @@ jobs:
|
|
|
96
96
|
with:
|
|
97
97
|
persist-credentials: false
|
|
98
98
|
- name: Build wheels
|
|
99
|
-
uses: PyO3/maturin-action@
|
|
99
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
100
100
|
with:
|
|
101
101
|
target: ${{ matrix.platform.target }}
|
|
102
102
|
args: --release --out dist
|
|
@@ -121,7 +121,7 @@ jobs:
|
|
|
121
121
|
with:
|
|
122
122
|
persist-credentials: false
|
|
123
123
|
- name: Build wheels
|
|
124
|
-
uses: PyO3/maturin-action@
|
|
124
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
125
125
|
with:
|
|
126
126
|
target: ${{ matrix.platform.target }}
|
|
127
127
|
args: --release --out dist
|
|
@@ -139,7 +139,7 @@ jobs:
|
|
|
139
139
|
with:
|
|
140
140
|
persist-credentials: false
|
|
141
141
|
- name: Build sdist
|
|
142
|
-
uses: PyO3/maturin-action@
|
|
142
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
143
143
|
with:
|
|
144
144
|
command: sdist
|
|
145
145
|
args: --out dist
|
|
@@ -167,12 +167,12 @@ jobs:
|
|
|
167
167
|
steps:
|
|
168
168
|
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
|
|
169
169
|
- name: Generate artifact attestation
|
|
170
|
-
uses: actions/attest-build-provenance@
|
|
170
|
+
uses: actions/attest-build-provenance@520d128f165991a6c774bcb264f323e3d70747f4 # v2
|
|
171
171
|
with:
|
|
172
172
|
subject-path: 'wheels-*/*'
|
|
173
173
|
- name: Publish to PyPI
|
|
174
174
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
175
|
-
uses: PyO3/maturin-action@
|
|
175
|
+
uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
|
|
176
176
|
with:
|
|
177
177
|
command: upload
|
|
178
178
|
args: --non-interactive --skip-existing wheels-*/*
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
32
|
- name: Install the latest version of uv
|
|
33
|
-
uses: astral-sh/setup-uv@
|
|
33
|
+
uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5.2.2
|
|
34
34
|
|
|
35
35
|
- name: build site
|
|
36
36
|
run: make site
|
|
@@ -21,13 +21,13 @@ jobs:
|
|
|
21
21
|
with:
|
|
22
22
|
persist-credentials: false
|
|
23
23
|
- name: Install the latest version of uv
|
|
24
|
-
uses: astral-sh/setup-uv@
|
|
24
|
+
uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5.2.2
|
|
25
25
|
- name: Run zizmor 🌈
|
|
26
26
|
run: uvx zizmor --format sarif . > results.sarif
|
|
27
27
|
env:
|
|
28
28
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
29
29
|
- name: Upload SARIF file
|
|
30
|
-
uses: github/codeql-action/upload-sarif@
|
|
30
|
+
uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8
|
|
31
31
|
with:
|
|
32
32
|
sarif_file: results.sarif
|
|
33
33
|
category: zizmor
|
|
@@ -125,9 +125,9 @@ dependencies = [
|
|
|
125
125
|
|
|
126
126
|
[[package]]
|
|
127
127
|
name = "async-trait"
|
|
128
|
-
version = "0.1.
|
|
128
|
+
version = "0.1.86"
|
|
129
129
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
130
|
-
checksum = "
|
|
130
|
+
checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d"
|
|
131
131
|
dependencies = [
|
|
132
132
|
"proc-macro2",
|
|
133
133
|
"quote",
|
|
@@ -273,9 +273,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
|
273
273
|
|
|
274
274
|
[[package]]
|
|
275
275
|
name = "clap"
|
|
276
|
-
version = "4.5.
|
|
276
|
+
version = "4.5.27"
|
|
277
277
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
278
|
-
checksum = "
|
|
278
|
+
checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796"
|
|
279
279
|
dependencies = [
|
|
280
280
|
"clap_builder",
|
|
281
281
|
"clap_derive",
|
|
@@ -293,9 +293,9 @@ dependencies = [
|
|
|
293
293
|
|
|
294
294
|
[[package]]
|
|
295
295
|
name = "clap_builder"
|
|
296
|
-
version = "4.5.
|
|
296
|
+
version = "4.5.27"
|
|
297
297
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
298
|
-
checksum = "
|
|
298
|
+
checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
|
|
299
299
|
dependencies = [
|
|
300
300
|
"anstream",
|
|
301
301
|
"anstyle",
|
|
@@ -616,9 +616,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
|
|
616
616
|
|
|
617
617
|
[[package]]
|
|
618
618
|
name = "github-actions-models"
|
|
619
|
-
version = "0.
|
|
619
|
+
version = "0.25.0"
|
|
620
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
-
checksum = "
|
|
621
|
+
checksum = "d3d33cc977e9aaa73b0e447c5c387e1720dcdfbc54e7f86e32c76e2a78bfcb9c"
|
|
622
622
|
dependencies = [
|
|
623
623
|
"indexmap",
|
|
624
624
|
"serde",
|
|
@@ -660,9 +660,9 @@ dependencies = [
|
|
|
660
660
|
|
|
661
661
|
[[package]]
|
|
662
662
|
name = "http"
|
|
663
|
-
version = "1.
|
|
663
|
+
version = "1.2.0"
|
|
664
664
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
665
|
-
checksum = "
|
|
665
|
+
checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
|
|
666
666
|
dependencies = [
|
|
667
667
|
"bytes",
|
|
668
668
|
"fnv",
|
|
@@ -694,9 +694,9 @@ dependencies = [
|
|
|
694
694
|
|
|
695
695
|
[[package]]
|
|
696
696
|
name = "http-cache"
|
|
697
|
-
version = "0.20.
|
|
697
|
+
version = "0.20.1"
|
|
698
698
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
699
|
-
checksum = "
|
|
699
|
+
checksum = "7e883defacf53960c7717d9e928dc8667be9501d9f54e6a8b7703d7a30320e9c"
|
|
700
700
|
dependencies = [
|
|
701
701
|
"async-trait",
|
|
702
702
|
"bincode",
|
|
@@ -710,9 +710,9 @@ dependencies = [
|
|
|
710
710
|
|
|
711
711
|
[[package]]
|
|
712
712
|
name = "http-cache-reqwest"
|
|
713
|
-
version = "0.15.
|
|
713
|
+
version = "0.15.1"
|
|
714
714
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
715
|
-
checksum = "
|
|
715
|
+
checksum = "e076afd9d376f09073b515ce95071b29393687d98ed521948edb899195595ddf"
|
|
716
716
|
dependencies = [
|
|
717
717
|
"anyhow",
|
|
718
718
|
"async-trait",
|
|
@@ -972,9 +972,9 @@ dependencies = [
|
|
|
972
972
|
|
|
973
973
|
[[package]]
|
|
974
974
|
name = "indexmap"
|
|
975
|
-
version = "2.7.
|
|
975
|
+
version = "2.7.1"
|
|
976
976
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
977
|
-
checksum = "
|
|
977
|
+
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
|
|
978
978
|
dependencies = [
|
|
979
979
|
"equivalent",
|
|
980
980
|
"hashbrown",
|
|
@@ -983,9 +983,9 @@ dependencies = [
|
|
|
983
983
|
|
|
984
984
|
[[package]]
|
|
985
985
|
name = "indicatif"
|
|
986
|
-
version = "0.17.
|
|
986
|
+
version = "0.17.11"
|
|
987
987
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
988
|
-
checksum = "
|
|
988
|
+
checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
|
|
989
989
|
dependencies = [
|
|
990
990
|
"console",
|
|
991
991
|
"number_prefix",
|
|
@@ -997,13 +997,14 @@ dependencies = [
|
|
|
997
997
|
|
|
998
998
|
[[package]]
|
|
999
999
|
name = "insta"
|
|
1000
|
-
version = "1.42.
|
|
1000
|
+
version = "1.42.1"
|
|
1001
1001
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1002
|
-
checksum = "
|
|
1002
|
+
checksum = "71c1b125e30d93896b365e156c33dadfffab45ee8400afcbba4752f59de08a86"
|
|
1003
1003
|
dependencies = [
|
|
1004
1004
|
"console",
|
|
1005
1005
|
"linked-hash-map",
|
|
1006
1006
|
"once_cell",
|
|
1007
|
+
"pin-project",
|
|
1007
1008
|
"similar",
|
|
1008
1009
|
]
|
|
1009
1010
|
|
|
@@ -1072,6 +1073,16 @@ dependencies = [
|
|
|
1072
1073
|
"redox_syscall",
|
|
1073
1074
|
]
|
|
1074
1075
|
|
|
1076
|
+
[[package]]
|
|
1077
|
+
name = "line-index"
|
|
1078
|
+
version = "0.1.2"
|
|
1079
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1080
|
+
checksum = "3e27e0ed5a392a7f5ba0b3808a2afccff16c64933312c84b57618b49d1209bd2"
|
|
1081
|
+
dependencies = [
|
|
1082
|
+
"nohash-hasher",
|
|
1083
|
+
"text-size",
|
|
1084
|
+
]
|
|
1085
|
+
|
|
1075
1086
|
[[package]]
|
|
1076
1087
|
name = "linked-hash-map"
|
|
1077
1088
|
version = "0.5.6"
|
|
@@ -1176,6 +1187,12 @@ dependencies = [
|
|
|
1176
1187
|
"windows-sys 0.52.0",
|
|
1177
1188
|
]
|
|
1178
1189
|
|
|
1190
|
+
[[package]]
|
|
1191
|
+
name = "nohash-hasher"
|
|
1192
|
+
version = "0.2.0"
|
|
1193
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1194
|
+
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
|
|
1195
|
+
|
|
1179
1196
|
[[package]]
|
|
1180
1197
|
name = "nom"
|
|
1181
1198
|
version = "7.1.3"
|
|
@@ -1297,6 +1314,26 @@ dependencies = [
|
|
|
1297
1314
|
"sha2",
|
|
1298
1315
|
]
|
|
1299
1316
|
|
|
1317
|
+
[[package]]
|
|
1318
|
+
name = "pin-project"
|
|
1319
|
+
version = "1.1.8"
|
|
1320
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1321
|
+
checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916"
|
|
1322
|
+
dependencies = [
|
|
1323
|
+
"pin-project-internal",
|
|
1324
|
+
]
|
|
1325
|
+
|
|
1326
|
+
[[package]]
|
|
1327
|
+
name = "pin-project-internal"
|
|
1328
|
+
version = "1.1.8"
|
|
1329
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1330
|
+
checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb"
|
|
1331
|
+
dependencies = [
|
|
1332
|
+
"proc-macro2",
|
|
1333
|
+
"quote",
|
|
1334
|
+
"syn 2.0.90",
|
|
1335
|
+
]
|
|
1336
|
+
|
|
1300
1337
|
[[package]]
|
|
1301
1338
|
name = "pin-project-lite"
|
|
1302
1339
|
version = "0.2.15"
|
|
@@ -1766,9 +1803,9 @@ dependencies = [
|
|
|
1766
1803
|
|
|
1767
1804
|
[[package]]
|
|
1768
1805
|
name = "serde_json"
|
|
1769
|
-
version = "1.0.
|
|
1806
|
+
version = "1.0.138"
|
|
1770
1807
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1771
|
-
checksum = "
|
|
1808
|
+
checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949"
|
|
1772
1809
|
dependencies = [
|
|
1773
1810
|
"itoa",
|
|
1774
1811
|
"memchr",
|
|
@@ -2083,6 +2120,12 @@ version = "0.4.1"
|
|
|
2083
2120
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2084
2121
|
checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
|
|
2085
2122
|
|
|
2123
|
+
[[package]]
|
|
2124
|
+
name = "text-size"
|
|
2125
|
+
version = "1.1.1"
|
|
2126
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2127
|
+
checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
|
|
2128
|
+
|
|
2086
2129
|
[[package]]
|
|
2087
2130
|
name = "thiserror"
|
|
2088
2131
|
version = "1.0.69"
|
|
@@ -2332,9 +2375,9 @@ dependencies = [
|
|
|
2332
2375
|
|
|
2333
2376
|
[[package]]
|
|
2334
2377
|
name = "tracing-indicatif"
|
|
2335
|
-
version = "0.3.
|
|
2378
|
+
version = "0.3.9"
|
|
2336
2379
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2337
|
-
checksum = "
|
|
2380
|
+
checksum = "8201ca430e0cd893ef978226fd3516c06d9c494181c8bf4e5b32e30ed4b40aa1"
|
|
2338
2381
|
dependencies = [
|
|
2339
2382
|
"indicatif",
|
|
2340
2383
|
"tracing",
|
|
@@ -3108,7 +3151,7 @@ dependencies = [
|
|
|
3108
3151
|
|
|
3109
3152
|
[[package]]
|
|
3110
3153
|
name = "zizmor"
|
|
3111
|
-
version = "1.
|
|
3154
|
+
version = "1.3.1"
|
|
3112
3155
|
dependencies = [
|
|
3113
3156
|
"annotate-snippets",
|
|
3114
3157
|
"anstream",
|
|
@@ -3126,6 +3169,7 @@ dependencies = [
|
|
|
3126
3169
|
"indicatif",
|
|
3127
3170
|
"insta",
|
|
3128
3171
|
"itertools",
|
|
3172
|
+
"line-index",
|
|
3129
3173
|
"owo-colors",
|
|
3130
3174
|
"pest",
|
|
3131
3175
|
"pest_derive",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "zizmor"
|
|
3
3
|
description = "Static analysis for GitHub Actions"
|
|
4
|
-
version = "1.
|
|
4
|
+
version = "1.3.1"
|
|
5
5
|
edition = "2021"
|
|
6
6
|
repository = "https://github.com/woodruffw/zizmor"
|
|
7
7
|
homepage = "https://github.com/woodruffw/zizmor"
|
|
@@ -12,23 +12,30 @@ keywords = ["cli", "github-actions", "static-analysis", "security"]
|
|
|
12
12
|
categories = ["command-line-utilities"]
|
|
13
13
|
rust-version = "1.80.1"
|
|
14
14
|
|
|
15
|
+
[features]
|
|
16
|
+
# Test-only: enable online audits that make use of a GitHub token via GH_TOKEN.
|
|
17
|
+
gh-token-tests = []
|
|
18
|
+
# Test-only: enable all online audits.
|
|
19
|
+
online-tests = ["gh-token-tests"]
|
|
20
|
+
|
|
15
21
|
[dependencies]
|
|
16
22
|
annotate-snippets = "0.11.5"
|
|
17
23
|
anstream = "0.6.18"
|
|
18
24
|
anyhow = "1.0.95"
|
|
19
25
|
camino = { version = "1.1.9", features = ["serde1"] }
|
|
20
|
-
clap = { version = "4.5.
|
|
26
|
+
clap = { version = "4.5.27", features = ["derive", "env"] }
|
|
21
27
|
clap-verbosity-flag = { version = "3.0.2", features = [
|
|
22
28
|
"tracing",
|
|
23
29
|
], default-features = false }
|
|
24
30
|
etcetera = "0.8.0"
|
|
25
31
|
flate2 = "1.0.35"
|
|
26
|
-
github-actions-models = "0.
|
|
27
|
-
http-cache-reqwest = "0.15.
|
|
32
|
+
github-actions-models = "0.25.0"
|
|
33
|
+
http-cache-reqwest = "0.15.1"
|
|
28
34
|
human-panic = "2.0.1"
|
|
29
|
-
indexmap = "2.7.
|
|
30
|
-
indicatif = "0.17.
|
|
35
|
+
indexmap = "2.7.1"
|
|
36
|
+
indicatif = "0.17.11"
|
|
31
37
|
itertools = "0.14.0"
|
|
38
|
+
line-index = "0.1.2"
|
|
32
39
|
owo-colors = "4.1.0"
|
|
33
40
|
pest = "2.7.15"
|
|
34
41
|
pest_derive = "2.7.15"
|
|
@@ -41,7 +48,7 @@ reqwest = { version = "0.12.12", features = [
|
|
|
41
48
|
reqwest-middleware = "0.4.0"
|
|
42
49
|
serde = { version = "1.0.217", features = ["derive"] }
|
|
43
50
|
serde-sarif = "0.7.0"
|
|
44
|
-
serde_json = "1.0.
|
|
51
|
+
serde_json = "1.0.138"
|
|
45
52
|
serde_yaml = "0.9.34"
|
|
46
53
|
# TODO remove pending https://github.com/tree-sitter/tree-sitter/pull/4034
|
|
47
54
|
streaming-iterator = "0.1.9"
|
|
@@ -49,7 +56,7 @@ tar = "0.4.43"
|
|
|
49
56
|
terminal-link = "0.1.0"
|
|
50
57
|
tokio = { version = "1.43.0", features = ["rt-multi-thread"] }
|
|
51
58
|
tracing = "0.1.41"
|
|
52
|
-
tracing-indicatif = "0.3.
|
|
59
|
+
tracing-indicatif = "0.3.9"
|
|
53
60
|
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
|
|
54
61
|
tree-sitter = "0.24.7"
|
|
55
62
|
tree-sitter-bash = "0.23.3"
|
|
@@ -65,6 +72,6 @@ lto = true
|
|
|
65
72
|
|
|
66
73
|
[dev-dependencies]
|
|
67
74
|
assert_cmd = "2.0.16"
|
|
68
|
-
insta = { version = "1.42.
|
|
75
|
+
insta = { version = "1.42.1" }
|
|
69
76
|
pretty_assertions = "1.4.1"
|
|
70
77
|
serde_json_path = "0.7.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zizmor
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
License-File: LICENSE
|
|
5
5
|
Summary: Static analysis for GitHub Actions
|
|
6
6
|
Keywords: cli,github-actions,static-analysis,security
|
|
@@ -19,8 +19,18 @@ Project-URL: Source Code, https://github.com/woodruffw/zizmor
|
|
|
19
19
|
[](https://repology.org/project/zizmor/versions)
|
|
20
20
|
[](https://github.com/sponsors/woodruffw)
|
|
21
21
|
|
|
22
|
-
`zizmor` is a static analysis tool for GitHub Actions.
|
|
23
|
-
|
|
22
|
+
`zizmor` is a static analysis tool for GitHub Actions.
|
|
23
|
+
|
|
24
|
+
It can find many common security issues in typical GitHub Actions CI/CD setups,
|
|
25
|
+
including:
|
|
26
|
+
|
|
27
|
+
* Template injection vulnerabilities, leading to attacker-controlled code execution
|
|
28
|
+
* Accidental credential persistence and leakage
|
|
29
|
+
* Excessive permission scopes and credential grants to runners
|
|
30
|
+
* Impostor commits and confusable `git` references
|
|
31
|
+
* ...[and much more]!
|
|
32
|
+
|
|
33
|
+
[and much more]: https://woodruffw.github.io/zizmor/audits/
|
|
24
34
|
|
|
25
35
|

|
|
26
36
|
|
|
@@ -5,8 +5,18 @@
|
|
|
5
5
|
[](https://repology.org/project/zizmor/versions)
|
|
6
6
|
[](https://github.com/sponsors/woodruffw)
|
|
7
7
|
|
|
8
|
-
`zizmor` is a static analysis tool for GitHub Actions.
|
|
9
|
-
|
|
8
|
+
`zizmor` is a static analysis tool for GitHub Actions.
|
|
9
|
+
|
|
10
|
+
It can find many common security issues in typical GitHub Actions CI/CD setups,
|
|
11
|
+
including:
|
|
12
|
+
|
|
13
|
+
* Template injection vulnerabilities, leading to attacker-controlled code execution
|
|
14
|
+
* Accidental credential persistence and leakage
|
|
15
|
+
* Excessive permission scopes and credential grants to runners
|
|
16
|
+
* Impostor commits and confusable `git` references
|
|
17
|
+
* ...[and much more]!
|
|
18
|
+
|
|
19
|
+
[and much more]: https://woodruffw.github.io/zizmor/audits/
|
|
10
20
|
|
|
11
21
|

|
|
12
22
|
|
|
@@ -849,7 +849,7 @@ not using `pull_request_target` for auto-merge workflows.
|
|
|
849
849
|
jobs:
|
|
850
850
|
automerge:
|
|
851
851
|
runs-on: ubuntu-latest
|
|
852
|
-
if: github.actor == 'dependabot[bot] && github.repository ==
|
|
852
|
+
if: github.actor == 'dependabot[bot]' && github.repository == github.event.pull_request.head.repo.full_name
|
|
853
853
|
steps:
|
|
854
854
|
- run: gh pr merge --auto --merge "$PR_URL"
|
|
855
855
|
env:
|
|
@@ -865,7 +865,7 @@ not using `pull_request_target` for auto-merge workflows.
|
|
|
865
865
|
jobs:
|
|
866
866
|
automerge:
|
|
867
867
|
runs-on: ubuntu-latest
|
|
868
|
-
if: github.event.pull_request.user.login == 'dependabot[bot] && github.repository ==
|
|
868
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == github.event.pull_request.head.repo.full_name
|
|
869
869
|
steps:
|
|
870
870
|
- run: gh pr merge --auto --merge "$PR_URL"
|
|
871
871
|
env:
|
|
@@ -873,6 +873,67 @@ not using `pull_request_target` for auto-merge workflows.
|
|
|
873
873
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
874
874
|
```
|
|
875
875
|
|
|
876
|
+
## `overprovisioned-secrets`
|
|
877
|
+
|
|
878
|
+
| Type | Examples | Introduced in | Works offline | Enabled by default |
|
|
879
|
+
|----------|-------------------------|---------------|----------------|--------------------|
|
|
880
|
+
| Workflow | [overprovisioned-secrets.yml] | v1.3.0 | ✅ | ✅ |
|
|
881
|
+
|
|
882
|
+
[overprovisioned-secrets.yml]: https://github.com/woodruffw/gha-hazmat/blob/main/.github/workflows/overprovisioned-secrets.yml
|
|
883
|
+
|
|
884
|
+
Detects excessive sharing of the `secrets` context.
|
|
885
|
+
|
|
886
|
+
Typically, users access the `secrets` context via its individual members:
|
|
887
|
+
|
|
888
|
+
```yaml
|
|
889
|
+
env:
|
|
890
|
+
SECRET_ONE: ${{ secrets.SECRET_ONE }}
|
|
891
|
+
SECRET_TWO: ${{ secrets.SECRET_TWO }}
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
This allows the Actions runner to only expose the secrets actually used by
|
|
895
|
+
the workflow to the job environment.
|
|
896
|
+
|
|
897
|
+
However, if the user instead accesses the *entire* `secrets` context:
|
|
898
|
+
|
|
899
|
+
```yaml
|
|
900
|
+
env:
|
|
901
|
+
SECRETS: ${{ toJson(secrets) }}
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
...then the entire `secrets` context is exposed to the runner, even if
|
|
905
|
+
only a single secret is actually needed.
|
|
906
|
+
|
|
907
|
+
### Remediation
|
|
908
|
+
|
|
909
|
+
In general, users should avoid loading the entire `secrets` context.
|
|
910
|
+
Secrets should be accessed individually by name.
|
|
911
|
+
|
|
912
|
+
=== "Before :warning:"
|
|
913
|
+
|
|
914
|
+
```yaml title="overprovisioned.yml" hl_lines="7"
|
|
915
|
+
jobs:
|
|
916
|
+
deploy:
|
|
917
|
+
runs-on: ubuntu-latest
|
|
918
|
+
steps:
|
|
919
|
+
- run: ./deploy.sh
|
|
920
|
+
env:
|
|
921
|
+
SECRETS: ${{ toJSON(secrets) }}
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
=== "After :white_check_mark:"
|
|
925
|
+
|
|
926
|
+
```yaml title="overprovisioned.yml" hl_lines="7-8"
|
|
927
|
+
jobs:
|
|
928
|
+
deploy:
|
|
929
|
+
runs-on: ubuntu-latest
|
|
930
|
+
steps:
|
|
931
|
+
- run: ./deploy.sh
|
|
932
|
+
env:
|
|
933
|
+
SECRET_ONE: ${{ secrets.SECRET_ONE }}
|
|
934
|
+
SECRET_TWO: ${{ secrets.SECRET_TWO }}
|
|
935
|
+
```
|
|
936
|
+
|
|
876
937
|
[ArtiPACKED: Hacking Giants Through a Race Condition in GitHub Actions Artifacts]: https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens/
|
|
877
938
|
[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests]: https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
|
|
878
939
|
[What the fork? Imposter commits in GitHub Actions and CI/CD]: https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd
|
|
@@ -90,6 +90,21 @@ cargo test --test snapshot
|
|
|
90
90
|
cargo test
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
### Online tests
|
|
94
|
+
|
|
95
|
+
`zizmor` has some online tests that are ignored by default. These
|
|
96
|
+
tests are gated behind crate features:
|
|
97
|
+
|
|
98
|
+
- `gh-token-tests`: Enable online tests that use the GitHub API.
|
|
99
|
+
- `online-tests`: Enable all online tests, including `gh-token-tests`.
|
|
100
|
+
|
|
101
|
+
To run these successfully, you'll need to set the `GH_TOKEN` environment
|
|
102
|
+
variable and pass the `--features` flag to `cargo test`:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
GH_TOKEN=$(gh auth token) cargo test --features online-tests
|
|
106
|
+
```
|
|
107
|
+
|
|
93
108
|
### Writing snapshot tests
|
|
94
109
|
|
|
95
110
|
`zizmor` uses @mitsuhiko/insta for snapshot testing.
|
|
@@ -215,9 +230,9 @@ Some things that can be useful to discuss beforehand:
|
|
|
215
230
|
When developing a new `zizmor` audit, there are a couple of implementation details to be aware of:
|
|
216
231
|
|
|
217
232
|
- All existing audits live in a Rust modules grouped under `src/audit` folder
|
|
218
|
-
- The expected behavior for all audits is defined by the `
|
|
233
|
+
- The expected behavior for all audits is defined by the `Audit` trait at `src/audit/mod.rs`
|
|
219
234
|
- The expected outcome of an executed audit is defined by the `Finding` struct at `src/finding/mod.rs`
|
|
220
|
-
- Any `
|
|
235
|
+
- Any `Audit` implementation can have access to an `AuditState` instance, as per `src/state.rs`
|
|
221
236
|
- If an audit requires data from the GitHub API, there is a `Client` implementation at `src/github_api.rs`
|
|
222
237
|
- All the audits must be registered at `src/main.rs` according to the `register_audit!` macro
|
|
223
238
|
|
|
@@ -233,12 +248,12 @@ cargo test
|
|
|
233
248
|
|
|
234
249
|
!!! tip
|
|
235
250
|
|
|
236
|
-
`
|
|
251
|
+
`Audit` has various default implementations that are useful if your
|
|
237
252
|
audit only needs to look at individual jobs, steps, etc.
|
|
238
253
|
|
|
239
|
-
For example, you may want to implement `
|
|
254
|
+
For example, you may want to implement `Audit::audit_step` to
|
|
240
255
|
audit each step individually rather than having to iterate from the workflow
|
|
241
|
-
downwards with `
|
|
256
|
+
downwards with `Audit::audit`.
|
|
242
257
|
|
|
243
258
|
!!! tip
|
|
244
259
|
|
|
@@ -248,8 +263,8 @@ The general procedure for adding a new audit can be described as:
|
|
|
248
263
|
|
|
249
264
|
- Define a new file at `src/audit/my_new_audit.rs`
|
|
250
265
|
- Define a struct like `MyNewAudit`
|
|
251
|
-
- Use the `audit_meta!` macro to implement `
|
|
252
|
-
- Implement the `
|
|
266
|
+
- Use the `audit_meta!` macro to implement `AuditCore` for `MyNewAudit`
|
|
267
|
+
- Implement the `Audit` trait for `MyNewAudit`
|
|
253
268
|
- You may want to use both the `AuditState` and `github_api::Client` to get the job done
|
|
254
269
|
- Assign the proper `location` when creating a `Finding`, grabbing it from the
|
|
255
270
|
proper `Workflow`, `Job` or `Step` instance
|