Accueil / Cybersécurité / Securite informatique / De faux messages de clients mécontents visent des hôtels

De faux messages de clients mécontents visent des hôtels

Les experts de VADE viennent de découvrir des tentatives de fraudes, via des courriels piégés, s’attaquant spécifiquement aux hôtels. 

Les premiers messages envoyés ne contiennent pas forcément de pièces jointes ou de liens nuisibles, mais leur rédaction est telle qu’ils sont reconnus comme potentiellement frauduleux par les systèmes de filtrage. Ces courriers électroniques ne sont pas toujours détectés par les filtres anti-spam habituels car ils ne contiennent pas d’éléments malveillants évidents. Le but est d’amener le destinataire, souvent la réception ou la direction de l’hôtel, à répondre à l’arnaqueur. Un second message, potentiellement avec une pièce jointe ou un lien dangereux, serait alors envoyé.

Le Blog ZATAZ, référence depuis plus de 20 ans dans les actualités liées à la lutte contre le cybercrime avait alerté de ce type de fraude, au mois d’août 2023. Même méthode, même excuse : la plainte d’un client.

Les analyses de l’entreprise française Vade suggèrent qu’il s’agit d’un malware versatile, capable de dérober des informations, d’obtenir des droits d’accès supérieurs, de se maintenir dans le système et de récolter des données d’identification, avec un potentiel de dégénérer en ransomware. Des indices laissent penser que cet acteur de menaces pourrait être d’origine chinoise, sans que cela puisse être affirmé avec certitude. « Nos analystes ont trouvé des preuves de l’existence de variantes apparentées qui indiquent qu’il s’agit très probablement d’un acteur chinois, mais les données ne permettent pas de le conclure à 100 %. » indique Romain Basset, directeur des services clients Vade.

Les auteurs se font passer pour des clients mécontents pour engager une conversation avec le personnel, comme l’alerte de ZATAZ au mois d’août 2023. Ces tentatives d’escroquerie sont généralement brèves et exemptes de charge malicieuse, du moins jusqu’à présent, avec l’hypothèse que cela intervient dans les échanges ultérieurs.

Une découverte notable est celle d’un courriel intégrant un lien vers un fichier malicieux sous un faux prétexte visuel. Bien que ces attaques aient jusqu’à présent visé principalement des entités anglophones, elles pourraient s’étendre à d’autres langues. Nos systèmes de détection n’identifient pas toujours ces tentatives, à l’instar d’autres filtres.

Voici quelques exemples de ces emails :

  • « Bonjour, lors de mon séjour à votre hôtel, j’ai subi un désagrément impliquant l’un de vos employés. J’ai dû contacter mon avocat. Pourriez-vous m’assister ?« 
  • « Bonjour, je souhaite signaler un souci rencontré avec ma réservation. J’ai besoin de renseignements et d’aide. Merci de répondre rapidement.« 

Les tentatives semblent viser les adresses email génériques telles que « info@ » trouvées sur les sites des hôtels, souvent consultées par le personnel de gestion. Les pirates créé un prétexte d’urgence dans la réponse [des clients pas content] pour une réponse rapide et une action de la part de la victime, augmentant ainsi les chances de succès de l’arnaque. Le fondateur de ZATAZ, Damien Bancal, a participé au mois d’octobre 2023 à une compétition de Social Engineering, au Québec [il a fini avec la médaille d’argent]. Il a démontré lors de la compétitions de 48 heures, comment les services hôteliers étaient des mines d’informations.

Preuves de l’objectif de l’attaque : Bien que le logiciel semble principalement conçu pour le vol d’informations, il est équipé pour évoluer vers des attaques plus sérieuses, telles que le ransomware, avec des indications d’utilisation de bibliothèques de cryptographie, suggérant une volonté de chiffrer les données et perturber les opérations hôtelières.

Nos partenaires




Actualités du mois

mars 2026
L M M J V S D
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

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>