[Sécurité] Retirer du dépôt git les exports d'appels clients réels et les fichiers de l'ancien outil #2

Open
opened 2026-09-24 15:26:10 +00:00 by srsk7896 · 0 comments
Owner

Origine : AUDIT_001, constats n° 4 (Élevée) et n° 6 (Moyenne), traités dans la même opération.

Risque identifié

Le dépôt contient de vrais historiques d'appels clients, non anonymisés : environ 195 numéros de téléphone appelants et appelés, des adresses IP de trunk opérateur (le lien SIP vers l'opérateur) et une IP interne. Un dépôt git conserve tout indéfiniment, et dans chaque copie : postes de développement, runners CI (machines qui exécutent la CI), miroirs.

Cela contredit :

  • _projet/design.md : « Fixtures dans testdata/ : exports réels anonymisés (numéros et IP remplacés) » ;
  • _projet/vision.md : « minimisation, pas de conservation au-delà du besoin de diagnostic, hébergement maîtrisé par Orange Business ».

Le même dossier contient aussi des fichiers sans utilité pour le projet : un fichier de métadonnées du logiciel de chiffrement ZoneCentral, un module qui contient 3 adresses IP en dur (vraisemblablement des rebonds, c'est-à-dire des bastions d'accès), ainsi que les exécutables et DLL de l'ancien PlugAnalyzer.

Contexte / éléments fournis

Fichiers contenant des données personnelles :

  • .ressources/OLD_app/PlugAnalyzer/Temp/Voip.txt
  • .ressources/OLD_app/PlugAnalyzer/Temp/VoipV6.txt
  • .ressources/OLD_app/PlugAnalyzer/Temp/PlugAnalyzer.html
  • .ressources/OLD_app/PlugAnalyzer.zip (contient les trois mêmes fichiers)

Fichiers sans utilité, à retirer dans la même opération :

  • .ressources/OLD_app/PlugAnalyzer/Zone.sav (en-tête « THIS FILE BELONGS TO ZONECENTRAL »)
  • .ressources/OLD_app/PlugAnalyzer/Rebonds.cp36-win32.pyd
  • exécutables et runtime de l'ancien outil (PlugAnalyzer.exe, unins000.exe, python36.dll, *.pyd, *.dll…)

Autres éléments :

  • Ces fichiers sont versionnés depuis le commit 58c1c68 (2026-08-27). Le dépôt compte 32 commits, et .git pèse 126 Mo.
  • La CI ne les détecte pas : gitleaks cherche des secrets, pas des numéros de téléphone, et trivy fs est lancé avec --skip-dirs .ressources.
  • Visibilité constatée le 2026-09-24 par l'API Forgejo : le dépôt n'est pas privé ("private": false) et l'organisation OneXpertise est en visibilité limited. Le dépôt est donc lisible par tout compte connecté à l'instance git.bvcesctoulouse.com, pas seulement par les membres du projet. Un accès sans connexion renvoie une erreur 404 : le dépôt n'est pas public sur Internet.
  • .dockerignore exclut déjà .ressources/OLD_app : ces fichiers ne sont pas dans l'image publiée.
  • _projet/design.md cite .ressources/OLD_app/PlugAnalyzer/Temp/Voip*.txt comme source du contrat du parseur (section « Format d'entrée »).
  • Les tests reposent uniquement sur internal/cdr/testdata/ (anonymisé), pas sur OLD_app/.

Scénario d'impact

Tout utilisateur de l'instance Forgejo, même extérieur au projet, peut lire ou cloner le dépôt, et toute personne qui l'a cloné détient une copie de données personnelles de clients, sans base légale ni durée de conservation. Supprimer les fichiers dans un nouveau commit ne suffit pas : ils restent récupérables dans l'historique git.

Remédiation proposée

  1. Mesure conservatoire, immédiate et réversible : passer le dépôt en privé (Paramètres du dépôt → Visibilité) en attendant le nettoyage, pour que seuls ses membres y aient accès.
  2. Retrait immédiat du suivi git (commit sur dev) de tout .ressources/OLD_app/, ou au minimum des fichiers listés ci-dessus. Ajouter .ressources/OLD_app/ au .gitignore.
  3. Archivage hors git de l'ancien outil, dans un espace documentaire à accès restreint, s'il doit rester consultable comme référence.
  4. Référence fonctionnelle : si un exemple d'export réel reste utile, en ajouter une version anonymisée (numéros et IP remplacés) dans internal/cdr/testdata/, et mettre à jour la mention dans _projet/design.md via l'agent 1-architecte.md.
  5. Purge de l'historique avec git filter-repo --path .ressources/OLD_app --invert-paths, puis push forcé de dev et main. C'est une opération destructive : elle réécrit tous les SHA et impose de prévenir chaque détenteur de clone, qui devra recloner. Elle demande une confirmation explicite de l'utilisateur avant exécution. Le coût reste faible tant que le dépôt est jeune.
  6. Information du référent RGPD / DPO, qui jugera s'il faut une trace au registre des traitements.

Sévérité proposée

Élevée. Il y a conservation durable et diffusion interne de données personnelles de clients, en contradiction avec les documents de référence. L'exposition reste limitée aux personnes qui ont accès au dépôt, et les fichiers ne sont pas dans l'image.

Critères de validation

  • Le dépôt est passé en privé, au moins jusqu'à la fin de la purge.
  • git ls-files .ressources/OLD_app ne renvoie plus rien sur dev et sur main.
  • .gitignore contient .ressources/OLD_app/.
  • Après la purge, git log --all -- .ressources/OLD_app ne renvoie plus rien sur le dépôt distant.
  • go test ./... reste vert.
  • _projet/design.md ne cite plus de fichier retiré, ou cite son remplaçant anonymisé.
  • Le DPO ou référent RGPD a été informé (date consignée dans l'issue).

Priorité proposée

Haute : à traiter en premier. Plus on attend, plus la purge de l'historique coûte cher, et la contradiction avec le RGPD est directe.

Périmètre estimé

  • Zone concernée : sécurité / infrastructure (dépôt git) / documentation
  • Impact attendu : étendu (réécriture de l'historique, reclonage nécessaire pour tous)

Questions ouvertes

  • Faut-il conserver l'ancien outil quelque part, et si oui, où, avec quel accès ?
  • Hypothèse : l'instance Forgejo git.bvcesctoulouse.com n'est peut-être pas hébergée sous maîtrise Orange Business. À confirmer : si c'est le cas, la priorité de la purge augmente.
  • Qui détient aujourd'hui un clone du dépôt, pour prévenir chacun avant la purge ?

Labels proposés

  • type:security
  • priority:high
  • area:security
  • area:infra
> Origine : AUDIT_001, constats n° 4 (Élevée) et n° 6 (Moyenne), traités dans la même opération. ## Risque identifié Le dépôt contient de **vrais historiques d'appels clients, non anonymisés** : environ 195 numéros de téléphone appelants et appelés, des adresses IP de trunk opérateur (le lien SIP vers l'opérateur) et une IP interne. Un dépôt git conserve tout indéfiniment, et dans chaque copie : postes de développement, runners CI (machines qui exécutent la CI), miroirs. Cela contredit : - `_projet/design.md` : « Fixtures dans `testdata/` : exports réels **anonymisés** (numéros et IP remplacés) » ; - `_projet/vision.md` : « minimisation, pas de conservation au-delà du besoin de diagnostic, hébergement maîtrisé par Orange Business ». Le même dossier contient aussi des fichiers sans utilité pour le projet : un fichier de métadonnées du logiciel de chiffrement ZoneCentral, un module qui contient 3 adresses IP en dur (vraisemblablement des rebonds, c'est-à-dire des bastions d'accès), ainsi que les exécutables et DLL de l'ancien PlugAnalyzer. ## Contexte / éléments fournis Fichiers contenant des données personnelles : - `.ressources/OLD_app/PlugAnalyzer/Temp/Voip.txt` - `.ressources/OLD_app/PlugAnalyzer/Temp/VoipV6.txt` - `.ressources/OLD_app/PlugAnalyzer/Temp/PlugAnalyzer.html` - `.ressources/OLD_app/PlugAnalyzer.zip` (contient les trois mêmes fichiers) Fichiers sans utilité, à retirer dans la même opération : - `.ressources/OLD_app/PlugAnalyzer/Zone.sav` (en-tête « THIS FILE BELONGS TO ZONECENTRAL ») - `.ressources/OLD_app/PlugAnalyzer/Rebonds.cp36-win32.pyd` - exécutables et runtime de l'ancien outil (`PlugAnalyzer.exe`, `unins000.exe`, `python36.dll`, `*.pyd`, `*.dll`…) Autres éléments : - Ces fichiers sont versionnés depuis le commit `58c1c68` (2026-08-27). Le dépôt compte 32 commits, et `.git` pèse 126 Mo. - La CI ne les détecte pas : `gitleaks` cherche des secrets, pas des numéros de téléphone, et `trivy fs` est lancé avec `--skip-dirs .ressources`. - Visibilité constatée le 2026-09-24 par l'API Forgejo : le dépôt n'est **pas privé** (`"private": false`) et l'organisation `OneXpertise` est en visibilité `limited`. Le dépôt est donc lisible par **tout compte connecté à l'instance** `git.bvcesctoulouse.com`, pas seulement par les membres du projet. Un accès sans connexion renvoie une erreur 404 : le dépôt n'est pas public sur Internet. - `.dockerignore` exclut déjà `.ressources/OLD_app` : ces fichiers ne sont **pas** dans l'image publiée. - `_projet/design.md` cite `.ressources/OLD_app/PlugAnalyzer/Temp/Voip*.txt` comme source du contrat du parseur (section « Format d'entrée »). - Les tests reposent uniquement sur `internal/cdr/testdata/` (anonymisé), pas sur `OLD_app/`. ## Scénario d'impact Tout utilisateur de l'instance Forgejo, même extérieur au projet, peut lire ou cloner le dépôt, et toute personne qui l'a cloné détient une copie de données personnelles de clients, sans base légale ni durée de conservation. Supprimer les fichiers dans un nouveau commit ne suffit pas : ils restent récupérables dans l'historique git. ## Remédiation proposée 0. **Mesure conservatoire, immédiate et réversible** : passer le dépôt en **privé** (Paramètres du dépôt → Visibilité) en attendant le nettoyage, pour que seuls ses membres y aient accès. 1. **Retrait immédiat du suivi git** (commit sur `dev`) de tout `.ressources/OLD_app/`, ou au minimum des fichiers listés ci-dessus. Ajouter `.ressources/OLD_app/` au `.gitignore`. 2. **Archivage hors git** de l'ancien outil, dans un espace documentaire à accès restreint, s'il doit rester consultable comme référence. 3. **Référence fonctionnelle** : si un exemple d'export réel reste utile, en ajouter une version **anonymisée** (numéros et IP remplacés) dans `internal/cdr/testdata/`, et mettre à jour la mention dans `_projet/design.md` via l'agent `1-architecte.md`. 4. **Purge de l'historique** avec `git filter-repo --path .ressources/OLD_app --invert-paths`, puis push forcé de `dev` et `main`. C'est une **opération destructive** : elle réécrit tous les SHA et impose de prévenir chaque détenteur de clone, qui devra recloner. Elle demande une confirmation explicite de l'utilisateur avant exécution. Le coût reste faible tant que le dépôt est jeune. 5. **Information du référent RGPD / DPO**, qui jugera s'il faut une trace au registre des traitements. ## Sévérité proposée **Élevée.** Il y a conservation durable et diffusion interne de données personnelles de clients, en contradiction avec les documents de référence. L'exposition reste limitée aux personnes qui ont accès au dépôt, et les fichiers ne sont pas dans l'image. ## Critères de validation - [ ] Le dépôt est passé en privé, au moins jusqu'à la fin de la purge. - [ ] `git ls-files .ressources/OLD_app` ne renvoie plus rien sur `dev` et sur `main`. - [ ] `.gitignore` contient `.ressources/OLD_app/`. - [ ] Après la purge, `git log --all -- .ressources/OLD_app` ne renvoie plus rien sur le dépôt distant. - [ ] `go test ./...` reste vert. - [ ] `_projet/design.md` ne cite plus de fichier retiré, ou cite son remplaçant anonymisé. - [ ] Le DPO ou référent RGPD a été informé (date consignée dans l'issue). ## Priorité proposée **Haute** : à traiter en premier. Plus on attend, plus la purge de l'historique coûte cher, et la contradiction avec le RGPD est directe. ## Périmètre estimé - Zone concernée : sécurité / infrastructure (dépôt git) / documentation - Impact attendu : étendu (réécriture de l'historique, reclonage nécessaire pour tous) ## Questions ouvertes - Faut-il conserver l'ancien outil quelque part, et si oui, où, avec quel accès ? - Hypothèse : l'instance Forgejo `git.bvcesctoulouse.com` n'est peut-être pas hébergée sous maîtrise Orange Business. À confirmer : si c'est le cas, la priorité de la purge augmente. - Qui détient aujourd'hui un clone du dépôt, pour prévenir chacun avant la purge ? ## Labels proposés - `type:security` - `priority:high` - `area:security` - `area:infra`
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OneXpertise/PlugAnalytics#2
No description provided.