Accueil / Entreprise / Fuite de données / Fuite de données concernant une quarantaine de Centres Hospitaliers Français.

Fuite de données concernant une quarantaine de Centres Hospitaliers Français.

Une fuite Internet peut rapidement intervenir si on n’y prend pas garde. Un fichier mal maîtrisé, sauvegardé n’importe comment, et c’est rapidement la catastrophe. Google, ainsi que d’autres moteurs de recherche, ne font pas la différence entre le document Excel en libre accès reprenant les recettes de Tata Jeannette, et le fichier regroupant plusieurs dizaines de Centres Hospitaliers Français, avec logins et mots de passe, permettant d’accéder à un espace informatique sensible, celui des patients reçus par les Urgences. Google les voit, donc pour lui, ils sont « libres » d’être référencés, sauvegardés en cache.

Voilà la mésaventure qui vient de toucher une société Française spécialisée dans la création de solutions informatiques de gestion des dossiers patients dédiée aux urgences. Un lecteur, Kyle, nous a alerté de cette fuite complétement folle. Lors d’une cherche d’informations qu’elle ne fût pas son étonnement de se retrouver nez-à-nez face à un fichier Excel intitulé InfosEtContacts.xls.

Si les premières lignes ne m’ont pas paru des plus perturbantes, les suivantes auraient eu de quoi faire tomber en syncope le premier SAMU/SMUR qui passait par là. Dans ce fichier, une liste de Centres Hospitaliers (Régionaux/Universitaires/…) : Saône, Brive, Besançon, Belfort, Beauvais, Amiens, R/Yon, La Rochelle, Gueret, Gentilly, St Ame, Blanc Mesnil, Forbach, Epinal, Dole, Senlis, Rennes, Provins, Guadeloupe, Neuilly, Nancy, Lille, Montpellier, Metz ou encore Lunéville.

Ce fichier relatait, avant d’être effacé du web (et de la cache Google, Ndr), les accès à distance (avec login et mot de passe en clairs) ; la prise de contrôle des serveurs (ip, vnc, accès, …), ouverture de session (avec ip et identifiants de connexion). Dans certains cas, l’accès à des bases de données avec ip, login et mot de passe. Bref, des centaines d’informations qui auraient pu faire de gros dégâts dans les mains d’internautes malveillants. Heureusement, du moins nous l’espérons, aucun pirate n’est passé par là.

Dès la découverte de la « chose », nous avons alerté le CERT A, l’ANSSI et la CNIL via le protocole d’alerte de ZATAZ.COM. Comme à son habitude, le Centre d’Expertise gouvernemental de Réponse et de Traitement des Attaques informatiques a répondu à notre alerte au quart de tour. Nous avons attendu que la fuite soit colmatée afin de vous relater ce gros, très gros problème.

Comment une telle fuite peut-elle être possible ?

Un dossier, sur le site internet officiel de cette entreprise, non protégé par un login et mot de passe. Un simple htaccess aurait suffi à réclamer les précieux identifiants de connexion. Un contrôle d’accès très simple à mettre en place pourtant. Cela aurait empêché Google, et la planète web entière, d’accéder aux informations.

Autre possibilité de sécurisation, qui nous semble la plus efficace chez DataSecuritybreach.fr : ne pas sauvegarder ce genre de données sur un espace connecté à Internet, et encore moins quand ce dernier est … le site web lui-même.C’est un peu comme si la Banque de France déposait des lingots d’or sur une table, dans la rue, à l’entrée de son bâtiment. Pas évident que les petits blocs jaunes restent sur place bien longtemps.

Pour finir, il est fortement conseillé, c’est la CNIL qui l’écrit, de chiffrer ce genre de contenu et de le sauvegarder dans un espace non disponible/accessible d’un simple clic de souris.

Étiquetté :

6 Commentaires

Nos partenaires




Actualités du mois

avril 2026
L M M J V S D
 12345
6789101112
13141516171819
20212223242526
27282930  

Articles en UNE

Actus zataz



Réseaux sociaux


Liste des sujets


<!-- Cyber'Émission ZATAZ — badge volant (déplaçable) + réduire/fermer -->
<div class="zataz-yt-float" id="zatazYtFloat" role="region" aria-label="Cyber'Émission ZATAZ">
  <div class="zataz-yt-float__bar" id="zatazYtBar">
    <span class="zataz-yt-float__title">Cyber'Émission ZATAZ</span>

    <div class="zataz-yt-float__actions">
      <button type="button" class="zataz-yt-float__btn" id="zatazYtMin" aria-label="Réduire">—</button>
      <button type="button" class="zataz-yt-float__btn zataz-yt-float__btn--close" id="zatazYtClose" aria-label="Fermer">×</button>
    </div>
  </div>

  <a class="zataz-yt-badge" href="https://www.youtube.com/@ZATAZCOM" target="_blank" rel="noopener noreferrer"
     aria-label="Regarder Cyber'Émission ZATAZ sur YouTube (nouvel onglet)">
    <span class="zataz-yt-badge__thumb" aria-hidden="true">
      <span class="zataz-yt-badge__play" aria-hidden="true"></span>
    </span>
  </a>
</div>

<style>
  .zataz-yt-float{
    position:fixed;
    right:18px;
    bottom:18px;
    z-index:99999;
    width:320px;
    max-width:calc(100vw - 36px);
    border-radius:14px;
    overflow:hidden;
    background:linear-gradient(135deg,#111827,#0b1220 55%,#111827);
    border:1px solid rgba(255,255,255,.12);
    box-shadow:0 14px 40px rgba(0,0,0,.35);
    transform:translateZ(0);
    user-select:none;
    touch-action:none; /* drag mobile */
  }

  /* Barre de drag + boutons */
  .zataz-yt-float__bar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
    padding:10px 10px 10px 12px;
    font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
    color:#fff;
    background:rgba(0,0,0,.18);
    border-bottom:1px solid rgba(255,255,255,.10);
    cursor:grab;
  }
  .zataz-yt-float__bar:active{ cursor:grabbing; }
  .zataz-yt-float__title{
    font-weight:800;
    letter-spacing:.2px;
    font-size:15px;
    line-height:1;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
  .zataz-yt-float__actions{ display:flex; gap:8px; }
  .zataz-yt-float__btn{
    appearance:none;
    border:1px solid rgba(255,255,255,.18);
    background:rgba(0,0,0,.28);
    color:#fff;
    width:32px;
    height:28px;
    border-radius:10px;
    font-weight:900;
    line-height:1;
    cursor:pointer;
    display:grid;
    place-items:center;
  }
  .zataz-yt-float__btn:hover{ background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.28); }
  .zataz-yt-float__btn--close:hover{ background:rgba(239,68,68,.22); border-color:rgba(239,68,68,.45); }

  /* Contenu (votre vignette) */
  .zataz-yt-badge{
    display:block;
    text-decoration:none;
    color:#fff;
  }
  .zataz-yt-badge__thumb{
    display:block;
    height:180px;
    background:#0f172a url("https://i.ytimg.com/vi/HUo8dnD6Swk/hqdefault.jpg") center/cover no-repeat;
    position:relative;
  }
  .zataz-yt-badge__play{
    position:absolute;
    left:50%;
    top:50%;
    width:54px;
    height:54px;
    margin:-27px 0 0 -27px;
    border-radius:999px;
    background:rgba(0,0,0,.55);
    border:1px solid rgba(255,255,255,.25);
    box-shadow:0 10px 22px rgba(0,0,0,.35);
  }
  .zataz-yt-badge__play:before{
    content:"";
    position:absolute;
    left:22px;
    top:16px;
    width:0;height:0;
    border-top:11px solid transparent;
    border-bottom:11px solid transparent;
    border-left:16px solid #fff;
  }

  .zataz-yt-float:hover{
    box-shadow:0 18px 55px rgba(0,0,0,.45);
    border-color:rgba(255,255,255,.18);
  }
  .zataz-yt-badge:active{ transform:scale(.99); }

  /* Etat réduit */
  .zataz-yt-float.is-min .zataz-yt-badge{ display:none; }
  .zataz-yt-float.is-min{ width:260px; }

  /* Mobile : plus compact */
  @media (max-width:480px){
    .zataz-yt-float{ width:280px; right:12px; bottom:12px; }
    .zataz-yt-badge__thumb{ height:158px; }
    .zataz-yt-float.is-min{ width:220px; }
  }
</style>

<script>
(() => {
  const box = document.getElementById('zatazYtFloat');
  const bar = document.getElementById('zatazYtBar');
  const btnMin = document.getElementById('zatazYtMin');
  const btnClose = document.getElementById('zatazYtClose');

  if (!box || !bar || !btnMin || !btnClose) return;

  // Réduire / restaurer
  btnMin.addEventListener('click', (e) => {
    e.stopPropagation();
    box.classList.toggle('is-min');
    btnMin.textContent = box.classList.contains('is-min') ? '▢' : '—';
    btnMin.setAttribute('aria-label', box.classList.contains('is-min') ? 'Restaurer' : 'Réduire');
  });

  // Fermer
  btnClose.addEventListener('click', (e) => {
    e.stopPropagation();
    box.remove();
  });

  // Drag (souris + tactile) via Pointer Events
  let dragging = false;
  let startX = 0, startY = 0;
  let startLeft = 0, startTop = 0;

  // Position initiale: on convertit right/bottom en left/top pour le drag
  const init = () => {
    const r = box.getBoundingClientRect();
    box.style.left = r.left + 'px';
    box.style.top  = r.top  + 'px';
    box.style.right = 'auto';
    box.style.bottom = 'auto';
  };
  init();

  const clamp = (v, min, max) => Math.min(Math.max(v, min), max);

  bar.addEventListener('pointerdown', (e) => {
    // pas de drag quand on clique sur les boutons
    if (e.target === btnMin || e.target === btnClose) return;

    dragging = true;
    bar.setPointerCapture(e.pointerId);

    const r = box.getBoundingClientRect();
    startX = e.clientX;
    startY = e.clientY;
    startLeft = r.left;
    startTop = r.top;

    e.preventDefault();
  });

  bar.addEventListener('pointermove', (e) => {
    if (!dragging) return;

    const dx = e.clientX - startX;
    const dy = e.clientY - startY;

    const r = box.getBoundingClientRect();
    const w = r.width;
    const h = r.height;

    const maxLeft = window.innerWidth - w - 8;
    const maxTop  = window.innerHeight - h - 8;

    box.style.left = clamp(startLeft + dx, 8, maxLeft) + 'px';
    box.style.top  = clamp(startTop + dy, 8, maxTop) + 'px';
  });

  const endDrag = () => { dragging = false; };
  bar.addEventListener('pointerup', endDrag);
  bar.addEventListener('pointercancel', endDrag);

  // Re-clamp au resize
  window.addEventListener('resize', () => {
    const r = box.getBoundingClientRect();
    const maxLeft = window.innerWidth - r.width - 8;
    const maxTop  = window.innerHeight - r.height - 8;
    box.style.left = clamp(r.left, 8, maxLeft) + 'px';
    box.style.top  = clamp(r.top, 8, maxTop) + 'px';
  });
})();
</script>