Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96fd63ec3c | ||
|
|
a02aa8a3c4 | ||
|
|
f9707a8699 | ||
|
|
9ca3ea2235 | ||
|
|
b262e9b377 | ||
|
|
ff235d873a | ||
|
|
0729f872a0 | ||
|
|
c3b8189dcf | ||
|
|
4244bbaa4a | ||
|
|
2a756e0980 | ||
|
|
664044bcd6 | ||
|
|
2c35fe53b9 | ||
|
|
42c2ab10d5 | ||
|
|
1108069b1a | ||
|
|
c990901944 | ||
|
|
f950f3d17a | ||
|
|
62a701a160 | ||
|
|
66f27afbac |
No files matched your search
@@ -1,41 +0,0 @@
|
||||
---
|
||||
# Trivy — scan image conteneur publiée sur le registre Gitea (git.ccado.fr)
|
||||
# Déclencheur : package (type container) publié / lié au dépôt.
|
||||
# NB Gitea 1.27 : l'événement registry_package ne supporte QUE `published`
|
||||
# (le type `updated` n'existe pas — cf. modules/actions/workflows.go).
|
||||
name: trivy-registry-image
|
||||
on:
|
||||
registry_package:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: trivy-image-${{ gitea.ref_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
scan-image:
|
||||
# Ne scanner que les images conteneur du registre lié à ce dépôt
|
||||
if: gitea.event.package.type == 'container'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Scan Trivy — image publiée (auth registre via GITEA_TOKEN)
|
||||
uses: aquasecurity/trivy-action@v0.36.0
|
||||
with:
|
||||
image-ref: git.ccado.fr/${{ gitea.event.package.name }}:${{ gitea.event.package.version }}
|
||||
format: table
|
||||
exit-code: 1 # échoue sur HIGH/CRITICAL
|
||||
severity: HIGH,CRITICAL
|
||||
ignore-unfixed: true # vulns sans fix dispo = bruit
|
||||
timeout: 15m
|
||||
env:
|
||||
TRIVY_CACHE_DIR: /tmp/.trivy
|
||||
TRIVY_USERNAME: ${{ github.actor }}
|
||||
TRIVY_PASSWORD: ${{ secrets.GITEA_TOKEN }}
|
||||
|
||||
- name: Résultat
|
||||
if: failure()
|
||||
run: echo "::warning::Vulnérabilités HIGH/CRITICAL détectées sur l'image ${{ gitea.event.package.name }}:${{ gitea.event.package.version }}"
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
# Trivy — scan hebdomadaire du dépôt (lockfiles : package-lock.json, go.sum,
|
||||
# requirements*.txt, Gemfile.lock, ...). Lundi 06:00 + dispatch manuel.
|
||||
name: trivy-repo-weekly
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 6 * * 1' # lundi 06:00 Europe/Paris (fuseau runner)
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: trivy-repo-weekly
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
scan-fs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Scan Trivy — lockfiles du dépôt
|
||||
uses: aquasecurity/trivy-action@v0.36.0
|
||||
with:
|
||||
scan-type: fs
|
||||
scan-ref: .
|
||||
format: table
|
||||
exit-code: 1 # échoue sur HIGH/CRITICAL
|
||||
severity: HIGH,CRITICAL
|
||||
ignore-unfixed: true
|
||||
timeout: 15m
|
||||
env:
|
||||
TRIVY_CACHE_DIR: /tmp/.trivy
|
||||
|
||||
- name: Résultat
|
||||
if: failure()
|
||||
run: echo "::warning::Vulnérabilités HIGH/CRITICAL dans les dépendances du dépôt (voir logs ci-dessus)"
|
||||
@@ -1,81 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
|
||||
detected=false
|
||||
|
||||
check_file() {
|
||||
while IFS=: read -r file score; do
|
||||
[ -z "$file" ] && continue
|
||||
detected=true
|
||||
done <<EOF
|
||||
$(git diff --cached --name-only | while read -r f; do
|
||||
[ ! -f "$f" ] && continue
|
||||
case "$f" in
|
||||
.env|.env.*)
|
||||
[ "$f" = ".env.example" ] && continue
|
||||
echo "$f|1"
|
||||
;;
|
||||
esac
|
||||
case "$(basename "$f")" in
|
||||
.env|.env.*)
|
||||
[ "$f" = ".env.example" ] && continue
|
||||
echo "$f|1"
|
||||
;;
|
||||
esac
|
||||
done)
|
||||
EOF
|
||||
}
|
||||
|
||||
check_diff() {
|
||||
content=$(git diff --cached --diff-filter=ACM -- "$@" 2>/dev/null)
|
||||
[ -z "$content" ] && return
|
||||
|
||||
patterns='VITE_SUPABASE_SERVICE_ROLE_KEY|SUPABASE_SERVICE_ROLE|eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9|ghp_[0-9a-zA-Z]{36}|gho_[0-9a-zA-Z]{36}|sk_live_|sk_test_|AKIA[0-9A-Z]{16}|-----BEGIN[ A-Z]*PRIVATE KEY-----'
|
||||
|
||||
echo "$content" | while read -r line; do
|
||||
case "$line" in
|
||||
*VITE_SUPABASE_SERVICE_ROLE_KEY*)
|
||||
printf "${RED}⛔ Secret détecté : VITE_SUPABASE_SERVICE_ROLE_KEY (clé admin Supabase)${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
*eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9*)
|
||||
printf "${RED}⛔ Secret détecté : JWT token (eyJ...) dans le diff${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
*ghp_*|*gho_*)
|
||||
printf "${RED}⛔ Secret détecté : GitHub token (ghp_/gho_)${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
*sk_live_*|*sk_test_*)
|
||||
printf "${RED}⛔ Secret détecté : clé Stripe${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
*AKIA[0-9A-Z]*)
|
||||
printf "${RED}⛔ Secret détecté : clé AWS (AKIA)${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
*-----BEGIN*PRIVATE*KEY*-----*)
|
||||
printf "${RED}⛔ Secret détecté : clé privée RSA/EC${NC}\n"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
check_file
|
||||
|
||||
for f in $(git diff --cached --name-only); do
|
||||
case "$f" in .githooks/*) continue ;; esac
|
||||
check_diff "$f"
|
||||
[ $? -eq 1 ] && detected=true
|
||||
done
|
||||
|
||||
if [ "$detected" = true ]; then
|
||||
printf "${RED}⛔ Commit bloqué : secret(s) détecté(s) dans les fichiers indexés.${NC}\n"
|
||||
printf " Vérifie le contenu et utilise 'git rm --cached' si nécessaire.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in new issue
Block a user