Rapport d'audit stratégique — confidentiel

Audit technique, fonctionnel et sécurité de la plateforme DCP

État réel de la plateforme, risques pour l'organisation, mesures urgentes et trajectoire de transformation recommandée — Direction du Contrôle de la Performance, Direction Générale du Contrôle Budgétaire et Financier du Gabon.

ClientDCP / DGCBF — République Gabonaise
PrestataireBinaire SAS — binaire.tech
PérimètreCode source Laravel + sauvegardes SQL
NatureAudit statique, sans exploitation destructive
Niveau de risque global ÉLEVÉ
Sécurité
CRITIQUE
Contrôle des accès
CRITIQUE
Architecture
À RENFORCER
Dette technique
IMPORTANTE
Données
RISQUE À MAÎTRISER
Infrastructure
DURCISSEMENT NÉCESSAIRE

01 — Pour le décideur

Synthèse exécutive

La plateforme répond à un besoin métier réel et dispose de plusieurs fondations techniques positives — mais plusieurs mécanismes critiques de sécurité et de gouvernance doivent être renforcés avant de considérer la plateforme comme durablement adaptée à un usage administratif sensible.

✓ Ce qui fonctionne

Modèle métier cohérent et fidèle à l'organisation budgétaire réelle, technologies à jour (Laravel 11, Backpack 6.7), mots de passe correctement hachés, protection CSRF active, journal d'audit métier déjà en place.

✗ Ce qui expose l'organisation

Le contrôle d'accès n'est pas effectivement appliqué côté serveur : le système ne garantit pas que chaque opération sensible est réalisée par un utilisateur disposant des habilitations correspondantes. Ce constat dépasse la simple ergonomie d'interface.

Ce que ce rapport établit

  • Un diagnostic technique complet, chaque constat étant relié à une preuve vérifiable (code source, base de données, ou point à confirmer explicitement en production).
  • Une évaluation des risques réels pour l'organisation — pas seulement des anomalies de code — avec leurs impacts potentiels sur la confidentialité, l'intégrité et la disponibilité des données budgétaires.
  • Une matrice de priorisation actionnable (section 13) et une liste de mesures à traiter sans attendre une éventuelle modernisation (section 14).
  • Une trajectoire de transformation en trois horizons, non une réécriture brutale (section 19).

Recommandation en un regard

Binaire SAS recommande une démarche en deux temps : (1) sécurisation immédiate de l'existant pour traiter les risques critiques identifiés, puis (2) une transformation progressive vers une architecture 3 tiers sécurisée intégrant les principes Zero Trust. Le détail de cette recommandation est développé en conclusion (section 23).

02 — Présentation de la mission

Mission & périmètre

Binaire SAS a été mandatée par la Direction du Contrôle de la Performance (DCP) de la DGCBF pour réaliser un audit indépendant de l'existant de sa plateforme de suivi de la performance budgétaire, développée sous Laravel/PHP. Cette première phase vise exclusivement à comprendre, auditer et documenter la solution en place, avant toute décision de modernisation.

Périmètre analysé : application Laravel 11 (PHP 8.2) du domaine dcp.dgcbf.online (contrôleurs, modèles, vues, migrations, configuration), deux sauvegardes de bases de données MySQL/MariaDB (dcp — ancien schéma, et dcp_new — base active), ainsi que les fichiers de dépendances et de configuration. Un second domaine présent dans la sauvegarde (page de parking par défaut) a été exclu, hors périmètre applicatif.

Ce que cette mission n'est pas : ni un test d'intrusion actif, ni un plan de migration détaillé. Ces deux exercices, s'ils sont engagés, feront l'objet de missions distinctes.

03 — Méthodologie

Méthodologie

Analyse statique ciblée : cartographie du framework et des dépendances, lecture des fichiers à forte valeur d'information (contrôleurs, modèles, middlewares, migrations, configuration), recherches par mots clés pour les risques de sécurité, inspection structurelle de la base de données. Chaque constat de ce rapport est relié à une preuve technique précise.

Principe de rigueur : aucune vulnérabilité n'est déclarée sans élément concret. Lorsque l'analyse statique ne permet pas de conclure, ce rapport emploie explicitement la formule « À confirmer par vérification sur l'environnement de production ». Pour les scénarios d'attaque non testés (l'audit est statique, sans exploitation), les termes « scénario potentiel » et « impact potentiel » sont utilisés systématiquement — jamais présentés comme une compromission avérée.
🔎 Preuve : code source 🗄 Preuve : base SQL ⚠ À confirmer sur production

04 — Ce que ces failles signifient pour l'organisation

Risques majeurs pour l'organisation

Les trois constats suivants ne sont pas de simples anomalies de code : ils déterminent si l'organisation peut aujourd'hui garantir que ses données budgétaires et administratives sont accédées, modifiées et conservées par les seules personnes habilitées.

VULN-001
Défaillance critique du contrôle d'accès
CRITIQUEP0 — Immédiat
Constat
La fonction censée vérifier qu'un utilisateur est administrateur (CheckIfAdmin::checkIfUserIsAdmin()) retourne systématiquement true, sans aucune vérification réelle. Chaque formulaire de validation (FormRequest::authorize()) ne vérifie que la connexion de l'utilisateur, jamais son rôle. Le middleware alternatif qui aurait pu appliquer un contrôle par rôle (CheckUserRole) n'est monté sur aucune route.
Preuve
Preuve : code source app/Http/Middleware/CheckIfAdmin.php:31, config/backpack/base.php:114, 13 classes app/Http/Requests/*.php, absence totale de app/Policies.
Scénario potentiel
Un utilisateur authentifié disposant d'un rôle limité (ex. contributeur d'une direction) pourrait potentiellement, via les URL du back-office, accéder aux fonctions réservées à un rôle supérieur : gestion des utilisateurs et des rôles, modification des données budgétaires d'une autre direction, suppression de plans d'action ou d'activités.
Impact potentiel
Modification ou suppression non autorisée de données ; modification de données hors périmètre ; création ou modification de comptes et de rôles ; atteinte à l'intégrité des données budgétaires ; perte de confiance dans les informations produites par la plateforme.
Périmètre concerné
L'ensemble des routes d'administration (/admin/*) : utilisateurs, rôles, entités, plans d'action, crédits, activités.
Recommandation
Implémenter des Policies Laravel par ressource sensible, corriger ou supprimer CheckIfAdmin, ajouter des tests de non-régression sur le contrôle d'accès.
Le problème dépasse la simple visibilité d'une interface : le système ne garantit pas aujourd'hui que chaque opération sensible est réalisée par un utilisateur disposant des habilitations correspondantes. Aucune exploitation n'a été réalisée — l'audit est statique.
VULN-002
Exposition de secrets de production
HAUTEP0 — Immédiat
Constat
Le fichier .env réel (non l'exemple) est présent dans la sauvegarde transmise et contient en clair la clé applicative (APP_KEY) et les identifiants complets de connexion à la base de données de production. La configuration observée montre également APP_DEBUG=true combiné à une URL de production.
Preuve
Preuve : code source .env:4-5,7,25-30 — correctement exclu de Git (.gitignore), donc constat propre à cette sauvegarde/transmission, pas à une fuite via le dépôt.
Scénario potentiel
Secret exposé→ compromission potentielle→ accès à une ressource→ accès aux données→ altération / extraction potentielle
Ce scénario n'a pas été exécuté ni testé — il illustre la conséquence logique d'une divulgation du secret, pas une attaque réalisée.
Impact potentiel
Accès direct à la base de données de production en cas de divulgation du secret ; si le mode debug est actif en production, divulgation d'informations techniques (requêtes SQL, chemins serveur) à tout visiteur en cas d'erreur applicative.
Urgence
Rotation immédiate des secrets après toute transmission de sauvegarde, quel que soit le destinataire. À confirmer sur production : valeur réelle actuelle de APP_DEBUG
Mesure corrective
Régénérer APP_KEY et le mot de passe de base de données ; vérifier et forcer APP_DEBUG=false en production ; à terme, gestion des secrets via un coffre-fort dédié plutôt qu'un fichier en clair.
VULN-003
Mot de passe par défaut prévisible
HAUTEP1 — Court terme
Constat
Tout utilisateur créé sans mot de passe explicite se voit attribuer un mot de passe fixe, codé en dur dans le code source (haché ensuite en bcrypt, ce qui est correct, mais la valeur en clair est visible dans le code et donc dans toute copie du projet).
Preuve
Preuve : code source app/Models/User.php:59-63.
Scénario potentiel
Un compte créé en masse (import d'agents) et non encore activé par son titulaire pourrait potentiellement être accédé par un tiers connaissant cette valeur par défaut, notamment lorsque l'identifiant de connexion est une adresse e-mail personnelle déjà connue.
Impact potentiel
Usurpation de compte ; actions réalisées dans le système sous une identité autre que celle de l'auteur réel, avec les conséquences de traçabilité et de responsabilité que cela implique sur des données budgétaires.
Recommandation
Génération d'un mot de passe aléatoire à usage unique par utilisateur, envoyé par un canal sécurisé avec lien d'activation à expiration courte, et changement de mot de passe forcé à la première connexion.

05 — Le cadre d'analyse

Les trois dimensions de la sécurité

Tout risque identifié dans ce rapport se rattache à l'une de ces trois dimensions. Pour une plateforme de suivi budgétaire, l'intégrité des données mérite une attention particulière : une donnée budgétaire modifiée sans autorisation ou de façon incohérente peut fausser une décision, même sans qu'aucune donnée n'ait « fuité ».

Confidentialité

Qui peut accéder aux informations ?

Aujourd'hui non pleinement maîtrisée : contrôle d'accès non appliqué (VULN-001) et secrets de production exposés dans la sauvegarde (VULN-002).

Intégrité Priorité

Qui peut modifier les informations ?

C'est la dimension la plus directement affectée : le contrôle d'accès défaillant (VULN-001) permet potentiellement une modification non autorisée des données budgétaires, sans qu'aucun test automatisé ne protège contre une régression (section 11), et sans contrainte d'intégrité sur la table financière credits (section 09).

Disponibilité

La plateforme peut-elle rester opérationnelle ?

Hébergement mutualisé standard, aucun mécanisme de supervision ni de mise en cache identifié dans le code. À confirmer sur production : politique de sauvegarde et de continuité effective.

06 — État des lieux technique

Architecture existante

Application monolithique Laravel 11, structurée autour du package d'administration Backpack/CRUD 6.7, qui génère l'essentiel de l'interface. Pas de séparation frontend/backend au sens moderne : les vues sont des templates Blade rendus côté serveur. Preuve : code source

Navigateur │ HTTP (Blade / formulaires) ▼ Hébergement mutualisé (Apache/LiteSpeed — Hostinger) ▼ Laravel 11 monolithique ├─ 18 contrôleurs (CRUD + 4 contrôleurs "manager" de 550 à 926 lignes) ├─ 16 modèles Eloquent ├─ 233 vues Blade (thème Backpack Tabler) └─ Aucune couche Service / Repository ▼ MySQL/MariaDB — base active "dcp_new" (29 tables)

Notes par axe

Authentification
Bon
Organisation Laravel
Moyen
Frontend / Backend
Moyen
Séparation des responsabilités
Faible
Couplage entre modules
Faible
Autorisation
Critique

Signe fort d'évolution non maîtrisée : deux modèles de hiérarchie coexistent dans la base (l'ancien couple Ministère/Direction, et une table générique entities auto-référencée), doublés de trois tables pivot distinctes reliant un utilisateur à son périmètre et à son rôle — principale source de risque d'incohérence fonctionnelle identifiée.

07 — Ce que fait réellement l'application

Analyse fonctionnelle

Domaine métier reconstruit à partir du code, hiérarchie à six niveaux :

Ministère → Direction → Mission → Programme (Plan d'action) → Objectif → Activité → Sous-activité (suivi trimestriel) Axe budgétaire parallèle : BOP (Budget Opérationnel de Programme) → UO (Unité Opérationnelle) → Crédits répartis / ordonnancés / payés / disponibles, par trimestre
Fonctionnalités confirmées par preuve dans le code (extrait)
FonctionnalitéUtilisateursCriticité
Suivi budgétaire (crédits par BOP/UO/trimestre)DCP, responsables BOPCritique
Gestion des utilisateurs, rôles, affectationsAdminCritique
Tableaux de bord BOP / Programme / MissionResponsables par niveauHaute
Gestion Ministères / Directions / Missions / Plans d'actionAdmin, gestionnairesHaute
Gestion Activités / Sous-activités (édition en ligne, validation trimestrielle)Directions, contributeursHaute
Journal d'audit métierAdminMoyenne
Recherche d'utilisateur (API)Tous (endpoint public)Faible

Anomalies fonctionnelles identifiées

  • Trois systèmes de rattachement utilisateur↔périmètre coexistants : selon l'écran, l'application peut afficher des données différentes pour un même utilisateur.
  • Code et vues « Old » laissés en production, source de confusion sur ce qui est réellement actif.
  • Totaux de crédits stockés sans mécanisme garantissant leur cohérence avec le détail trimestriel.

08 — Détail technique

Audit sécurité

Les trois constats les plus critiques (VULN-001 à VULN-003) sont détaillés en fiche section 04. Le tableau ci-dessous couvre l'ensemble des constats de sécurité, y compris ceux de gravité moindre.

Constats de sécurité par gravité
Réf.GravitéConstatComposantPreuve
VULN-001CritiqueContrôle d'accès non appliqué (escalade de privilèges)Middlewares / FormRequestscode
VULN-003HauteMot de passe par défaut prévisible, codé en durModèle Usercode
VULN-002HauteSecrets de production en clair dans la sauvegarde transmise.envcode
R-004HauteMode debug potentiellement actif en productionConfiguration applicativeà confirmer
R-009MoyenneEndpoint API sans authentification exposant des noms d'utilisateursroutes/api.phpcode
R-012FaibleRequêtes SQL construites par interpolation (non exploitable en l'état, filtrage en amont)3 modèles Eloquentcode

Points vérifiés sans anomalie détectée

  • Mots de passe hachés en bcrypt — conforme aux bonnes pratiques.
  • Aucune désactivation de la protection CSRF trouvée.
  • Aucun mass assignment ouvert ($guarded = []) sur les modèles.
  • Aucune injection SQL exploitable trouvée dans le code applicatif propre.
À confirmer sur production Configuration TLS/HTTPS effective, en-têtes de sécurité HTTP, état réel du mode debug — non déterminables à partir de la seule sauvegarde.

09 — Structure et intégrité

Audit base de données

Preuve : base SQL La base active (dcp_new, 29 tables, MariaDB 11.8) est globalement bien construite : clés primaires, étrangères et index correctement posés sur la majorité des tables métier.

Exception notable : la table credits — qui porte l'intégralité des données financières — ne comporte aucune clé étrangère ni aucun index secondaire, alors que ses colonnes de rattachement sont systématiquement utilisées dans les requêtes des tableaux de bord. Risque : lignes orphelines possibles et ralentissement progressif avec la croissance du volume.
ministries ──1:n── missions ──1:n── objectives directions ──n:1── ministries entities (auto-référencée) : ministere | mission | programme | bop | uo | direction action_plans ──n:1── missions activities ──n:1── action_plans, objectives, entities(direction) sub_activities ──n:1── activities credits ──n:1── action_plans, directions, bops, unités opérationnelles [ SANS clé étrangère ] users ──n:n── directions (table pivot 1/3) users ──n:n── roles (table pivot 2/3) users ──n:n── entities (table pivot 3/3 — redondante avec les deux précédentes)

Bonnes pratiques observées : montants financiers typés en decimal(15,2) (pas de float), usage cohérent des clés primaires bigint unsigned. Les deux dumps contiennent des données à caractère personnel réelles — non reproduites dans ce rapport, à traiter avec la même confidentialité qu'une base de production.

10 — Points de vigilance, pas des mesures

Audit performance

Aucun environnement d'exécution n'étant disponible, cette section liste des risques identifiés dans le code, jamais des mesures réelles.

  • Agrégations financières sur table non indexée — les requêtes de somme sur les crédits s'exécuteront en parcours complet de table à mesure que le volume augmente.
  • Logique dupliquée dans 4 contrôleurs — tout correctif de performance doit être répliqué manuellement à 4 endroits.
  • Absence de cache applicatif sur les tableaux de bord.
  • Traitement 100% synchrone — l'infrastructure de file d'attente est provisionnée en base mais inutilisée dans le code.

Contexte atténuant : le volume de données actuel reste celui d'un environnement pilote — ces risques ne deviendront probablement sensibles qu'avec la croissance des exercices budgétaires.

11 — Coût des évolutions futures

Qualité et dette technique

Niveau de dette technique : Importante. Absence totale de tests automatisés sur une application qui gère des données budgétaires officielles, doublons structurels de modèle de données non résolus, logique métier dupliquée dans plusieurs contrôleurs volumineux (jusqu'à 926 lignes), et une faille de contrôle d'accès critique directement issue d'un raccourci de développement resté en configuration active.
AxeConstat
Tests automatisésAbsents (fichiers d'exemple du squelette Laravel, jamais modifiés)
Taille des contrôleurs4 fichiers dépassent 550 lignes, jusqu'à 926 lignes
DuplicationLogique de calcul budgétaire répétée à l'identique dans 4 contrôleurs
Code mortFichiers et vues « Old », méthode non appelée, middleware jamais monté
DocumentationREADME générique du squelette Laravel, aucune documentation propre au projet

12 — Hébergement et déploiement

Audit infrastructure

Confirmé par les fichiers

Hébergement mutualisé cPanel/Imunify (Hostinger) ; domaine dcp.dgcbf.online ; base MariaDB colocalisée avec l'application ; déploiement manuel (aucun pipeline CI/CD trouvé).

Nécessite une vérification serveur

Version PHP réellement exécutée, configuration TLS/HTTPS effective, valeur réelle du mode debug en production, politique de sauvegarde automatisée, permissions effectives des dossiers applicatifs.

13 — Vue consolidée et actionnable

Matrice des risques

Chaque risque est relié à une action corrective, une priorité (P0 à P3) et un horizon de traitement recommandé.

IDDomaineRisquePreuveProbabilitéImpactCriticitéAction correctivePriorité
VULN-001SécuritéContrôle d'accès non appliquécodeHauteCritiqueCritiquePolicies Laravel par ressourceP0
VULN-002SécuritéSecrets de production exposéscodeHaute (à chaque transmission)HauteHauteRotation immédiate des secretsP0
R-004SécuritéMode debug potentiellement actif en prod.à confirmerNon déterminéeHauteHauteVérifier / forcer APP_DEBUG=falseP0
R-006InfrastructurePolitique de sauvegarde non vérifiéeà confirmerNon déterminéeHauteHauteVérifier / mettre en place sauvegardes automatiséesP0
VULN-003SécuritéMot de passe par défaut prévisiblecodeMoyenneHauteHauteProcessus d'activation sécuriséP1
R-005QualitéAbsence de tests automatiséscodeHauteHauteHauteSuite de tests sur parcours critiquesP1
R-009SécuritéEndpoint API public non authentifiécodeHauteFaibleFaible/Moy.Ajouter authentification + throttleP1
R-007Données / Perf.Table credits sans clé étrangère ni indexSQLMoyenneMoyenneMoyenneAjouter FK + indexP2
R-008Architecture3 modèles de rattachement concurrentsSQL codeMoyenneMoyenneMoyenneUnifier le modèle de donnéesP2
R-010QualitéLogique métier dupliquée (4 contrôleurs)codeHauteMoyenneMoyenneFactoriser en service dédiéP2
R-011GouvernanceComptes institutionnels sur e-mails personnelsSQLHaute (déjà en place)MoyenneMoyenneMigrer vers identités institutionnellesP2
R-014QualitéAbsence de documentation projetcodeHauteMoyenneMoyenneDocumenter modèle métier et rôlesP2
R-012SécuritéRequêtes SQL par interpolationcodeFaibleMoyenneFaibleParamétrer les requêtesP3
R-013QualitéCode mort / fichiers « Old »codeHauteFaibleFaibleNettoyage du code mortP3
R-015PerformanceAbsence de cache / traitement synchronecodeMoyenneFaibleFaibleCache applicatif, jobs asynchronesP3

14 — À traiter avant toute autre décision

Urgences de sécurisation

Ces mesures ne doivent pas attendre une éventuelle migration vers une nouvelle architecture — elles s'appliquent sur la plateforme actuelle, en service aujourd'hui.

Mesures immédiates (Horizon 0)

  • Correction du contrôle d'accès (Policies Laravel)
  • Rotation des secrets exposés
  • Suppression des mots de passe par défaut codés en dur
  • Vérification du mode debug en production
  • Vérification des comptes et privilèges existants

 

  • Vérification des sauvegardes (existence, fréquence, test de restauration)
  • Vérification de l'exposition réseau (HTTPS, en-têtes de sécurité)
  • Renforcement de la journalisation des actions sensibles
  • Revue des comptes à privilèges (super-admin, admin)
Message clé : la modernisation future ne doit pas servir de prétexte pour laisser une vulnérabilité critique active sur l'existant. VULN-001 (contrôle d'accès) est traitable sur la plateforme actuelle, sans attendre un projet de réécriture.

15

Forces & faiblesses

Points forts

  • Modèle métier cohérent, fidèle à l'organisation réelle
  • Technologies récentes et éprouvées (Laravel 11.36, Backpack 6.7.45)
  • Mots de passe hachés correctement, CSRF actif
  • Journal d'audit métier déjà existant
  • Montants financiers typés en decimal

Points faibles

  • Contrôle d'accès non appliqué au niveau serveur
  • Aucun test automatisé
  • Trois modèles de rattachement concurrents
  • Logique métier dupliquée dans 4 contrôleurs volumineux
  • Secrets et mot de passe par défaut en clair dans le code/la config

16 — Vision, pas décision automatique

Architecture cible proposée

L'orientation React / Express / MongoDB n'est pas retenue parce qu'elle serait « plus moderne », mais parce qu'elle répond à des objectifs architecturaux précis :

Séparation des responsabilités
Réduction du couplage
API centralisée
Contrôle d'accès centralisé
Meilleure testabilité
Meilleure évolutivité
Cloisonnement réseau
Réduction de la surface d'attaque

Comparaison des architectures

Architecture actuelle

Navigateur ↓ Laravel monolithique ↓ MariaDB

Architecture cible

Utilisateur ↓ VPN / ZTNA ↓ Reverse Proxy / point d'entrée sécurisé ↓ React (frontend) ↓ HTTPS API Express (backend) ↓ TLS MongoDB (réseau privé)

Comparaison objective avec l'existant

CritèreExistantCible
Génération d'interface d'administrationBackpack CRUD : point fort réel, rapideAucun générateur équivalent — reconstruction manuelle
Intégrité des données financièresRelationnel/ACID, nativement adaptéDocumentaire — discipline applicative accrue nécessaire
Sécurité par défautFaille actuelle, mais corrigible sans réécritureConception Zero Trust possible dès le départ, non garantie par le seul choix technique
Coût et délaiCorrection ciblée, coût mesuréRéécriture intégrale — effort significatif
HébergementCompatible mutualisé, faible coûtInfrastructure Node/Mongo dédiée nécessaire
Cette architecture n'est pas automatiquement meilleure. Une bonne partie des problèmes identifiés peuvent être corrigés sur la plateforme actuelle, à un coût nettement inférieur à une réécriture complète.

17 — Une distinction essentielle

VPN vs Zero Trust

VPN ≠ Zero Trust. Le VPN est une composante possible d'une stratégie d'accès sécurisé — il n'en constitue ni la définition, ni une garantie suffisante à lui seul.

Ce qu'apporte un VPN

  • Réduction de la surface d'exposition réseau
  • Chiffrement du transport entre le poste et le réseau interne
  • Restriction géographique/réseau de l'accès

Une fois connecté au VPN, un utilisateur est souvent implicitement fait confiance pour tout ce qui est accessible sur ce réseau — c'est précisément ce que le Zero Trust remet en cause.

Ce qu'exige le Zero Trust

  • Vérification explicite de l'identité, à chaque requête
  • Principe du moindre privilège
  • Contrôle d'accès par ressource et par action (pas par réseau)
  • Authentification forte, MFA pour les comptes sensibles
  • Segmentation, chiffrement, journalisation, surveillance continue
  • Aucune confiance implicite, y compris en interne

Dans la cible proposée (section 16), le VPN/ZTNA reste une couche pertinente pour restreindre l'exposition réseau de l'interface d'administration — mais le contrôle d'accès réel doit être appliqué au niveau de l'API, indépendamment du réseau d'où provient la requête.

18 — Traduction architecturale

Architecture Zero Trust — vue d'ensemble

Utilisateurs ↓ VPN / ZTNA ↓ Identity & Access Management ↓ Reverse Proxy / API Gateway ↓ Frontend React ↓ API Express ├── Authentification ├── Autorisation RBAC/ABAC ├── Validation ├── Logique métier └── Audit ↓ Base MongoDB privée
Never trust — Always verify
Least privilege
Assume breach
Continuous verification

19 — Pas une réécriture brutale

Trajectoire de modernisation — trois horizons

Horizon 0

Sécurisation immédiate

0 – 30 jours
  • Traiter les risques Critique et Haute (VULN-001 à 003, R-004, R-006)
  • Voir section 14 « Urgences de sécurisation »
Horizon 1

Stabilisation

1 – 3 mois
  • Tests automatisés
  • Refactorisation (dédupliquer la logique métier)
  • Contrôle des accès consolidé
  • Documentation, CI/CD, supervision
  • Sauvegardes, durcissement infrastructure
Horizon 2

Transformation

Selon cadrage et validation DCP/DGCBF
  • Architecture 3 tiers — React, API Express, MongoDB
  • Segmentation, VPN/ZTNA, Zero Trust
  • Migration des données, nouveaux environnements
  • Supervision, déploiement sécurisé

20 — Ce que coûte le statu quo

Coût de l'inaction

Sans chiffrage financier inventé, le maintien de l'architecture actuelle sans action corrective a des conséquences prévisibles :

  • Maintien des risques de sécurité identifiés (VULN-001 à 003) sur une plateforme en service
  • Augmentation continue de la dette technique (section 11)
  • Coût croissant de chaque nouvelle évolution fonctionnelle
  • Risque de régression accru en l'absence de tests
  • Complexité croissante du modèle de données non unifié
  • Difficulté durable de contrôle des habilitations
  • Dépendance croissante à l'existant, rendant toute reprise plus coûteuse dans le temps
  • Difficulté d'intégration avec de futurs systèmes de l'administration
  • Difficulté à industrialiser les déploiements (absence de CI/CD observée)
  • Difficulté à appliquer une politique de sécurité homogène sur un socle hétérogène

21 — Plus qu'un changement de framework

Étendue potentielle du programme de transformation

La modernisation ne se résume pas à « remplacer Laravel par React/Express/MongoDB ». Un programme de transformation complet couvre potentiellement :

Audit approfondi
Conception fonctionnelle
Architecture
Modèle de données
API
Frontend
Sécurité
IAM
VPN / ZTNA
Migration des données
Tests
Recette
CI/CD
Infrastructure
Monitoring
Documentation
Accompagnement au changement

Aucun coût n'est chiffré dans ce rapport en l'absence de données permettant de le justifier — l'étape suivante recommandée est un atelier de cadrage dédié (section 23).

22 — De l'audit à la supervision

Feuille de route visuelle

Réalisé

AUDITER

Objectif : comprendre l'existant. Livrable : le présent rapport.

SÉCURISER

Objectif : fermer les risques Critique/Haute. Livrable : contrôle d'accès corrigé, secrets tournés (Horizon 0).

STABILISER

Objectif : réduire la dette technique. Livrable : tests, documentation, CI/CD (Horizon 1).

CONCEVOIR

Objectif : cadrer la cible. Livrable : atelier de cadrage fonctionnel, technique et budgétaire.

DÉVELOPPER

Objectif : construire la nouvelle plateforme. Livrable : frontend React, API Express, modèle MongoDB.

MIGRER

Objectif : transférer les données existantes. Livrable : plan de migration testé, double-run.

TESTER

Objectif : valider fonctionnellement et sécuritairement. Livrable : recette DCP/DGCBF, tests de sécurité.

DÉPLOYER

Objectif : mise en production maîtrisée. Livrable : environnements dev/recette/prod, déploiement sécurisé.

SUPERVISER

Objectif : garantir la continuité. Livrable : monitoring, journalisation, plan de sauvegarde.

23

Conclusion & recommandation

La plateforme DCP répond aujourd'hui à un besoin métier réel et bien modélisé, mais porte une faille de contrôle d'accès critique qui doit être corrigée sans attendre, ainsi qu'une dette technique importante qui limitera sa capacité d'évolution si elle n'est pas traitée.

Binaire SAS recommande une démarche en deux temps :
  1. Sécurisation immédiate de l'existant afin de traiter les risques critiques identifiés ;
  2. Lancement d'une démarche de transformation progressive vers une architecture 3 tiers sécurisée, intégrant les principes Zero Trust et un contrôle renforcé des accès.

La modernisation doit être cadrée par une étude fonctionnelle, technique, budgétaire et de migration avant son lancement — ce cadrage fait l'objet d'une mission distincte, non couverte par le présent audit. Binaire SAS se tient à la disposition de la DCP/DGCBF pour accompagner la priorisation et la mise en œuvre de ces recommandations.

↑ Retour en haut du rapport