Skip to content

Rule Reference

SEC510lintai-ai-securitystableclaude_settingswarn

Claude settings: shared gh workflow run permissions

Claude settings permissions allow `Bash(gh workflow run:*)` in a shared committed config

Provider
lintai-ai-security
Surface
claude_settings
Scope
per_file
Tier
stable
Severity
warn
Confidence
high
Detection
structural
Remediation
message_only

Activation Model

Preset Membership

This rule is part of the builtin activation graph through these preset memberships.

Lifecycle

Stable Lifecycle Contract

State

stable_gated

Graduation rationale

Checks shared Claude settings for exact GitHub workflow dispatch authority through `permissions.allow`.

Deterministic signal basis

ClaudeSettingsSignals exact string detection for `Bash(gh workflow run:*)` inside permissions.allow on parsed Claude settings JSON.

Malicious corpus
claude-settings-gh-secret-variable-workflow-permissions
Benign corpus
claude-settings-gh-secret-variable-workflow-specific-safe
structured evidence required remediation reviewed
Canonical note

Structural stable rule intended as a high-precision check with deterministic evidence.

Nearby Signals

Related Rules

SEC510 / CLAUDE-GH-WORKFLOW-RUN-PERMISSION

SEC510 flags shared Claude settings when permissions.allow grants blanket GitHub workflow-dispatch authority through gh workflow run.

Why It Matters

gh workflow run can dispatch GitHub Actions workflows remotely. In a shared committed settings file that is broader than most teams want to delegate by default.

Trigger Shape

The rule triggers only when all of these are true:

  • the file is a detected Claude settings surface
  • the path is not fixture-like
  • permissions.allow contains the exact token Bash(gh workflow run:*)

Clean Cases

These stay clean:

  • narrower inspection grants such as Bash(gh workflow view:*)
  • settings files that do not grant blanket workflow-dispatch access
  • fixture-like examples under test or fixture paths

Example Trigger

json
{
  "permissions": {
    "allow": ["Bash(gh workflow run:*)", "Read(*)"]
  }
}

Safer Example

json
{
  "permissions": {
    "allow": ["Bash(gh workflow view:*)", "Read(*)"]
  }
}

How To Fix

Remove shared gh workflow run permissions or replace them with narrower reviewed commands that keep workflow dispatch under explicit user control.