-
Notifications
You must be signed in to change notification settings - Fork 25
177 lines (148 loc) · 5.34 KB
/
Copy pathsecurity-scan.yml
File metadata and controls
177 lines (148 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
name: Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
# Run security scan weekly
- cron: '0 2 * * 1'
jobs:
basic-security-checks:
runs-on: ubuntu-latest
name: Basic Security Checks
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
# Install shellcheck
sudo apt-get update
sudo apt-get install -y shellcheck
# Install yamllint
pip install yamllint
- name: Run dev.sh security checks
run: ./dev.sh security
secret-scan:
runs-on: ubuntu-latest
name: Secret Detection
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run TruffleHog OSS
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: main
head: HEAD
extra_args: --debug --only-verified
dependency-scan:
runs-on: ubuntu-latest
name: Dependency Vulnerability Scan
steps:
- uses: actions/checkout@v4
- name: Scan for vulnerable dependencies
run: |
echo "Scanning for vulnerable dependencies..."
# Find all package.json files
find . -name "package.json" -not -path "./node_modules/*" | while read -r package_file; do
echo "Scanning: $package_file"
dir=$(dirname "$package_file")
if command -v npm >/dev/null 2>&1; then
cd "$dir"
npm audit --audit-level=high || echo "❌ Vulnerabilities found in $package_file"
cd - > /dev/null
fi
done
# Find all requirements.txt files
find . -name "requirements.txt" -not -path "./venv/*" | while read -r req_file; do
echo "Found Python requirements: $req_file"
echo "⚠️ Consider using 'pip-audit' for Python dependency scanning"
done
# Find all go.mod files
find . -name "go.mod" | while read -r go_file; do
echo "Found Go module: $go_file"
echo "⚠️ Consider using 'nancy' or 'govulncheck' for Go dependency scanning"
done
dockerfile-scan:
runs-on: ubuntu-latest
name: Dockerfile Security Scan
steps:
- uses: actions/checkout@v4
- name: Run Hadolint
uses: hadolint/hadolint-action@v3.1.0
with:
dockerfile: "**/Dockerfile*"
failure-threshold: warning
format: sarif
output-file: hadolint-results.sarif
- name: Upload Hadolint results
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: hadolint-results.sarif
code-security:
runs-on: ubuntu-latest
name: Code Security Analysis
permissions:
actions: read
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: javascript, python, go
queries: security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:javascript,python,go"
comprehensive-security:
runs-on: ubuntu-latest
if: github.event_name == 'schedule'
name: Comprehensive Security Check
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
# Install shellcheck
sudo apt-get update
sudo apt-get install -y shellcheck
# Install yamllint
pip install yamllint
- name: Run all checks
run: ./dev.sh check-all
security-summary:
runs-on: ubuntu-latest
needs: [basic-security-checks, secret-scan, dependency-scan, dockerfile-scan, code-security]
if: always()
name: Security Summary
steps:
- name: Security Scan Summary
run: |
echo "## Security Scan Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Check job results
basic_result="${{ needs.basic-security-checks.result }}"
secret_result="${{ needs.secret-scan.result }}"
dependency_result="${{ needs.dependency-scan.result }}"
dockerfile_result="${{ needs.dockerfile-scan.result }}"
code_result="${{ needs.code-security.result }}"
echo "| Security Check | Status |" >> $GITHUB_STEP_SUMMARY
echo "|----------------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Basic Security | $basic_result |" >> $GITHUB_STEP_SUMMARY
echo "| Secret Detection | $secret_result |" >> $GITHUB_STEP_SUMMARY
echo "| Dependency Scan | $dependency_result |" >> $GITHUB_STEP_SUMMARY
echo "| Dockerfile Scan | $dockerfile_result |" >> $GITHUB_STEP_SUMMARY
echo "| Code Analysis | $code_result |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Overall status
if [[ "$basic_result $secret_result $dependency_result $dockerfile_result $code_result" == *"failure"* ]]; then
echo "🔴 **Security issues detected!** Please review the scan results." >> $GITHUB_STEP_SUMMARY
else
echo "🟢 **All security scans passed successfully.**" >> $GITHUB_STEP_SUMMARY
fi