Dependency Review Settings Rule Overview #
This rule detects actions/dependency-review-action configurations that weaken dependency review enforcement, omit recommended gate settings, or request pull request comment summaries without granting the permission needed to write those comments.
Key Features #
- Security Gate Checks: Reports
warn-only: true,vulnerability-check: false, andlicense-check: false - Recommended Setting Checks: Reports missing
fail-on-severity, missingfail-on-scopes, and missing license policy configuration - Allow-list Abuse Checks: Reports large
allow-ghsasandallow-dependencies-licensesexception lists - Permission Consistency Check: Reports
comment-summary-in-pr: alwaysandcomment-summary-in-pr: on-failurewhen the effective permissions do not includepull-requests: write - Job Override Awareness: Follows GitHub Actions semantics where job-level
permissions:override workflow-levelpermissions: - Focused Scope: Checks scalar
with:values onactions/dependency-review-actionsteps and ignores unrelated actions
Security and Reliability Impact #
Severity: Medium
actions/dependency-review-action is often used as a security gate for pull requests. Settings such as warn-only: true or vulnerability-check: false can make the gate non-enforcing, while large exception lists can normalize broad bypasses.
The rule also checks reliability issues around PR comments. When comment summaries are enabled without pull-requests: write, the workflow configuration is internally inconsistent: the action is configured to write a PR comment, but the GITHUB_TOKEN permissions do not allow it.
Example Vulnerable Workflow #
name: Dependency Review
on: pull_request
permissions:
contents: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/dependency-review-action@v4
with:
warn-only: true
vulnerability-check: false
allow-ghsas: GHSA-1111-2222-3333, GHSA-2222-3333-4444, GHSA-3333-4444-5555, GHSA-4444-5555-6666, GHSA-5555-6666-7777
comment-summary-in-pr: always
Safe Configuration #
Grant pull-requests: write at the job level when PR comments are needed:
name: Dependency Review
on: pull_request
permissions:
contents: read
jobs:
review:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/dependency-review-action@v4
with:
warn-only: false
vulnerability-check: true
license-check: true
fail-on-severity: high
fail-on-scopes: runtime
allow-licenses: MIT, Apache-2.0
comment-summary-in-pr: always
Or disable PR comments:
with:
comment-summary-in-pr: never
What the Rule Detects #
warn-only: true
#
steps:
- uses: actions/dependency-review-action@v4
with:
warn-only: true
vulnerability-check: false
#
steps:
- uses: actions/dependency-review-action@v4
with:
vulnerability-check: false
license-check: false
#
steps:
- uses: actions/dependency-review-action@v4
with:
license-check: false
Missing gate settings #
steps:
- uses: actions/dependency-review-action@v4
with:
warn-only: false
This reports missing fail-on-severity, missing fail-on-scopes, and missing license policy configuration when neither allow-licenses nor deny-licenses is set.
Large vulnerability allow-list #
steps:
- uses: actions/dependency-review-action@v4
with:
allow-ghsas: GHSA-1111-2222-3333, GHSA-2222-3333-4444, GHSA-3333-4444-5555, GHSA-4444-5555-6666, GHSA-5555-6666-7777
Large dependency/license exception list #
steps:
- uses: actions/dependency-review-action@v4
with:
allow-dependencies-licenses: pkg:npm/a@1.0.0, pkg:npm/b@1.0.0, pkg:npm/c@1.0.0, pkg:npm/d@1.0.0, pkg:npm/e@1.0.0
comment-summary-in-pr: always
#
permissions:
contents: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/dependency-review-action@v4
with:
comment-summary-in-pr: always
comment-summary-in-pr: on-failure
#
permissions:
contents: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/dependency-review-action@v4
with:
comment-summary-in-pr: on-failure
Limitations #
- Dynamic expressions in
permissions:are not evaluated. - The rule checks scalar
with:values only. Dynamic expressions such as${{ ... }}are treated conservatively for value-specific checks. - When
config-fileis set, missing inline recommendations such asfail-on-severity,fail-on-scopes, and license policy are not reported because the external config file may define them. - Large allow-list detection currently uses a threshold of 5 or more entries.
- Repository default token permissions are not inferred; add explicit
pull-requests: writewhen PR comments are required.