Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Audit CDC de juin 2016 — Analyse forensique de la branche « demo »

Éléments matériels, témoignage technique et questions restant à instruire — Juin 2016

Document établi à partir du dépôt git API-API-TAG-PACKAGER et des emails internes Qwant — Mars 2026


1. Objet de l'analyse

Le présent document analyse le dépôt git « API-API-TAG-PACKAGER » (code source de l'API front Qwant, framework CodeIgniter PHP) et des courriels internes relatifs à l'audit CDC/Cardiweb. Il établit qu'une branche nommée demo a été préparée pour une présentation et que l'appel direct à Bing y a été remplacé par un call fake à un endpoint interne dit « brain ». Il ne suffit pas, à lui seul, à établir le code effectivement montré, le backend de cet endpoint, ce que l'auditeur a compris, ni une qualification pénale.

Le courriel Cassar indique que la branche retire l'appel Bing de l'API et le remplace par un appel « fake » au brain, puis renvoie la réponse sans transformation pertinente. Le code PHP montre un endpoint nommé WebBrain, mais son nom n'identifie pas le programme backend. Stéphane Erard témoigne directement que cet endpoint aboutissait en réalité à Mozart, logiciel de classement des actualités modifié pour relayer Bing, dont Thomas Massière lui aurait montré le code. Une capture Jenkins corrobore l'existence et le conditionnement de Mozart ; le dépôt ou JAR backend, la configuration de service et les artefacts de déploiement restent à obtenir.

2. Contexte : l'audit CDC-DIDL / Cardiweb

Élément Détail
Mandant Caisse des Dépôts et Consignations (CDC), dans le cadre d'une due diligence avant investissement de 15 millions d'euros dans Qwant SAS
Auditeur Benjamin Dossat, Directeur Technique, Cardiweb (14 rue Auber, 75009 Paris)
Contacts CDC Cédric Clément, Marion Eymar, Nicolas Guerin (@caissedesdepots.fr)
Kick-off ~mi-mai 2016. Journée sur site prévue le 31 mai → reportée
Audit réel Durant juin 2016 (entre ~21 et ~28 juin d'après les emails)

3. La chaîne d'emails « Audit de code » (17-20 juin 2016)

Les captures Thunderbird du webmail Zimbra de Stéphane Erard (s.erard@qwant.com) établissent la chronologie suivante :

3.1. JC Chemin — 17 juin 2016, 20:44

Le CTO transfère à l'équipe technique (Vignaux, Luddeni, Massiere, Erard, Cassar, Corbi, Savinel, Laville) la liste des projets que Cardiweb souhaitait auditer. La liste mentionne séparément mozart, web-brain et l'API qwant_v2. Cela établit des désignations de projets demandés pour l'audit, pas l'autonomie, le backend ou le déploiement de chacun.

Email showing

3.2. Pierre Vignaux — 20 juin 2016, 09:25

Vignaux propose des intervenants pour chaque projet, puis pose une question révélatrice suivie d'une proposition opérationnelle :

La question « il faut préparer l'API avant » et la proposition d'une « branche à part » documentent une préparation spécifique du code destiné à la présentation. Elles sont compatibles avec l'hypothèse d'une démonstration distincte du fonctionnement courant. Elles ne prouvent toutefois pas, sans le dossier d'audit et le code effectivement remis, ce qui a été montré ni ce que l'auditeur en a déduit.

Email from Pierre Vignaux proposing people for audit and asking

3.3. Jonathan Cassar — 20 juin 2016, 09:53

Vingt-huit minutes plus tard, Cassar répond à toute l'équipe (JC Chemin en copie) :

« retiré le code d'appel a Bing » — « call fake » — « Comme demandé » — « juste un fake » — « Prez de l'api » (présentation pour l'audit)

Constat : la modification déporte l'appel de l'API vers un endpoint interne présenté comme le « brain » et renvoie sa réponse. Elle est compatible avec un relais ou un proxy ; le seul dépôt PHP ne révèle pas ce qui s'exécute derrière cet endpoint.

TÉMOIGNAGE TECHNIQUE DIRECT DE STÉPHANE ERARD : WebBrain n'aurait jamais été un logiciel distinct déployé en production. L'endpoint aurait abouti à Mozart, logiciel de ranking des actualités modifié par Thomas Massière pour relayer Bing. Thomas Massière lui aurait montré ce code.

Stéphane Erard déclare avoir créé le job CI et le paquet Mozart. La capture Jenkins DATA-MOZART-TAG-PACKAGER, reliée au dépôt data/mozart, corrobore l'existence du job et du paquet, mais pas à elle seule son auteur, le code Bing, le mapping de l'endpoint ou son déploiement.

Email from Jonathan Cassar saying

3.4. Stéphane Erard — 20 juin 2016, 10:36

Erard prépare les projets SonarQube (CI/QA) pour l'audit : FRONT/SEARCH, FRONT/BOARDS, FRONT/SEARCH-LITE, FRONT/BOARDS-LITE, INSTANT-ANSWERS (http://sonar.qwant.ci:9000/ (ouvre dans une nouvelle fenêtre)). Cela confirme que l'audit n'avait pas encore eu lieu.

Email about SONAR listing projects including FRONT-SEARCH, FRONT-BOARDS-LITE, INSTANT-ANSWERS with the demo branch code

3.5. Pierre Vignaux — 20 juin 2016, 10:51

La question « On a + droit sur la date JC ? » prouve que la visite d'audit n'avait pas encore eu lieu au 20 juin.

Email from Erard saying

Full email thread about code audit sonarqube showing Cassar's

4.1. Structure du dépôt

Paramètre Valeur
Repository API-API-TAG-PACKAGER (Qwant front API, CodeIgniter PHP)
Workflow Gitflow (feature branches → develop → prelive → master)
Tags 180+ (v1.13.0 à v1.32.1)
Déploiement Script bin/mep.sh — git clone + rsync vers serveurs de production

4.2. Commits de la branche « demo »

Date Événement
9 juin 2016 Premier commit : « get WebBrain results » (Jonathan Cassar)
21 juin 2016 Commit : « web brain aggregator »
22 juin 2016 Commit : « update webBrain/bing »
24 juin 2016 Nettoyage massif (201 373 lignes supprimées)
29 juin 2016 Merge : Pierre Vignaux merge demo → develop (commit f5e6e5fbe, MR !995)
30 juin 2016 Tag v1.19.0 : merge prelive → master ; tag de release, dont le déploiement effectif reste à corroborer

Diff total : 2 159 fichiers modifiés, 37 127 insertions, 201 373 suppressions

4.3. Modification de search_web.php

AVANT la branche demo — appel direct à Bing :

// Code original : appel direct à l'API Bing

APRÈS intégration — routage WebBrain inactif dans le tag master contrôlé :

$webBrainLocales = [];  // Tableau vide — 100% Bing

Constat : $webBrainLocales est initialisé à un tableau vide []. Aucune locale n'emprunte alors l'endpoint WebBrain dans ce chemin ; les défauts de cache sont routés vers Bing. Le commit 7354507 ajoute fr et de sur develop le 8 juillet, puis 0754dad les commente trois heures plus tard. Ces deux états sont intégrés ensemble avant le tag suivant : aucun tag master contrôlé ne porte WebBrain actif. Git ne prouve donc aucune activation de WebBrain en production.

4.4. Tags contenant la branche demo

Le merge de la branche demo (f5e6e5fbe) est contenu dans de nombreux tags de v1.19.0 à v1.32.1. Un tag ou un merge prelive → master documente une version de release ; il ne constitue pas, isolément, une preuve de mise en production. Dans les tags master contrôlés, webBrainLocales reste vide.

5. Corroboration : email Vignaux du 28 juin 2016

Cet email confirme que l'audit était encore en cours le 28 juin (« bientôt terminé »). La concordance chronologique rend possible que la branche demo ait servi à la présentation, mais le dépôt et les courriels ne prouvent pas seuls quel commit, quel écran ou quel backend ont effectivement été montrés.

6. Chronologie consolidée

17 juin 2016, 20:44     → JC Chemin envoie liste d'audit à l'équipe
20 juin 2016, 09:25     → Vignaux : « il faut préparer l'API » + « branche à part »
20 juin 2016, 09:53     → Cassar : « retiré le code d'appel a Bing, call fake »
20 juin 2016, 10:36     → Erard : préparation SonarQube
20 juin 2016, 10:51     → Vignaux : « On a + droit sur la date JC ? »
21-24 juin 2016         → Commits et nettoyage de la branche de démonstration
28 juin 2016            → Vignaux : audit « bientôt terminé »
29 juin 2016            → Merge demo → develop (f5e6e5fbe)
30 juin 2016            → Tag v1.19.0 — version de release, déploiement à corroborer

7. Hypothèses juridiques à faire instruire

Les qualifications ci-dessous ne sont pas établies par les seules pièces recensées. Elles supposeraient notamment de prouver le code et le backend effectivement présentés, les déclarations faites à Cardiweb/CDC, la compréhension et la décision de l'investisseur, l'intention de chaque personne et le lien entre une éventuelle tromperie et la remise de fonds.

7.1. Escroquerie (art. 313-1 CP)

  • Élément matériel à examiner : branche demo, retrait de l'appel Bing visible et call fake à un endpoint interne dans le contexte de l'audit ;
  • Éléments manquants : preuve de la présentation effective, déclarations de Qwant, rapport Cardiweb, connaissance de la CDC, caractère déterminant et intention ;
  • Remise ultérieure documentée : 15 millions d'euros d'investissement par la CDC en février 2017 ;
  • Limite : « comme demandé » ne suffit pas à identifier un ordre frauduleux, son auteur ou son objet exact.

7.2. Faux et usage de faux (art. 441-1 CP)

La branche demo modifie la visibilité de l'appel direct à Bing. Pour discuter un faux, il faudrait encore établir le document ou code effectivement présenté comme authentique, l'altération juridiquement pertinente de la vérité, son auteur, son intention et l'usage qui en a été fait. Le dépôt seul ne permet pas de conclure.

7.3. Participation (art. 121-6 et 121-7 CP)

Rôle Personne Détail
Rôle matériel documenté JC Chemin Transmet la liste d'audit et figure en copie ; aucun ordre frauduleux n'est établi par ce seul fait
Rôle matériel documenté Jonathan Cassar Développe la branche et emploie le mot fake ; l'intention juridique reste à établir
Rôle matériel documenté Pierre Vignaux Propose une branche à part et participe au merge ; la connaissance du but allégué reste à établir
Destinataire de courriels Frédéric Luddeni Figure en copie ; cette réception ne prouve aucune participation

8. Pièces jointes

  1. Pièce 1 — Email JC Chemin → équipe technique, 30 mai 2016 — programme audit CDC-DIDL (PDF Zimbra)
  2. Pièce 2 — Email JC Chemin, 17 juin 2016 — « Voici les projets que voulait auditer Cardiweb » (capture cardiweb_1.PNG)
  3. Pièce 3 — Email Pierre Vignaux, 20 juin 2016 09:25 — « il faut préparer l'API, branche à part ? » (capture cardiweb_2.PNG)
  4. Pièce 4 — Email Jonathan Cassar, 20 juin 2016 09:53 — « branche demo, retiré Bing, fake. Comme demandé. » (capture cardiweb_3.PNG)
  5. Pièce 5 — Email Stéphane Erard, 20 juin 2016 10:36 — préparation SonarQube (capture cardiweb_4.PNG)
  6. Pièce 6 — Email Pierre Vignaux, 20 juin 2016 10:51 — « On a + droit sur la date JC ? » (capture cardiweb_5.PNG)
  7. Pièce 7 — Email Pierre Vignaux → Stéphane Erard, 28 juin 2016 — « audit bientôt terminé » (Gmail)
  8. Pièce 8 — Extraction git : log branche « demo », diff search_web.php, liste des 125+ tags (v1.19.0 à v1.32.1)

Document établi à partir des pièces du dossier — Mars 2026


← Sommaire | ← Tribune | Décision CNIL →


Document compilé par Stéphane Erard — Mars 2026 — Contact : stephane.erard@proton.me

⬇ Download