Accueil / Cybersécurité / Téléphonie / Cosiloon : les appareils Android livrés avec des malwares pré-installés

Cosiloon : les appareils Android livrés avec des malwares pré-installés

Cosiloon – Des chercheurs découvrent un adware pré-installé sur plusieurs centaines de modèles et de versions d’appareils Android différents, y compris ceux fabriqués par ZTE, Archos ou encore myPhone. La majorité de ces appareils ne sont pas certifiés par Google.

Le logiciel publicitaire en question porte le nom de « Cosiloon », et crée une superposition pour afficher une annonce sur une page web dans le navigateur de l’utilisateur. Des milliers d’individus sont touchés, et le mois dernier, Avast a identifié la dernière version de l’adware sur environ 18 000 appareils appartenant aux utilisateurs situés dans plus de 100 pays, dont la France, l’Italie, le Royaume-Uni, l’Allemagne ou encore la Russie parmi d’autres, ainsi que quelques cas aux États-Unis.

L’adware est actif depuis au moins trois ans, et s’avère difficile à supprimer. Il est en effet installé au niveau du firmware (ou micrologiciel) et utilise un code rendu impénétrable par procédé d’offuscation. Le géant du Web a ainsi pris des mesures pour atténuer les capacités malveillantes de nombreuses variantes d’applications sur plusieurs modèles d’appareils, en exploitant des techniques développées en interne.

Google Play Protect a été mis à jour pour garantir la protection de ces applications à l’avenir. Néanmoins, étant donné qu’elles sont pré-installées avec le firmware, le problème reste donc difficile à résoudre. Google a contacté les développeurs de micrologiciels pour les sensibiliser et les encourager à prendre des mesures pour y remédier.

Identifier Cosiloon

Au cours des dernières années, le Threat Labs d’Avast a régulièrement observé des échantillons Android à caractère étrange, dans sa base de données. Ils ressemblaient à n’importe quel autre échantillon, à l’exception que l’adware semblait pas disposer de point d’infection et présentait plusieurs noms de packages similaires, les plus communs étant :

  • com.google.eMediaService
  • com.google.eMusic1Service
  • com.google.ePlay3Service
  • com.google.eVideo2Service

La façon dont le logiciel publicitaire est arrivé sur les appareils n’est pas claire. Le serveur de contrôle était en service jusqu’en avril 2018, et les auteurs ont continué de le mettre à jour avec de nouvelles charges utiles. Les fabricants ont également continué d’expédier de nouveaux appareils avec l’injecteur (ou dropper, en anglais), également appelé « programme seringue » ou « virus compte-gouttes » qui est un programme informatique créé pour installer un logiciel malveillant sur un système cible.

Certaines applications antivirus signalent les charges utiles, mais l’injecteur les ré-installe et ne peut pas lui-même être supprimé. Ce qui signifie que le terminal aura toujours un dispositif permettant à un inconnu d’installer n’importe quelle application. Les chercheurs ont par ailleurs noté que l’adware permet d’installer le dropper sur les appareils, mais il est également en mesure de télécharger facilement un logiciel espion, un ransomware ou tout autre type de menace.

Avast a tenté de désactiver le serveur C&C (Command and Control) de Cosiloon en envoyant des demandes de retrait au registraire de noms de domaines et aux fournisseurs de serveurs. Le premier fournisseur, ZenLayer, a rapidement répondu et désactivé le serveur, mais il a été restauré après un certain temps par le biais d’un autre fournisseur. Le registraire n’a lui pas donné suite, ce qui signifie que le serveur fonctionne toujours.

Désactiver Cosiloon

Les utilisateurs peuvent trouver le dropper dans leurs paramètres (intitulé « CrashService », « meMess » ou « Terminal » avec l‘icône d’Android), et cliquer sur le bouton « désactiver » sur la page des applications, si disponible (selon la version Android). Cela désactivera l’injecteur qui ne reviendra pas.

É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>