Aller au contenu

Campagne Atomic Arch : environ 1 500 paquets AUR potentiellement touchés

··1677 mots·8 mins
Cryptolab.re
Auteur
Cryptolab.re
Cryptolab est un blog personnel où je documente mes expérimentations techniques : infra, self-hosting, réseau, crypto et projets parfois inutiles, souvent instructifs.
Sommaire

Le 11 juin 2026, Sonatype a révélé une campagne de détournement de paquets dans l’Arch User Repository (AUR). Baptisée Atomic Arch, elle visait des paquets orphelins repris par de nouveaux comptes, puis modifiés pour installer une dépendance npm malveillante.

Sonatype estime qu’environ 1 500 paquets ont pu être concernés au fil de plusieurs vagues. Ce chiffre était encore présenté comme préliminaire dans son analyse. Arch Linux a confirmé un volume important d’adoptions et de mises à jour malveillantes sans publier de décompte définitif.

L’analyse statique du second étage montre des fonctions de collecte d’identifiants, d’anti-debugging et des références à eBPF pouvant servir à masquer des processus, fichiers ou connexions. Elle ne permet pas d’affirmer que toutes ces fonctions ont été exécutées sur chaque machine touchée.

Mise à jour du 28 août 2026 : le nombre de paquets est présenté comme une estimation, et les capacités eBPF comme des fonctions observées lors de l’analyse statique. La version initiale les décrivait trop directement comme un rootkit pleinement déployé.

En bref
#

  • Campagne Atomic Arch débutée le 11 juin 2026, découverte par Sonatype.
  • Environ 1 500 paquets potentiellement concernés selon l’estimation publiée par Sonatype pendant l’enquête.
  • Mécanisme : adoption de paquets orphelins, modification du PKGBUILD pour exécuter npm install atomic-lockfile (ou js-digest, lockfile-js).
  • Payload : binaire natif avec collecte d’identifiants et capacités eBPF de type rootkit observées par analyse statique.
  • Cibles principales : clés SSH, tokens GitHub, npm, cloud (AWS/GCP/Azure), sessions Discord/Slack/Teams, cookies navigateur.
  • L’outil d’attaque serait automatisé, codé en Rust selon certaines sources.
  • Arch Linux a confirmé l’incident le 12 juin 2026 et travaille sur des contre-mesures.
  • Risque maximal sur les postes de travail Arch exposés à AUR. Impact indirect possible sur les environnements CI/CD utilisant des runners Arch.

Contexte : comment AUR fonctionne
#

L’Arch User Repository est un dépôt communautaire qui contient, au 14 juin 2026, plus de 107 000 paquets. Parmi eux, 13 259 paquets orphelins, des paquets dont le mainteneur d’origine n’assure plus le suivi.

Ces paquets orphelins sont la cible principale de l’attaque. Le mécanisme est simple : n’importe quel utilisateur peut demander l’adoption d’un paquet orphelin. Si la demande est acceptée, le nouveau mainteneur obtient un contrôle complet sur le PKGBUILD et les fichiers d’installation associés.

Le système repose sur la confiance et le bénévolat. Les statistiques AUR indiquaient alors environ 69 Package Maintainers. Ce nombre ne décrit pas à lui seul les droits d’administration ni l’ensemble des personnes qui contribuent à la modération.

AVERTISSEMENT : Les paquets AUR sont des contenus créés par les utilisateurs.
Toute utilisation des fichiers fournis se fait à vos propres risques.

Cet avertissement, présent sur chaque page de paquet AUR, est aussi un constat : il n’y a pas de validation systématique.

Le mécanisme de l’attaque
#

Les vagues documentées suivent un schéma en trois étapes :

  1. Adoption de paquets orphelins via le processus standard de l’AUR
  2. Modification du PKGBUILD ou du fichier .install pour ajouter une commande exécutée en post-install
  3. Exécution d’une dépendance npm malveillante qui télécharge et lance le payload final

La ligne injectée ressemble à ceci :

npm install atomic-lockfile minimist chalk

Exécutée pendant l’installation du paquet AUR, cette commande télécharge le paquet npm atomic-lockfile depuis le registre officiel npm. Le package.json d’atomic-lockfile contient un script preinstall qui lance un binaire natif Linux compilé en Rust.

Les chercheurs ont identifié plusieurs variants :

  • atomic-lockfile - la version initiale
  • js-digest - variante identifiée le 12 juin
  • lockfile-js - seconde variante
  • Certains paquets utilisaient Bun plutôt que npm comme mécanisme d’installation

L’attaque est montée en puissance très vite. Ce qui a commencé comme une dizaine de paquets est passé à 400, puis 1 500+ en l’espace de 24 heures.

Analyse du payload
#

Le binaire livré par le paquet npm malveillant contient des fonctions associées à la collecte d’identifiants, à l’exfiltration et à la réduction de visibilité.

Credential stealer
#

Les cibles identifiées dans le binaire :

  • Clés SSH (id_rsa, id_ed25519, known_hosts)
  • Tokens GitHub et npm
  • Tokens cloud : AWS, GCP, Azure
  • Sessions navigateur : cookies, session tokens (Chrome, Firefox, Chromium)
  • Messagerie : Discord, Slack, Microsoft Teams, Telegram
  • HashiCorp Vault tokens
  • Docker / Podman credentials

Le binaire utilise les sockets de diagnostic Linux (NETLINK_SOCK_DIAG) pour intercepter les connexions actives. Il dispose aussi de capacités d’upload HTTP multipart (POST /upload) vers un serveur C2.

Capacités eBPF de type rootkit
#

L’analyse statique révèle des références à un programme eBPF et aux API suivantes :

  • bpf_object__load
  • bpf_program__attach
  • bpf_map__pin

Le code analysé contient des fonctions associées au masquage de processus, de fichiers et d’activité réseau, notamment autour de getdents64(). Les structures identifiées dans le binaire incluent :

  • hidden_pids - processus masqués
  • hidden_names - noms de fichiers cachés
  • hidden_inodes - inodes masqués

Le binaire contient aussi des mécanismes anti-debug via PTRACE_ATTACH et PTRACE_SEIZE.

Portée de ces capacités
#

Lorsqu’il obtient les privilèges nécessaires, le payload peut tenter de :

  • masquer sa présence dans /proc
  • intercepter et filtrer les connexions réseau
  • épingler des objets eBPF dans bpffs pour les maintenir après la fin du processus qui les a chargés
  • rendre la détection par les outils de monitoring standard très difficile

Un programme eBPF épinglé ne survit pas à lui seul à un redémarrage. Une persistance après reboot exige un mécanisme supplémentaire de rechargement. Si le payload a été exécuté avec des privilèges élevés, l’hôte doit néanmoins être considéré comme non fiable et reconstruit depuis une source saine.

Qui est concerné
#

Impact direct
#

  • Tous les utilisateurs d’Arch Linux et des distributions dérivées (EndeavourOS, Manjaro avec AUR activé)
  • Postes de développement sous Arch
  • Runners CI/CD auto-hébergés sous Arch qui installent des paquets AUR
  • Utilisateurs de WSL2 avec une distribution Arch

Impact indirect
#

Les tokens et credentials exfiltrés peuvent permettre un pivot vers d’autres systèmes : dépôts GitHub, registres npm, environnements cloud. Un poste de développeur Arch compromis peut devenir un point d’entrée vers des infrastructures non-Arch.

Qui n’est pas concerné par ce vecteur
#

  • Les runners GitHub hébergés par GitHub (Ubuntu, Windows, macOS) n’utilisent pas AUR
  • Les machines Debian, Ubuntu, RHEL, Fedora sans couche Arch
  • Les postes macOS ou Windows sans Arch en VM/WSL

Vérifier son exposition
#

Lister les paquets AUR installés
#

pacman -Qqm

Identifier les paquets orphelins adoptés récemment
#

Il n’existe pas de commande unique pour croiser les dates d’adoption. La méthode manuelle reste la consultation du PKGBUILD sur le site AUR pour chaque paquet suspect. Avec yay, on vérifie les informations d’un paquet :

yay -Qi <paquet>

Vérifier les fichiers d’installation
#

Les scripts .install des paquets AUR sont dans le cache de construction local (généralement ~/.cache/yay/). Cherchez des appels à npm install, bun install, ou des commandes inhabituelles :

grep -r "npm install\|bun install" ~/.cache/yay/*/PKGBUILD ~/.cache/yay/*/.install 2>/dev/null

Détection réseau
#

Surveillez les connexions sortantes inhabituelles, notamment vers des IP inconnues ou des services de partage de fichiers (pastebin, file.io, etc.) :

sudo ss -tupn
sudo lsof -i

Détection eBPF
#

sudo bpftool prog list
sudo ls /sys/fs/bpf/

Des programmes eBPF inattendus sont suspects.

Correctifs et mitigations
#

Actions immédiates
#

  1. Mettre à jour les paquets AUR en vérifiant chaque PKGBUILD avant installation
  2. Identifier les machines Arch dans votre environnement
  3. Faire l’inventaire des paquets AUR installés et les croiser avec les listes de paquets compromis publiées par la communauté
  4. Si un paquet identifié comme malveillant a exécuté son script, considérer la machine comme compromise

En cas de compromission suspectée
#

  1. Réinstaller le système à partir d’un média de confiance. Ne pas faire confiance à une simple désinfection
  2. Rotation de tous les secrets : clés SSH, tokens GitHub/npm, clés API cloud, tokens Vault
  3. Invalider les sessions navigateur et régénérer les passkeys
  4. Révoquer les tokens CI/CD qui étaient stockés sur la machine
  5. Vérifier les logs des services tiers (GitHub audit log, cloud trail, etc.) pour détecter des accès non autorisés

Recommandations à long terme
#

  • Limiter le nombre de paquets AUR : moins il y en a, plus la surface d’attaque est réduite
  • Privilégier les paquets que vous maintenez vous-même ou ceux de mainteneurs connus
  • Toujours lire le PKGBUILD avant d’installer ou de mettre à jour un paquet AUR (yay et paru le proposent par défaut)
  • Ne pas exécuter yay -Syu ou paru -Syu sans surveillance pendant la période d’instabilité
  • Envisager des dépôts alternatifs comme Chaotic-AUR qui applique des vérifications supplémentaires (mais cela déplace la confiance, ne la supprime pas)

Ce que ça change pour l’écosystème
#

Atomic Arch pose des questions structurelles que l’AUR n’avait pas eu à affronter à cette échelle :

  • Faut-il imposer un délai de caution avant qu’un nouveau compte puisse adopter des paquets orphelins ?
  • Faut-il mettre AUR en lecture seule pendant les attaques ?
  • Comment détecter automatiquement les PKGBUILD modifiés frauduleusement ?
  • Quels moyens donner à la modération d’un dépôt dépassant 100 000 paquets ?

La réponse n’est pas technique. C’est un problème de gouvernance et de ressources humaines. AUR repose sur le bénévolat. Atomic Arch montre qu’un modèle non modéré peut être exploité de manière industrielle.

Les distributions dérivées comme Garuda, qui maintiennent leurs propres dépôts tiers basés sur AUR, sont confrontées à la même question : comment garantir qu’aucun paquet détourné ne passe entre les mailles du filet ?

Conclusion
#

Atomic Arch montre qu’une reprise de maintenance peut devenir un vecteur de compromission de la chaîne logicielle lorsqu’elle conserve le nom, l’historique et la confiance associés au paquet.

Le modèle de confiance implicite d’AUR, qui fonctionnait depuis 20 ans, montre ses limites. Les utilisateurs d’Arch doivent adapter leurs pratiques : moins de paquets AUR, plus de vigilance sur chaque mise à jour, et une hygiène de secrets renforcée.

Le mécanisme exact est propre à l’AUR, mais la leçon s’applique aux écosystèmes où un projet abandonné peut changer de mainteneur : le nom et l’historique ne remplacent pas la revue du code exécuté à l’installation.

Remerciements
#

Merci à @Fritange@maly.io pour la recommandation du dépôt lenucksi/aur-malware-check, un outil communautaire pratique pour détecter les paquets compromis sur son système.

Sources
#

Sources vérifiées le 28 août 2026 :

Articles connexes

Nginx RIFT (CVE-2026-42945) : vérifier les configurations réellement exposées

··1298 mots·7 mins
CVE-2026-42945, surnommée Nginx RIFT par ses découvreurs, est un dépassement de tampon dans ngx_http_rewrite_module. Le défaut existe depuis Nginx 0.6.27 et peut être déclenché à distance lorsqu’une configuration utilise une séquence particulière de directives rewrite et set avec des données contrôlées par le client. L’équipe de recherche depthfirst a démontré une exécution de code avec l’ASLR désactivé. Cette preuve établit que la corruption mémoire est exploitable dans un environnement préparé, mais elle ne démontre pas une exécution de code fiable sur toute installation Nginx moderne. Nginx classe la vulnérabilité au niveau medium. Les versions 0.6.27 à 1.30.0 sont affectées. Les branches 1.30.1 et 1.31.0 ont introduit le correctif. Mise à jour du 28 août 2026 : la première version de cet article évaluait trop largement le risque comme élevé pour les reverse proxies, homelabs et ingress Kubernetes. La priorité dépend d’abord de la version et de la présence du chemin rewrite/set vulnérable. La qualification amont est medium.

Dirty Frag sous Linux : vérifier l'exposition et installer les correctifs

··1359 mots·7 mins
Dirty Frag désigne deux vulnérabilités du noyau Linux publiées le 7 mai 2026 par Hyunwoo Kim. Elles sont suivies sous CVE-2026-43284 pour le chemin XFRM/ESP et CVE-2026-43500 pour RxRPC. Dans les deux cas, un attaquant qui peut déjà exécuter du code localement peut modifier une page du cache mémoire associée à un fichier normalement accessible en lecture seule. Le démonstrateur public utilise cette primitive pour obtenir les privilèges root. Mise à jour du 28 août 2026 : les deux CVE disposent désormais de correctifs dans les noyaux fournis par les principales distributions. La désactivation des modules reste une solution temporaire lorsque la mise à jour est impossible. L’article initial, écrit pendant la divulgation, indiquait encore que le second correctif n’était pas publié.

Attaques supply chain : ce que Trivy, XZ et Polyfill.io changent pour vos déploiements

··1736 mots·9 mins
Le 19 mars 2026, un acteur disposant d’identifiants compromis a publié une version malveillante de Trivy et détourné les références de ses actions GitHub. Trivy est justement utilisé pour détecter des vulnérabilités dans les dépendances et les images de conteneurs. L’incident ne rend pas le scanner inutile. Il rappelle qu’un outil de sécurité reste un logiciel distribué par une chaîne de build, des comptes, des registres et des mécanismes de mise à jour qui peuvent eux-mêmes être compromis. Mise à jour du 28 août 2026 : cet article a été recentré sur les faits confirmés par les projets concernés. Plusieurs exemples historiques de la version initiale mélangeaient des dates ou des mécanismes d’attaque différents. Les commandes ont aussi été adaptées aux versions actuelles des outils cités.