<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Postinstall-Hook on CyberVeille</title>
    <link>https://cyberveille.ch/tags/postinstall-hook/</link>
    <description>Recent content in Postinstall-Hook on CyberVeille</description>
    <generator>Hugo -- 0.146.0</generator>
    <language>fr-fr</language>
    <copyright>Cyberveille CC BY-NC-SA 4.0</copyright>
    <lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cyberveille.ch/tags/postinstall-hook/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Compromission supply chain npm : 140&#43; packages Mastra empoisonnés via typosquat easy-day-js</title>
      <link>https://cyberveille.ch/posts/2026-06-19-compromission-supply-chain-npm-140-packages-mastra-empoisonnes-via-typosquat-easy-day-js/</link>
      <pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://cyberveille.ch/posts/2026-06-19-compromission-supply-chain-npm-140-packages-mastra-empoisonnes-via-typosquat-easy-day-js/</guid>
      <description>&lt;h2 id=&#34;-contexte&#34;&gt;🔍 Contexte&lt;/h2&gt;
&lt;p&gt;Publié le 17 juin 2026 par la Microsoft Defender Security Research Team, cet article documente une &lt;strong&gt;attaque supply chain npm de grande envergure&lt;/strong&gt; ciblant l&amp;rsquo;écosystème Mastra. Microsoft Threat Intelligence a identifié la compromission et partagé ses conclusions avec l&amp;rsquo;équipe de sécurité npm, qui a supprimé les packages affectés et révoqué les droits de publication du compte compromis.&lt;/p&gt;
&lt;h2 id=&#34;-déroulement-de-lattaque&#34;&gt;⚔️ Déroulement de l&amp;rsquo;attaque&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;attaque s&amp;rsquo;est déroulée en six phases :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Compromission de compte&lt;/strong&gt; : Prise de contrôle du compte npm &lt;code&gt;ehindero&lt;/code&gt;, mainteneur légitime avec droits de publication sur le scope &lt;code&gt;@mastra&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Création du typosquat&lt;/strong&gt; : Publication de &lt;code&gt;easy-day-js&lt;/code&gt;, impersonation de la bibliothèque légitime &lt;code&gt;dayjs&lt;/code&gt; (57M+ téléchargements hebdomadaires), via un compte anonyme Tutamail.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empoisonnement massif&lt;/strong&gt; : Publication de nouvelles versions de 140+ packages &lt;code&gt;@mastra&lt;/code&gt; injectant &lt;code&gt;easy-day-js@^1.11.21&lt;/code&gt; comme dépendance, toutes taguées &lt;code&gt;latest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livraison&lt;/strong&gt; : La plage SemVer &lt;code&gt;^1.11.21&lt;/code&gt; résout vers la version &lt;code&gt;1.11.22&lt;/code&gt; contenant le hook &lt;code&gt;postinstall&lt;/code&gt; malveillant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exécution&lt;/strong&gt; : Le hook déclenche un dropper obfusqué de 4 572 octets (&lt;code&gt;setup.cjs&lt;/code&gt;) qui désactive la vérification TLS et contacte le C2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payload de second stade&lt;/strong&gt; : Téléchargement et exécution d&amp;rsquo;un implant Node.js multiplateforme (~41 Ko) en processus détaché.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;-stratégie-de-livraison-en-deux-phases&#34;&gt;🎯 Stratégie de livraison en deux phases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phase 1 (leurre propre)&lt;/strong&gt; : &lt;code&gt;easy-day-js@1.11.21&lt;/code&gt; publié le 16 juin 2026 à 07:05 UTC — code dayjs légitime, sans payload.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase 2 (armement)&lt;/strong&gt; : &lt;code&gt;easy-day-js@1.11.22&lt;/code&gt; publié le 17 juin 2026 à 01:01 UTC — ajout de &lt;code&gt;setup.cjs&lt;/code&gt; et du hook &lt;code&gt;postinstall&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-analyse-technique-du-payload&#34;&gt;🛠️ Analyse technique du payload&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Stage 0 — Dropper obfusqué (&lt;code&gt;setup.cjs&lt;/code&gt;)&lt;/strong&gt; : Tableau de 40 chaînes Base64 mélangées via un seed numérique (&lt;code&gt;0x4c11d&lt;/code&gt;), décodées par une fonction personnalisée.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
