Elio Darras
FreelanceEn production

Refonte d'une application de santé · AP-HP

Audit de sécurité et sécurisation d'une application hospitalière

aphp-refonte-sante.local
Interface réelle · données fictives
Interface réelle reconstituée, données entièrement fictives.

Étude de cas. Aucune intégration, aucune capture, aucune donnée réelle.

Rôle

Freelance

Une application utilisée par douze centres hospitaliers pour délivrer des certificats d'aptitude sportive aux enfants atteints du syndrome de Marfan. Audit complet d'un socle hors support, sécurisation d'urgence testée, et proposition de refonte vers Symfony 7, PHP 8 et PostgreSQL. Présentée en étude de cas : les écrans sont reconstitués, avec des données fictives.

Ce qu'il y a dedans

  • Audit de sécurité de 23 pages : six failles majeures, 60 vulnérabilités publiées, chaîne de construction réparée.
  • Branche de sécurisation d'urgence : 12 commits, 69 tests verts, cloisonnement par centre, anti-CSRF, secrets sortis du dépôt.
  • Scripts de sauvegarde chiffrée, de restauration et de déploiement, plan en trois fenêtres.
  • Note pour le DPO et cartographie des données personnelles.
  • Refonte proposée vers Symfony 7.4, PHP 8.3, PostgreSQL 16 et Docker, avec historique et journal des actions.

En détail

01À quoi sert l'application

Un enfant atteint du syndrome de Marfan ne peut pas faire n'importe quel sport à l'école. Un certificat d'inaptitude vague l'exclut de tout, alors qu'il pourrait pratiquer une bonne partie des activités. L'application transforme ça en décision précise et reproductible : trois spécialistes répondent chacun à un questionnaire, l'application croise les réponses avec un référentiel d'activités du programme scolaire, et produit un certificat PDF qui liste, sport par sport, ce qui est autorisé, pour l'année en cours et la suivante.

Usage réel : environ 200 à 260 certificats par an depuis 2019, sur 12 centres hospitaliers, 52 comptes, 268 dossiers et 1 313 certificats produits.

02Le moteur d'aptitude

Quatre profils : super-administrateur, administrateur de centre, secrétariat, et spécialiste en cardiologie, ophtalmologie ou rhumatologie-pédiatrie, qui ne peut ouvrir que le questionnaire de sa spécialité. Tant qu'un seul questionnaire est incomplet, la génération n'apparaît pas ; une fois le PDF généré, les questionnaires ne sont plus modifiables.

Le cœur métier tient en une cinquantaine de lignes. Pour chaque activité du niveau scolaire et du genre de l'enfant : si aucune réponse de cardiologie ne l'autorise, elle est interdite d'office, l'aorte prime. Sinon, une seule contre-indication donnée par un spécialiste suffit à la refuser. Toute l'intelligence est dans la table de correspondance réponse vers autorisation, administrée par le super-admin ; le code ne fait qu'appliquer.

03L'audit

Symfony 4.2, PHP 7.2, PostgreSQL 9.6 et Debian 9 sur un VPS OVH : tout le socle hors support, 60 vulnérabilités publiées dont 5 critiques, une chaîne de construction morte que l'audit a dû réparer pour pouvoir reconstruire l'image, aucune sauvegarde, et un envoi de mail cassé depuis 2022 qui empêchait aussi l'effacement automatique des dossiers après envoi.

Six failles majeures : certificats accessibles sans connexion, base et Adminer ouverts sur Internet, mots de passe en clair dans le code, mot de passe renvoyé en clair par e-mail, aucun cloisonnement entre centres, actions destructrices déclenchables par un simple lien. L'audit a aussi relevé que le champ « identifiant hospitalier » contenait en pratique le nom et le prénom de l'enfant.

Livré : 23 pages avec relevés reproductibles, six devis, un comparatif, un contrat de maintenance, une note pour le DPO et une checklist de recette par rôle.

04La sécurisation et la suite

Une branche de sécurisation d'urgence, 12 commits et 69 tests automatisés verts : certificats et logos hors zone web avec noms aléatoires et téléchargement authentifié, cloisonnement par centre sur 14 actions, jeton anti-CSRF sur 12 routes, mot de passe retiré des e-mails, secrets sortis du dépôt, production sans Adminer ni port de base exposé, nginx durci, plus les scripts de sauvegarde chiffrée, de restauration et de déploiement.

Le déploiement suit un plan en trois fenêtres courtes sur le serveur, une répétition générale sur une réplique locale de la production, une recette par rôle et un compte rendu. La suite proposée est une refonte complète vers Symfony 7, PHP 8, PostgreSQL 16 et Docker, avec un historique des certificats et un journal des actions, qui n'existent pas aujourd'hui.

Présenté en étude de cas : c'est une application de santé, aucune donnée réelle n'est montrée.