Juin 2026 : incident lié au logiciel malveillant PolinRider

Ceci est une traduction du message original: June 2026 PolinRider malware incident - cette traduction a été réalisée automatiquement et peut contenir des erreurs.


:warning: Avis de sécurité : incident lié au logiciel malveillant PolinRider survenu en juin 2026 dans plusieurs dépôts liés à DHIS2. Veuillez lire ce message si vous travaillez sur le code front-end de DHIS2 provenant d’une source autre que apps.dhis2.org, et merci de le diffuser autour de vous.

Il y a deux mois, nous avons découvert un logiciel malveillant actif (répertorié publiquement sous les noms PolinRider / Void Dokkaebi / Famous Chollima) présent dans plusieurs dépôts front-end liés à DHIS2. La plupart se trouvaient dans des référentiels tiers ou de partenaires, mais nous tenons à signaler que l’organisation GitHub officielle dhis2 a également été brièvement touchée : le 3 juin 2026, un attaquant a utilisé des identifiants de développeur volés pour forcer la publication du chargeur dans un ensemble de dépôts dhis2/*. Ce problème a été détecté et entièrement résolu en environ 24 heures, et l’ensemble de l’organisation a été à nouveau analysé et déclaré sain le 4 juin 2026. À ce moment-là, nous nous sommes attachés à garantir que l’incident de sécurité soit résolu pour nos développeurs actifs et les bases de code publiques principales, et à empêcher toute exploitation future.

Il est essentiel de noter que le service App Hub en ligne (apps.dhis2.org) et toutes les applications qui y sont publiées n’ont jamais été affectés — seuls les dépôts de code source ont été touchés. L’échantillon infecté le plus ancien dont nous disposons remonte au 11 septembre 2024, ce qui signifie que, du côté des tiers, ce problème circulait discrètement depuis longtemps.

Qui doit être vigilant ?

Vous devez être vigilant si, à un moment ou à un autre, vous avez :

  • cloné, compilé, récupéré ou simplement ouvert dans VS Code l’un des dépôts répertoriés ci-dessous (voir « Dépôts concernés ») ;
  • avez installé un paquet npm portant un nom tel que tailwindcss-style-animate (un typosquat se faisant passer pour un plugin Tailwind) ;
  • avez exécuté sur votre instance une application DHIS2 provenant d’une source non officielle (un dépôt partenaire, le fork d’un collègue, un fichier zip qui vous a été transmis) plutôt que de apps.dhis2.org.

Si vous n’installez que des applications provenant de apps.dhis2.org, vous n’êtes pas concerné — toutes les applications qui y sont publiées ont été analysées et sont saines.

Comment cela fonctionne-t-il concrètement ?

Le code malveillant se cache dans des fichiers de build et de configuration courants — d2.config.js, tailwind.config.js, vite.config.js, postcss.config.mjs, babel.config.js, jest.config.js, .vscode/tasks.json, une police .woff2 qui est en réalité du JavaScript, et parfois directement dans le code source de l’application (src/App.js, src/AppWrapper.js, src/index.js). Il s’exécute dès que vous effectuez une action tout à fait normale — npm install, une compilation ou un test, ou simplement l’ouverture du dossier dans VS Code (un fichier .vscode/tasks.json avec runOn: folderOpen se déclenche dès que l’espace de travail est validé, avant toute compilation).

Une fois lancé, il collecte discrètement les éléments dont la perte serait la plus préjudiciable : mots de passe et cookies enregistrés par le navigateur, clés SSH, fichiers .env, entrées du trousseau macOS, portefeuilles cryptographiques et vos identifiants GitHub / npm / AWS / GCP / Azure. Il peut également implanter une porte dérobée persistante afin que l’attaquant puisse revenir plus tard. Il s’agit de la même catégorie de logiciel malveillant que celle à l’origine de la récente campagne qui a compromis des comptes GitHub et volé près de 4 000 dépôts privés.

Une précision sur les dates : elles sont falsifiées

Veuillez lire ceci avant de vous dire « mais j’ai cloné ce dépôt avant/après la date X ».». L’attaquant a antidaté les commits malveillants (retour en arrière dans le temps), de sorte que git log affiche de fausses dates — certaines remontant même à 2023 ou 2024 pour des commits qui ont en réalité été poussés en 2026. Cette falsification a deux conséquences :

  • Pour l’organisation dhis2, la véritable exposition s’est limitée à une courte période autour du 3 juin 2026 → 4 juin 2026, même si certains commits indiquent des dates de 2024 ou 2025. C’est pourquoi nous pouvons vous donner une fourchette de dates précise pour ce cas.
  • Pour les dépôts HISP Uganda, l’historique des poussées est bien moins fiable ; nous ne pouvons donc pas vous donner de plage de dates sûre. Considérez donc que : si vous avez déjà possédé l’un de ces dépôts, partez du principe que vous avez été exposé.

Dépôts concernés

Il existe trois groupes. Lisez celui ou ceux qui s’appliquent à votre cas.

Groupe A — Organisation GitHub dhis2 (plage de dates précise : 03/06/2026 → 04/06/2026)

Ces référentiels source officiels dhis2/* ont fait l’objet d’un « force push » via le loader le 3 juin 2026 et ont été nettoyés dans un délai d’environ 24 heures ; l’organisation a été réanalysée et déclarée saine le 4 juin 2026.

Vous n’êtes concerné que si vous avez cloné, récupéré, effectué un pull, compilé ou ouvert l’un de ces dépôts entre le 03/06/2026 et le 04/06/2026. Si tel est le cas, effectuez l’autodiagnostic ci-dessous.

Dépôt Vecteur / support Remarque
dhis2/capture-app chargeur de configuration vague de force-push
dhis2/app-management-app chargeur de configuration voir également la PR n° 509
dhis2/aggregate-data-entry-app chargeur de configuration vague de push forcés
dhis2/charts-app kit .vscode + .woff2 également sur la branche par défaut — voir ci-dessous
dhis2/cache-cleaner-app kit .vscode + .woff2 principalement des branches secondaires
dhis2/app-hub chargeur de configuration le dépôt source — PAS le service en ligne apps.dhis2.org
dhis2/approval-app chargeur de configuration vague de force-push
dhis2/action-semantic-release kit .vscode + .woff2 Action GitHub — s’exécute dans l’environnement CI de tout dépôt qui l’utilise
dhis2/camel-hie-boot kit .vscode + .woff2 vague de force-push
dhis2/camel-dhis2 kit .vscode + .woff2 vague de force-push
dhis2/camel-archetype-dhis2 kit .vscode + .woff2 vague de force-push
dhis2/cancer-registry-app commit de source en ligne sur la branche par défaut — voir ci-dessous

Deux précisions concernant la période stricte :

  • dhis2/cancer-registry-app a intégré le chargeur sur sa branche par défaut à partir du 4 mai 2026 environ ; sa période commence donc avant la vague.
  • dhis2/charts-app et dhis2/action-semantic-release l’ont également intégré sur leurs branches par défaut (dates falsifiées, peut-être de plusieurs mois). action-semantic-release est une GitHub Action ; si l’un de vos workflows y faisait référence, considérez cela comme une impact sur la chaîne d’approvisionnement CI et procédez au pinning et au nettoyage en conséquence.

> dhis2/app-hub vs apps.dhis2.org : le dépôt source dhis2/app-hub a été pris dans la vague de « force-push », mais le service App Hub en production et les applications qui y sont publiées n’ont jamais été affectés. L’installation d’applications à partir de apps.dhis2.org était, et reste, sans danger.

Groupe B — Organisation HISP Ouganda (aucune période de sécurité — si vous avez déjà utilisé ces applications, partez du principe que vous avez été exposé)

Tous les dépôts publics suivants de HISP Uganda contenaient le chargeur sur leur branche par défaut (donc toute personne ayant cloné, utilisé npm install, compilé ou ouvert ces dépôts a été exposée). Comme expliqué ci-dessus, les dates de poussée ne sont pas fiables ; les dates ci-dessous ne sont donc que des estimations « de la date la plus ancienne observée », établies au mieux — ne les considérez pas comme une limite de sécurité. Si vous avez déjà travaillé avec l’un de ces dépôts, effectuez l’autovérification.

Dépôt Fichier porteur Date la plus ancienne observée (estimation — peu fiable)
HISP-Uganda/school-licensing-app tailwind.config.js 11/09/2024 (premier échantillon confirmé)
HISP-Uganda/who-did-what src/AppWrapper.js le commit indique avril 2024 (falsifié)
HISP-Uganda/cqi2 tailwind.config.js vers septembre 2024
HISP-Uganda/adex-export main.js vers octobre 2024
HISP-Ouganda/dhis2-dqa360 vite.config.js vers août 2025
HISP-Ouganda/moh-registers kit .woff2 vers novembre 2025
HISP-Uganda/hisp-hr-system kit .woff2 ~février 2026
HISP-Uganda/covid-service utils.js ~avril 2026
HISP-Uganda/data-import-wizard-scheduler jest.config.js ~avril 2026
HISP-Ouganda/poe-print src/App.js ~avril 2026
HISP-Ouganda/polio-campaign src/AppWrapper.js ~avril 2026
HISP-Uganda/SBS-covid-19-dashboard src/AppWrapper.js ~avril 2026
HISP-Uganda/sia tailwind.config.js ~avril 2026
HISP-Uganda/sms-configuration-app cypress/plugins/index.js, src/index.js commit daté de 2023 (falsifié)
HISP-Uganda/travelcheck babel.config.js vers avril 2026
HISP-Uganda/vaccination-self-registration-form tailwind.config.js vers avril 2026
HISP-Uganda/dhis2-public-portal apps/portal/postcss.config.mjs ~mai 2026
HISP-Uganda/DHIS2-Arsenal d2.config.js divulgation initiale (désormais privée/supprimée)

Statut (au 08/06/2026) : HISP Ouganda a nettoyé 16 des 16 dépôts publics ci-dessus, ce qui a été confirmé par une nouvelle analyse. Le nettoyage d’un dépôt ne protège pas les personnes qui l’ont déjà cloné — l’avertissement ci-dessus reste donc valable.

Groupe C — Dépôts personnels de développeurs DHIS2

Il s’agit de dépôts personnels d’un développeur DHIS2 qui ont été compromis à la suite du vol d’identifiants (le propriétaire du compte est une victime, et non l’attaquant).

  • JohanGHole/measlesIG
  • JohanGHole/hiv-tracker-ig
  • JohanGHole/tb-tracker-program-ig
  • JohanGHole/enable-anc-ig
  • JohanGHole/dhis2-patient-enrollment-ig
  • JohanGHole/dhis2-rwanda-attribute-harmonization
  • JohanGHole/dhis2-tb-tracker-ig-tutorial
  • JohanGHole/tracker-tb-case-surveillance-ig

Statut (au 08/06/2026) : Les dépôts publics ci-dessus ont été nettoyés, ce qui a été confirmé par une nouvelle analyse. Le nettoyage d’un dépôt ne protège pas les personnes qui l’ont déjà cloné — l’avertissement ci-dessus reste valable.

> Remarque concernant l’attribution : tous les comptes impliqués ici ont été victimes d’un vol d’identifiants, et non les auteurs de ces actes. Nous citons les dépôts afin que vous sachiez ce qu’il faut éviter, et non pour pointer du doigt les responsables de leur maintenance.


Ce que vous devez faire

  1. Lancez l’auto-vérification « host-triage » adaptée à votre système d’exploitation. Elle est en lecture seule, ne nécessite aucune installation et vous indique si votre machine présente des signes indiquant que le chargeur s’est exécuté (voir les liens au bas de cet article) :
    • macOS : polinrider_hunt_macos.sh
    • Linux : polinrider_hunt_linux.sh
    • Windows : polinrider_hunt_windows.ps1
  2. Si l’auto-vérification signale un résultat positif (ou si vous savez que vous avez créé/ouvert un dépôt concerné à une date concernée) : renouvelez vos identifiants — GitHub, npm et tous les jetons cloud (AWS/GCP/Azure), clés SSH et mots de passe enregistrés dans le navigateur — et suivez les étapes à suivre en cas d’incident décrites dans l’avis complet.
  3. Si vous gérez ou avez créé une branche (fork) d’un dépôt figurant dans les listes ci-dessus, analysez-le avant de le compiler à nouveau, et ajoutez une analyse CI pour empêcher toute réintroduction de la vulnérabilité.
  4. N’ouvrez pas de dépôt suspect dans VS Code, et n’exécutez pas la commande npm install / une compilation / d2-app-scripts sur celui-ci tant qu’il n’a pas été analysé — ce sont précisément ces actions qui déclenchent le problème.

Ce qui n’est PAS concerné

  • :white_check_mark: L’App Hub en ligne à l’adresse apps.dhis2.org et toutes les applications qui y sont publiées.
  • :white_check_mark: Les dépôts officiels de l’organisation dhis2 à ce jour — ils ont été nettoyés et revérifiés le 04/06/2026.
  • :white_check_mark: Toute personne qui installe exclusivement des applications provenant de apps.dhis2.org.

Ressources et contact

Veuillez transmettre ce message à toute personne susceptible d’avoir cloné, compilé ou exécuté du code front-end DHIS2 provenant d’une source non officielle.

L’équipe de sécurité DHIS2