Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Semgrep pre-commit hook #241

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions rule-types/github/semgrep_secrets_scanning.test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
tests:
- name: "Should have Semgrep pre-commit hook configured"
def: {}
params: {}
expect: "pass"
git:
repo_base: correct
- name: "Should fail Semgrep pre-commit hook is not configured"
def: {}
params: {}
expect: "fail"
git:
repo_base: misconfigured
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ['--maxkb=600']
- repo: https://github.com/semgrep/pre-commit
rev: 'v1.101.0'
hooks:
- id: semgrep
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ['--maxkb=600']
53 changes: 53 additions & 0 deletions rule-types/github/semgrep_secrets_scanning.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
version: v1
release_phase: alpha
type: rule-type
name: semgrep_secrets_scanning
display_name: Enable Semgrep Pre-commit hooks for detecting secrets
short_failure_message: Semgrep Pre-commit hook is not configured for the repository
severity:
value: medium
context: {}
description: |
Verifies that Semgrep Pre-commit hook is configured for the repository
guidance: |
Likewise, you can configure a hook to run a semgrep scan with the semgrep hook. As an example, the following configuration would scan the files to be committed with a specified config, skipping files with unknown extensions.
For more information, see the [Semgrep Pre-commit](https://semgrep.dev/docs/secure-guardrails/secure-guardrails-in-semgrep) documentation.
def:
in_entity: repository
rule_schema:
type: object
properties: {}
ingest:
type: git
git: {}
eval:
type: rego
rego:
type: deny-by-default
def: |
package minder
import future.keywords.if
import future.keywords.every

default message := "Semgrep pre-commit hook is not configured for the repository"
default allow := false


# pre-commit hook
precommit := file.read(".pre-commit-config.yaml")

parsed_data := parse_yaml(precommit)

allow if {
some repo_id, hook_id
repo_data := parsed_data.repos[repo_id]
endswith(repo_data["repo"], "https://github.com/semgrep/pre-commit")
semgrep_hooks = repo_data["hooks"]
semgrep_hooks[hook_id].id == "semgrep"
}

message := "" if allow
alert:
type: security_advisory
security_advisory: {}
Loading