Vue lecture

GitHub - chifflier/mind-your-languages: Languages and security

This collection of examples discussing the question of the intrinsic security characteristics of programming languages. Through illustrations and discussions, it advocates for a different vision of well-known mechanisms and is intended to provide some food for thoughts regarding languages and development tools, as well as recommendations regarding the education of developers or evaluators for secure software.


Permalink
  •  

ImunifyAV - Le scanner qui exécute les malwares

ImunifyAV, le scanner AV qui protège 56 millions de sites Linux, vient de se faire pwn par le malware qu’il essayait de détecter. Et c’est pas la première fois…

En effet, Patchstack vient de révéler une faille RCE critique dans ImunifyAV, qui je le rappelle est un scanner antivirus gratuit ultra répandu dans l’hébergement mutualisé. Le problème en fait c’est que AI-bolit, le composant qui déobfusque le code PHP malveillant pour l’analyser, utilise la fonction call_user_func_array sans vérifier les noms de fonctions qu’elle exécute.

Boooh ! Du coup, vous uploadez un fichier PHP malveillant spécialement conçu pour l’occasion par un attaquant, ImunifyAV le scanne pour voir si c’est un malware, le déobfusque pour comprendre ce qu’il fait, et hop, le code malveillant s’exécute avec les privilèges du scanner.

Game over.

Hé pour qu’un antimalware détecte un virus, il doit analyser son code mais si les cybercriminels obfusquent leur malware pour cacher le code, l’antimalware doit alors le déobfusquer avant d’analyser. Mais déobfusquer du code PHP, ça veut dire aussi l’exécuter partiellement pour voir ce qu’il fait vraiment… d’où cette RCE.

La faille affecte donc toutes les versions avant la 32.7.4.0 et le correctif apporte juste une fonctionnalité de whitelist de fonctions autorisées pendant la déobfuscation. Il était temps, même si maintenir une whitelist de fonctions safe, à terme c’est un cauchemar car y’a des centaines de fonctions dans PHP. Certaines sont safe seules mais dangereuses combinées et je pense que les cybercriminels trouveront toujours un moyen de contourner cette whitelist.

En tout cas, comme je le laissais entendre en intro, c’est pas la première fois qu’AI-bolit se fait avoir sur la déobfuscation. En 2021, Talos avait déjà trouvé une faille sur unserialize dans le même composant. C’est la même blague car pour analyser du code malveillant sérialisé, il faut le désérialiser. Et désérialiser du contenu malveillant sans validation, ça fait “pwn” !

Voilà, 2 fois en 4 ans sur le même composant, c’est pas ce que j’appelle un accident. C’est un problème structurel car détecter du malware sans l’exécuter, c’est quasi impossible avec du code dynamique. Les signatures statiques ça marche bien pour les virus classiques mais face à du PHP obfusqué qui se reconstruit à l’exécution, vous êtes obligé de lancer le code pour voir ce qu’il fait vraiment. Et là, on est forcement en zone grise…

Même si on exécute du code potentiellement malveillant dans un environnement censé être isolé, si celui-ci “fuit” ou si le code malveillant trouve un moyen de sortir de la sandbox, vous avez une RCE. Et comme ImunifyAV tourne avec les privilèges nécessaires pour scanner tous les fichiers d’un serveur mutualisé, si vous compromettez cet antivirus, vous avez potentiellement accès à tous les sites hébergés sur la machine.

Si vous voulez tester, voici le proof of concept :

<?php
$data = "test";

$payload = "\x73\x79\x73\x74\x65\x6d"("\x74\x6f\x75\x63\x68\x20\x2f\x74\x6d\x70\x2f\x6c\x33\x33\x74\x2e\x74\x78\x74\x20\x26\x26\x20\x65\x63\x68\x6f\x20\x22\x44\x45\x46\x2d\x33\x36\x37\x38\x39\x22\x20\x3e\x20\x2f\x74\x6d\x70\x2f\x6c\x33\x33\x74\x2e\x74\x78\x74");
eval("\x70\x61\x63\x6b"($payload));
?>

Placez ensuite ce poc.php quelque part, puis lancez le scanner ai-bolit dessus, et ça devrait créer un fichier dans /tmp si vous êtes à risque.

php ai-bolit.php -y -j poc.php

Voilà, si vous gérez des serveurs avec ImunifyAV, vous savez ce qu’il vous reste à faire ! Une bonne mise à jour !

Et bien sûr, si vous vous inquiétez, sachez que y’a aucun moyen de savoir si vous avez été compromis avant le patch. Faut patcher, et prier pour que personne n’ait exploité la faille entre sa découverte et sa publication.

Bon courage !

Source

  •  

PrivateBin : erreur "Votre navigateur ne prend pas en charge WebAssembly (...)"

J'ai mis à jour PrivateBin de la version 1.7.4 à la 1.7.6 et, en allant sur le site avec Firefox, j'obtenais cette erreur : "Votre navigateur ne prend pas en charge WebAssembly, utilisé pour la compression zlib. Vous pouvez créer des documents non compressés, mais vous ne pouvez pas lire les documents compressés."

Pourtant, WebAssembly est pris en charge par Firefox depuis déjà des années... À moins que vous ne l'ayez spécifiquement désactivé (ce qui n'est pas mon cas), ou que vous utilisiez Tor Browser.

En fait, la solution est d'ajouter le type MIME WebAssembly au serveur Apache.

Ouvrez le .htaccess et ajoutez la ligne suivante :
AddType application/wasm wasm

Source : https://github.com/PrivateBin/PrivateBin/pull/1464


Permalink
  •