Skip to content
Merged
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
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@ updates:
directory: "/"
schedule:
interval: "weekly"

- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"

- package-ecosystem: "pip"
directory: "/project-space/benchmarks/harness"
schedule:
interval: "weekly"
13 changes: 13 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: dependency-review
on:
pull_request:

permissions:
contents: read

jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/dependency-review-action@v4
12 changes: 10 additions & 2 deletions .github/workflows/labels.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
name: seed-labels
on:
workflow_dispatch:

permissions:
issues: write

jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/github-script@v8
with:
script: |
const wanted = ["security","performance","observatory:triage","bench","policies"];
for (const name of wanted) {
try {
await github.rest.issues.createLabel({ owner: context.repo.owner, repo: context.repo.repo, name });
core.info(`Created label: ${name}`);
} catch (e) {
if (e.status !== 422) core.info(`Label ${name} already exists`);
if (e.status === 422) {
core.info(`Label already exists: ${name}`);
} else {
throw e;
}
}
}
3 changes: 3 additions & 0 deletions .github/workflows/lint-workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
branches: [main]
workflow_dispatch:

permissions:
contents: read

jobs:
actionlint:
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nightly-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
run:
runs-on: ubuntu-latest
permissions:
contents: write
contents: read
steps:
- uses: actions/checkout@v5
with:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ on:
branches: [main]
workflow_dispatch:

permissions:
contents: read

jobs:
run:
name: Run hooks
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/secret-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ jobs:
detect-secrets:
name: detect-secrets (baseline)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
pytest:
runs-on: ubuntu-latest
Expand Down
16 changes: 16 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Security Policy

## Reporting a vulnerability

Merci de **ne pas** ouvrir d'issue publique pour une vulnérabilité exploitable.

- Méthode recommandée : utilisez **GitHub Security Advisories** via le bouton "Report a vulnerability" du dépôt.
- Si ce dépôt n'a pas encore les advisories activés : ouvrez une issue avec le label `security` **sans détails exploitables** (POC, secrets, endpoints) et demandez un canal privé.

## Supported versions

- Branche supportée : `main`.

## Scope

- Ce dépôt contient du protocole/CI/outillage. Toute faiblesse CI (permissions, workflows, supply chain) est considérée "in-scope".
81 changes: 72 additions & 9 deletions security/review.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,49 @@
# 🛡️ Security Review Checklist (Claude-Safety)

Ce document sert de **contresignature** sécurité pour le Proof Pack.
Une PR qui modifie la surface d'attaque, les dépendances, l'I/O, le réseau, la sérialisation, ou l'exécution de code **doit** passer cette checklist.
Ce document sert de **contresignature sécurité** pour le Proof Pack.
Toute PR qui modifie la surface d'attaque, les dépendances, l'I/O, le réseau, la sérialisation, ou l'exécution de code **doit** passer cette checklist.

**PR :** <!-- lien -->
**Auteur :** <!-- @agent -->
**Reviewers (sécurité) :** <!-- @Claude-Safety, etc -->
**Scope :** <!-- core/features/infra/etc -->
**Risque estimé :** Low / Medium / High
**Date :** <!-- YYYY-MM-DD -->

---

## 0) Résumé de la menace
- Actifs à protéger :
- Menaces principales :
- Hypothèses (trust boundary) :
- Hypothèses / trust boundaries :
- Dépendances externes (services, APIs, OS) :

**Evidence (obligatoire) :**
- Lien PR + description du changement :
- Lien CI (run) :

---

## 1) Surface d'attaque
Coche si applicable.

- [ ] Entrées utilisateur (CLI/API/UI) modifiées
- [ ] Fichiers lus/écrits (paths, permissions) modifiés
- [ ] Entrées utilisateur (CLI/API/UI) ajoutées/modifiées
- [ ] Fichiers lus/écrits (paths, permissions) ajoutés/modifiés
- [ ] Réseau (HTTP, sockets) ajouté/modifié
- [ ] Sérialisation / parsing (JSON/YAML/XML/pickle/Proto) ajouté/modifié
- [ ] Exécution de code / plugins / templates / shell ajouté/modifié
- [ ] Concurrence / async / threads modifiés
- [ ] Intégration OS (Windows/macOS/Linux) ajoutée/modifiée
- [ ] Crypto / auth / secrets ajoutés/modifiés

Notes :
**Notes :**
<!-- -->

**Evidence (si coché) :**
- Entrées / endpoints / flags impactés :
- Exemple d'inputs (valide + malformé) :
- Chemins/URLs touchés :

---

## 2) Dépendances & supply chain
Expand All @@ -42,15 +54,25 @@ Notes :
- [ ] Scan dépendances OK (outil + lien/log) :
- Outil : <!-- Dependabot/Snyk/etc -->
- Résultat : <!-- OK / issues -->
- [ ] Actions GitHub utilisées : versions contrôlées (au minimum major pin, idéalement SHA)

**Evidence :**
- Diff `requirements*.txt` / `pyproject.toml` / lockfile (si applicable) :
- Lien Dependabot (si applicable) :
- Lien scan (log/rapport) :

---

## 3) Secrets & données sensibles
- [ ] Aucun secret commité (clés, tokens, .env, credentials)
- [ ] Variables d'environnement documentées (si utilisées)
- [ ] Journaux (logs) ne leak pas de données sensibles
- [ ] Journaux (logs) ne leak pas de données sensibles (redaction obligatoire avant archivage)
- [ ] Données perso / PII : collecte ? stockage ? (si oui → documenter + minimiser)

**Evidence :**
- Résultats `detect-secrets` / `gitleaks` (lien CI) :
- Exemple de logs vérifiés (ou justification) :

---

## 4) Validation d'entrées & erreurs
Expand All @@ -59,6 +81,10 @@ Notes :
- [ ] Messages d'erreur ne révèlent pas d'infos sensibles
- [ ] Timeouts / limites (rate limit / taille fichier / mémoire) si nécessaire

**Evidence :**
- Tests ajoutés (cas limites) :
- Stratégie de timeouts/limites (où ? valeur ?) :

---

## 5) I/O & filesystem
Expand All @@ -67,6 +93,10 @@ Notes :
- [ ] Permissions minimales (principe du moindre privilège)
- [ ] Nettoyage fichiers temporaires / permissions correctes

**Evidence :**
- Liste des chemins autorisés (si applicable) :
- Tests/contrôles contre traversal :

---

## 6) Réseau & intégrations externes (si applicable)
Expand All @@ -77,6 +107,10 @@ Notes :
- [ ] URLs/hosts allowlist si pertinent
- [ ] Données envoyées minimisées

**Evidence :**
- Hosts/URLs contactés :
- Timeouts/retries configurés :

---

## 7) Exécution de commandes (si applicable)
Expand All @@ -85,16 +119,45 @@ Notes :
- [ ] Échappement / validation des paramètres
- [ ] Pas de commande construite depuis input non fiable

**Evidence :**
- Appels `subprocess`/shell identifiés :
- Exemple d'input non-fiable neutralisé :

---

## 8) Tests sécurité (minimum)
## 8) CI / GitHub Actions (si la PR touche `.github/workflows/*` ou scripts CI)
- [ ] Permissions minimales (`permissions:` explicite, pas de `write` par défaut)
- [ ] Pas d'usage de `pull_request_target` (sauf justification + durcissement)
- [ ] Pas d'exécution de code non-fiable sur PRs externes
- [ ] Actions tierces : versions contrôlées + revue

**Evidence :**
- Lien vers le workflow modifié + justification des permissions :

---

## 9) Agents / LLM (si applicable)
- [ ] Frontières de confiance explicites entre agents (pas de “zero trust” implicite)
- [ ] Protection contre prompt injection (entrées non-fiables, contenu externe)
- [ ] Aucune exfiltration de secrets via logs/artefacts/outputs

**Evidence :**
- Sources non-fiables identifiées (URLs, issues, PR body, fichiers) :
- Mesures de mitigation :

---

## 10) Tests sécurité (minimum)
- [ ] Tests ajoutés pour le comportement sûr (cas limites, erreurs)
- [ ] Cas d'abus testé (inputs malformés, grands volumes)
- [ ] Reproductibilité : tests passent en CI

**Evidence :**
- Commandes + lien CI :

---

## 9) Décision (contresignature)
## 11) Décision (contresignature)
Verdict :
- [ ] ✅ APPROVED (safe to merge)
- [ ] 🟡 APPROVED WITH CONDITIONS (voir ci-dessous)
Expand Down
Loading