Un dépôt-piège à 1774 étoiles : deux filtres pour détecter malware et hallucinations
Chaque matin, un bot envoie à l'auteur cinq dépôts tendance de trendshift.io avec un résumé du README. Le 26 septembre, le fil affichait le projet « Microsoft Activation Scripts » avec 1774 étoiles — c'était un piège. Le compte du propriétaire avait été créé 94 secondes avant le dépôt, et la commande d'installation contenait un malware déguisé via PowerShell, avec l'adresse de téléchargement écrite à l'envers. En analysant les 321 dépôts envoyés par le bot du 15 juillet au 8 octobre, l'auteur a découvert que les filtres évidents étaient inefficaces. Un contrôle sur les installations de type « télécharge et exécute immédiatement » aurait écarté un projet normal sur huit. À la place, l'auteur a créé deux signaux indépendants, chacun suffisant pour bloquer. • **lure-check** : détecte les commandes d'installation déguisées (chaînes inversées via -join, base64, exécution cachée via mshta/certutil/bitsadmin) et les comptes jetables (créés moins de 30 jours avant le dépôt, contenant moins de 10 Ko de code) • **ground-check** : vérifie les hallucinations de DeepSeek, en repérant les mots avec majuscule et les nombres absents de la source • Les deux outils sont diffusés sous forme de dépôts MIT séparés ; ground-check intègre des tests sur 303 résumés réels
Traité par IA depuis Habr AI ; édité par Hamidun News
Un piège à 1774 étoiles
Chaque matin, un bot Telegram envoie à l'auteur cinq dépôts GitHub tendance tirés de trendshift.io. Sous chacun, un bouton permet d'obtenir un résumé du README pour une analyse rapide. L'auteur lit ce fil quotidiennement, et met parfois un like aux projets qui lui plaisent.
Le 26 septembre, le dépôt « Microsoft Activation Scripts » est apparu dans le fil, avec 1774 étoiles, une description soignée et des tags. Le bot l'avait présenté parmi quatre autres projets — et c'était un piège. Le dépôt ne contient qu'un seul fichier README, et le compte du propriétaire a été créé 94 secondes avant le dépôt.
La commande d'installation ressemble à `iex(irm(-join"…"[-1..-99]))` — l'adresse de téléchargement est écrite à l'envers.
PowerShell inverse d'abord la chaîne, puis télécharge le script et l'exécute immédiatement. Impossible de lire le domaine à l'œil nu, et un scanner cherchant des liens dans le texte ne le détecte pas non plus. L'adresse mène vers un domaine qui ressemble à un domaine légitime.
Les vrais Microsoft Activation Scripts existent et utilisent eux aussi une installation via irm | iex — c'est précisément sur cette ressemblance que repose le piège.
Pourquoi les filtres évidents n'ont pas fonctionné
L'auteur a testé la règle sur 321 dépôts envoyés par le bot entre le 15 juillet et le 8 octobre (314 sont toujours actifs). La première idée consistait à signaler les installations de type « télécharge et exécute immédiatement » depuis un site hors GitHub. Mais c'est ainsi que s'installent 38 des 314 projets normaux : codex, opencode, ainsi que les installateurs rustup et uv. Ce filtre aurait masqué un dépôt tendance sur huit, et parmi les plus utiles.
La deuxième règle était « compte du propriétaire de moins de 30 jours ». Le piège aurait passé ce test : au moment de l'envoi, il avait déjà 34 jours. Un compte jetable ne se définit pas par son âge au moment du contrôle, mais par l'écart entre la création du compte et la création du dépôt.
Deux filtres qui ont fonctionné
Premier filtre (commande d'installation déguisée)
Il vérifie la présence d'un déguisement dans le README :
- Chaîne inversée via `-join"…"[-1..` et `iex(irm(…))` avec une adresse calculée
- Code en base64 décodé et exécuté immédiatement
- Exécution cachée via `mshta`, `certutil`, `bitsadmin` ou `-WindowStyle Hidden`
Avant la vérification, le texte est nettoyé des caractères invisibles et des apostrophes inversées de PowerShell (comme i\`e\`x).
Second filtre (propriétaire jetable et absence de code)
Il bloque les dépôts si :
- Le compte a été créé moins de 30 jours avant le dépôt
- Le dépôt contient moins de 10 Ko de données ou seulement un README et une LICENCE
Si GitHub ne répond pas, le résultat est considéré comme « inconnu » et non comme « pas de code » — une panne réseau ne doit pas masquer un projet normal.
Sur les 314 dépôts, chaque signal s'est déclenché exactement une fois — sur le faux activateur. Depuis le 9 octobre, cette vérification est intégrée au bot. Si un dépôt ressemble à un piège, le bot le retire de la sélection, le remplace par le suivant dans le classement, et ajoute une ligne expliquant ce qui a été masqué et pourquoi.
Le second problème : les hallucinations du réseau de neurones
Le bot demande à DeepSeek de résumer chaque dépôt en une phrase en russe. Un projet dont la description ne contenait que meat.dev a été qualifié par le modèle de « framework web pour Ruby ». Un outil de test a été comparé à Cypress, absent de la source. Tout cela sonne plausible, mais rien ne permet de le détecter à l'œil.
L'auteur a rassemblé 303 résumés réels et les a comparés à leurs sources. La règle est simple : chaque mot en caractères latins avec une majuscule ou un chiffre (Ruby, GPT-5) et chaque nombre de trois chiffres ou plus, avec un point ou un pourcentage, doit apparaître dans la source. Si ce n'est pas le cas, le bot affiche la description originale de GitHub.
La première version a rejeté 9 des 303 résumés. Quatre se sont révélés être de simples variantes orthographiques d'un même terme : Open-source et « open source », Wi-Fi et « WiFi », 2234 et « 2 234 ». L'auteur a ajouté une comparaison sans tirets ni espaces, en supprimant les séparateurs de milliers. Il restait 5 rejets : trois véritables inventions (Ruby, Cypress, Scratch) et deux cas où la source ne les confirmait pas (NVIDIA et XIXe siècle). Sur quatre jours — 20 résumés, et aucun rejet.
Où trouver les outils
lure-check : `python3 lure_check.py owner/repo` — code de retour 1 pour un piège, pratique en CI
ground-check : `python3 ground_check.py --source source.txt --text summary.txt`
Les deux outils sont de simples fichiers Python, n'utilisant que la bibliothèque standard, sous licence MIT, avec des tests sur des cas réels. Le piège a été neutralisé dans les tests, toutes les adresses ont été remplacées.
- 27 oct. 2026Qwen3.8 a tenté de charger un fichier vers le cloud d'Alibaba à Pékin depuis le bac à sable de Cohere
- 26 oct. 2026Synopsys veut connecter des modèles d'IA chinois à la conception de puces en Chine
- 26 oct. 2026SpaceXAI réunit Grok, Cursor et X dans un seul abonnement à partir de $8 par mois
- 26 oct. 2026OpenAI abaisse sa prévision de chiffre d'affaires 2026 à $50 milliards, contre $70 milliards annoncés
Questions clés sur cet article
Que sait-on sur Un piège à 1774 étoiles ?
Chaque matin, un bot Telegram envoie à l'auteur cinq dépôts GitHub tendance tirés de trendshift.io. Sous chacun, un bouton permet d'obtenir un résumé du README pour une analyse rapide. L'auteur lit ce fil quotidiennement, et met parfois un like aux projets qui lui plaisent. Le 26 septembre, le dépôt « Microsoft Activation Scripts » est apparu dans le fil, avec 1774 étoiles, une description soignée et des tags. Le bot l'avait présenté parmi quatre autres projets — et c'était un piège. Le dépôt ne contient qu'un seul fichier README, et le compte du propriétaire a été créé 94
Pourquoi les filtres évidents n'ont pas fonctionné?
L'auteur a testé la règle sur 321 dépôts envoyés par le bot entre le 15 juillet et le 8 octobre (314 sont toujours actifs). La première idée consistait à signaler les installations de type « télécharge et exécute immédiatement » depuis un site hors GitHub. Mais c'est ainsi que s'installent 38 des 314 projets normaux : codex, opencode, ainsi que les installateurs rustup et uv. Ce filtre aurait masqué un dépôt tendance sur huit, et parmi les plus utiles. La deuxième règle était « compte du propriétaire de moins de 30 jours ». Le piège aurait passé ce test : au moment de l'env
Que sait-on sur Deux filtres qui ont fonctionné ?
Premier filtre (commande d'installation déguisée) Il vérifie la présence d'un déguisement dans le README : Chaîne inversée via `-join"…"[-1..` et `iex(irm(…))` avec une adresse calculée Code en base64 décodé et exécuté immédiatement Exécution cachée via `mshta`, `certutil`, `bitsadmin` ou `-WindowStyle Hidden` Avant la vérification, le texte est nettoyé des caractères invisibles et des apostrophes inversées de PowerShell (comme i\`e\`x). Second filtre (propriétaire jetable et absence de code) Il bloque les dépôts si : Le compte a été créé moins de 30 jours avant le dépôt Le
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
L'essentiel de l'IA — une fois par semaine
Sept actus qui ont vraiment compté, choisies à la main. Sans bruit ni communiqués.
C'est fait ! Vérifiez votre boîte mail pour la confirmation.