Accueil / Particuliers / Identité numérique / Une faille du Login de Facebook corrigée

Une faille du Login de Facebook corrigée

Les pirates se faisaient passer pour les titulaires des comptes en exploitant une faille du Login de Facebook.

Les Bitdefender Labs ont révélé une vulnérabilité  lors de l’authentification en ligne sur des sites Web tiers via Facebook. Un manque de mesure de sécurité lors de la validation permet aux pirates d’usurper l’identité des internautes et d’accéder, sans mot de passe, à leurs comptes en ligne.

Les social logins sont une alternative à l’authentification traditionnelle et un mode apprécié par les utilisateurs pour leur côté pratique : ils permettent aux utilisateurs de se connecter à leurs comptes Web sans saisir leur nom d’utilisateur ni leur mot de passe. La plupart des sites offrent des social logins via Facebook, LinkedIn, Twitter ou Google Plus. Les chercheurs des Bitdefender Labs ont trouvé un moyen d’usurper l’identité de l’utilisateur et d’avoir accès à ses comptes Web en utilisant le plug-in Facebook Login.

« Il s’agit d’une vulnérabilité grave qui permet aux pirates de créer un compte avec une adresse e-mail ne leur appartenant pas et de changer l’adresse e-mail liée au compte d’un site par une autre adresse non vérifiée », prévient Ionut Cernica, chercheur spécialiste des vulnérabilités chez Bitdefender. « Cela signifie qu’un pirate peut effectuer des paiements en ligne au nom de l’utilisateur, arrêter son moteur antivirus pour infecter ses périphériques, propager des malwares à ses contacts et bien plus encore. »

Pour que l’attaque réussisse, l’adresse e-mail de la victime ne doit pas déjà être enregistrée sur Facebook. La plupart des internautes ont plus d’une adresse e-mail publiée sur différents sites Web, accessibles à tout le monde. Il est donc assez simple pour le pirate d’obtenir une de ces adresses et de créer un compte Facebook avec cette dernière.

Pour vérifier l’identité d’un utilisateur sans exposer ses identifiants d’authentification, Facebook Login utilise le protocole OAuth. Grâce à OAuth, Facebook est autorisé à partager certaines informations de l’utilisateur avec le site Web tiers.

Comment se fait l’usurpation d’identité ? Une faille du Login de Facebook

Bitdefender a réussi à contourner l’étape de confirmation généralement requise lors de l’enregistrement d’une nouvelle adresse e-mail Facebook.

L’un de ses chercheurs a créé un compte Facebook avec l’adresse e-mail de la victime.

Après l’inscription, il a remplacé l’adresse e-mail par une autre dont il a le contrôle.

Après actualisation de la page, il apparaît que l’adresse e-mail de la victime a également été validée.

Lorsque le chercheur a tenté de se connecter sur un autre site via le bouton Facebook Login (avec l’adresse e-mail de la victime), il a dû confirmer sa propre adresse e-mail, et non celle de la victime.

Bien que le chercheur de Bitdefender n’ait confirmé que son compte personnel dans les paramètres du compte Facebook, l’adresse de la victime était bien le contact principal.

« J’ai utilisé à nouveau Facebook Login et décidé de mettre mon adresse comme contact principal à la place de celle de la victime, puis de la changer à nouveau pour faire du compte de la victime le compte principal. C’est une étape importante pour reproduire le problème », a ajouté Ionut Cernica.

Puis, sur un autre site Web, le chercheur de Bitdefender a utilisé Facebook Login pour se connecter sous l’identité de la victime. Le site a fait le lien entre l’adresse e-mail de la victime (en passant par Facebook) et le compte existant et a permis au chercheur, qui aurait pu être un pirate, de contrôler ce compte. « Le fournisseur d’identité – dans ce cas, Facebook – aurait dû attendre que la nouvelle adresse e-mail ait bien été vérifiée », affirme Ionut Cernica à DataSecurityBreach.fr.

Une faille du Login de Facebook corrigée rapidement. Facebook a réparé la vulnérabilité après en avoir été alerté par Bitdefender.

Étiquetté :

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>