Compare commits
2
Commits
6838b3833e
...
36e46f39ca
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36e46f39ca | ||
|
|
fd8e5a1a17 |
@@ -1,20 +1,7 @@
|
||||
name: Security
|
||||
|
||||
# Self-contained security scan: Semgrep SAST + Trivy filesystem scan.
|
||||
#
|
||||
# Deliberately NOT calling the reusable workflow in security-workflows:
|
||||
# act_runner fetches reusable workflows by cloning them over HTTPS, and git
|
||||
# fetch over HTTPS is broken on this Gitea instance since 2026-08-12
|
||||
# (`git upload-pack --stateless-rpc` aborts with
|
||||
# BUG("packfile_uris requires sideband-all") and dumps core). The runner only
|
||||
# kept working because it still had a June copy in its action cache. Inlining
|
||||
# removes that dependency entirely.
|
||||
#
|
||||
# For the same reason the sources are pulled as a tar archive instead of via
|
||||
# actions/checkout. Restore the reusable call once the fetch path is fixed.
|
||||
#
|
||||
# Why one job, not two parallel jobs: act_runner v0.6.1 has a race when two
|
||||
# jobs in the same task share a workspace and chown it in parallel.
|
||||
# Ruft den zentralen Scan-Workflow in security-workflows auf
|
||||
# (Semgrep SAST + Trivy filesystem scan).
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -24,60 +11,10 @@ on:
|
||||
- cron: '0 6 * * 1'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
TRIVY_SEVERITY: 'CRITICAL,HIGH'
|
||||
# MessageStore.cs interpoliert SQL-Strings, die plugin-lokal sicher sind;
|
||||
# Semgrep matcht das Pattern, CodeQL mit Datenflussanalyse nicht.
|
||||
SEMGREP_EXCLUDE_RULES: 'csharp.lang.security.sqli.csharp-sqli.csharp-sqli'
|
||||
|
||||
jobs:
|
||||
scan:
|
||||
name: Security Scan
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
env:
|
||||
TOKEN: ${{ github.token }}
|
||||
# On pull_request the merge SHA may not be archivable, use the head.
|
||||
REF: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
SERVER: ${{ github.server_url }}
|
||||
REPO: ${{ github.repository }}
|
||||
run: |
|
||||
set -eu
|
||||
echo "Fetching archive for $REPO @ $REF"
|
||||
curl -sfL --retry 3 --retry-delay 5 \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
"$SERVER/$REPO/archive/$REF.tar.gz" -o /tmp/source.tar.gz
|
||||
tar xzf /tmp/source.tar.gz --strip-components=1
|
||||
rm -f /tmp/source.tar.gz
|
||||
echo "Extracted $(find . -type f | wc -l) files"
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install Semgrep
|
||||
run: pip install --no-cache-dir semgrep
|
||||
|
||||
- name: Install Trivy
|
||||
# Version pinned so the install script does not hit api.github.com to
|
||||
# resolve "latest", which burns the runner's unauthenticated rate limit.
|
||||
# renovate: datasource=github-releases depName=aquasecurity/trivy
|
||||
run: curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin v0.70.0
|
||||
|
||||
- name: Run Semgrep SAST
|
||||
run: |
|
||||
args="--config=auto --error --severity=ERROR"
|
||||
if [ -n "$SEMGREP_EXCLUDE_RULES" ]; then
|
||||
for rule in $(echo "$SEMGREP_EXCLUDE_RULES" | tr ',' ' '); do
|
||||
args="$args --exclude-rule=$rule"
|
||||
done
|
||||
fi
|
||||
echo "Running: semgrep scan $args"
|
||||
semgrep scan $args
|
||||
|
||||
- name: Run Trivy filesystem scan
|
||||
# if: always() — surface Trivy findings even when Semgrep fails first.
|
||||
if: always()
|
||||
run: trivy fs --severity "$TRIVY_SEVERITY" --exit-code 1 --ignore-unfixed .
|
||||
uses: JonKazama-Hellion/security-workflows/.gitea/workflows/security-scan.yml@main
|
||||
with:
|
||||
# MessageStore.cs interpoliert SQL-Strings, die plugin-lokal sicher sind;
|
||||
# Semgrep matcht das Pattern, CodeQL mit Datenflussanalyse nicht.
|
||||
semgrep-exclude-rules: 'csharp.lang.security.sqli.csharp-sqli.csharp-sqli'
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<ItemGroup>
|
||||
<!-- Closed ranges prevent surprise major bumps during lock file regeneration -->
|
||||
<PackageReference Include="MessagePack" Version="[3.1.4, 4.0.0)" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.8" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.11" />
|
||||
<!-- v1.5.0 DI-container foundation; matches Lightless pin (Hosting 10.0.7) -->
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.DependencyInjection"
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
},
|
||||
"Microsoft.Data.Sqlite": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.8, )",
|
||||
"resolved": "10.0.8",
|
||||
"contentHash": "iyDWyD6r/SnqgoYYQIlLhxL1ZIGZr+SByMXrJKSA1w7sOt7bPMJmN3h2laqwKqyQkjh/lUPJ7LTXwpvqzhggOQ==",
|
||||
"requested": "[10.0.11, )",
|
||||
"resolved": "10.0.11",
|
||||
"contentHash": "7je7UELzm131GiLYc4PpZvfKXIgIyzPM+v+tjcd/nbnuWRfgcONYKzDTqJlURxwVCFsVnlpmq6y6yn4qvR8QXQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "10.0.8",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"Microsoft.Data.Sqlite.Core": "10.0.11",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.12",
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
@@ -141,10 +141,10 @@
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.8",
|
||||
"contentHash": "26t7WDiEjjAls/sFpWvVEFDxt+7Q5VPt6+blU2Lafuj9L8PzAv/GtGV4cqVPtrhWbfD2BX/z2v8hD1qXYtK6Aw==",
|
||||
"resolved": "10.0.11",
|
||||
"contentHash": "hubA20AGenQ4Sx0ElWaPpB8DISjXpdx463+1zOGRslsT0e/t/06ITv+pHsop8CcJ0d8PZLfgnT7juCDVD79Dkw==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration": {
|
||||
@@ -382,24 +382,24 @@
|
||||
},
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "mAgscpQMLw5/nfA1Q5oJVAT29yROUo1ifZGbbTpx/lwZpSxMUGoYbKfmvdm8oXER+RzxqBmmQzeBEVKfeHv2nw==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.12",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.12"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "ETpNw9DY3ckWLgRRAeCHj+GKOuPi61aeczkXhgHexUvqoZBAYg8RYESE2J7O1M7+o6QbdSEZwrw9bfqztUVWXg=="
|
||||
},
|
||||
"SQLitePCLRaw.provider.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.11",
|
||||
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
|
||||
"resolved": "2.1.12",
|
||||
"contentHash": "W3oH4XIfCzFrgUSDKHhN6N+dgzA5YHOR2VxX8GB6Qy7CyrJJgxPEG8NirgYWlPQC5P2jz2knSsexWu4tDUL33g==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.11"
|
||||
"SQLitePCLRaw.core": "2.1.12"
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog": {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"csharpier": {
|
||||
"version": "1.2.6",
|
||||
"version": "1.3.0",
|
||||
"commands": ["csharpier"],
|
||||
"rollForward": false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user