Exploitation failles Zimbra CVE-2019-9670

Il existe plusieurs façons de se rendre compte que vous êtes touché par une exploitation des failles de Zimbra corrigés dans le CVE-2019-9670.

Il s’agit d’une vulnérabilité de type XXE/SSRF. En exploitant celle-ci, un attaquant pourrait aisément téléverser un fichier malveillant lui permettant d’exécuter du code arbitraire et de créer une porte dérobée. Il existe un code d’exploitation publié sur Internet confirmant ainsi la dangerosité de cette vulnérabilité.

Voici les différents signes indiquant une possible infection :

  • Sur l’interface admin, des comptes aux droits administrateur se sont créés tout seuls
  • Le Webmail est inaccessible, il reste sur une page blanche, avec un blocage sur :

https://votreserveur/?adminPreAuth=1

  • Il est impossible de mettre des pièces jointes via le Webmail
  • Des services Zimbra s’arrêtent tout seuls, notamment « opendkim » et « memcached »
    Et quand vous essayez de les redémarrer ils n’y arrivent pas et affichent seulement : « Killed. »
  • Vos mails restent dans la section « Reporté » (deferred).
  • Au redémarrage de « mailboxd » ou « zmmailboxdctl » vous avez des problèmes de droits :
 /opt/zimbra/mailboxd/webapps/zimbra/downloads: Permission denied
  • Le processus « zmcpustat » ou « zmcpustater » est présent sur votre serveur
  • Le script « zmswatch.sh » est présent sur votre serveur
  • Votre « crontab » contient une des choses suivantes :
 « */30 * * * * /opt/zimbra/log/zmcpustater »
 « */15 * * * * sh /opt/zimbra/log/zmswatch.sh » 
 « */10 * * * * /opt/zimbra/bin/zmgsaupdate » 
 « */10 * * * * /opt/zimbra/bin/zmgsaupdate »  
 « */60 * * * * /opt/zimbra/bin/zmgsaupdate »  
  • Votre dossier /tmp est rempli de fichiers aux noms générés aléatoirement ou contient un fichier « zmcat »
  • Des fichiers JSP aux noms aléatoires sont présents dans /opt/zimbra/jetty/…

Arrêt des processus

La première des choses à faire est de regarder si un processus zmcpustat ou zmcpustater tourne sur le serveur de messagerie :

 ps -aux | grep zmcpu 
Exploitation failles Zimbra CVE-2019-9670
Exploitation failles Zimbra CVE-2019-9670

Ou le processus zmswatch

 ps –aux | grep zmswatch 

Ou encore n’importe quel script en « .sh » anormal.

 ps -aux | grep l\.sh

Il faut ensuite tuer le ou les processus en question :

 Killall <pid> 

Ou

 Killall <nom du processus> 

Suppression des fichiers

On supprime à présent tous les fichiers / scripts malveillants.

Supprimez tous les fichiers suspects dans « /tmp ».

Puis dans /opt/zimbra/log/ supprimez les fichiers « zmcpustat » « zmcpustater » « swatchdog » ou tout fichier avec un nom créé aléatoirement.

Pour trouver les sous-dossiers de /opt/zimbra/jetty/ les fichiers en « .jsp » ou « _jsp.java » ou encore « .class » ayant moins de 15 jours, tapez les commandes suivantes :

 find /opt/zimbra/jetty/ -name "*.jsp" -mtime -15 -ls
 find /opt/zimbra/jetty/ -name "*_jsp.java" -mtime -15 -ls 
 find /opt/zimbra/jetty/ -name "*.class" -mtime -15 -ls  

Supprimez ceux ayant encore une fois des noms générés aléatoirement.

Crontab

Rendez-vous au niveau des crontabs

 cd /var/spool/cron/crontabs/ 

Si il existe des crontabs avec « tmp » dans leur nom, supprimez-les.

Maintenant éditez le fichier « zimbra ».

Commentez ou supprimez les lignes anormales :

 #*/10 * * * * /opt/zimbra/bin/zmgsaupdate
 #*/30 * * * * /opt/zimbra/log/zmcpustater  

Une fois modifié, nous allons rendre le fichier zimbra inaltérable via la commande « chattr » :

 chattr +i /var/spool/cron/crontabs/zimbra 

Si vous souhaitez le modifier ultérieurement, il faudra cette fois faire :

 chattr -i /var/spool/cron/crontabs/zimbra 

Désactivation des outils

Le piratage du serveur de messagerie passe par l’utilisation de certains outils « wget » et « curl » présents de base sur le serveur, mais pas forcément utiles au fonctionnement du serveur de mail, nous allons donc empêcher leur utilisation en les renommant.

 cd /usr/bin/
 mv wget wget.old 
 mv curl curl.old  

Droits mailboxd

À présent, nous allons remettre les droits afin de refaire fonctionner normalement « mailboxd » et que vous puissiez accéder à nouveau au Webmail.

 cd /opt/zimbra/mailboxd
 find webapps -type d -exec chmod 0755 {} \; 
 find webapps -type f -exec chmod 0644 {} \;  

Pour les pièces jointes, il faudra faire cette commande :

 chmod 0775 /opt/zimbra/data/tmp/upload 

Il est également possible d’effectuer la commande suivante :

 /opt/zimbra/libexec/zmfixperms -extended 

Faille Memcached

Pour corriger l’exploitation d’une faille via l’utilisation de Memcached, il faut appliquer le correctif suivant :

su - zimbra
/opt/zimbra/bin/zmprov ms `zmhostname` zimbraMemcachedBindAddress 127.0.0.1 
/opt/zimbra/bin/zmprov ms `zmhostname` zimbraMemcachedClientServerList 127.0.0.1   
zmmemcachedctl restart 

https://wiki.zimbra.com/wiki/Blocking_Memcached_Attack

Blocage upload zmcat

Pour prévenir des upload fait par le user agent dans le cas du virus « zmcat », vous pouvez effectuer les modifications suivantes pour bloquer les requêtes automatiques.

Dans « /opt/zimbra/conf/nginx/templates/nginx.conf.web.http.default.template », après la balise « server { » il faudra ajouter la ligne suivante :

if ($http_user_agent ~ (python-requests) ) { return 403; }

Et dans « /opt/zimbra/conf/nginx/templates/nginx.conf.web.https.default.template », de la même façon ajouter là encore :

if ($http_user_agent ~ (python-requests) ) { return 403; }

Modification mots de passe

Afin d’éviter tout problème, on change les différents mots de passe LDAP.

su zimbra

zmldappasswd votre_mot_de_passe
zmldappasswd -r votre_mot_de_passe 
zmldappasswd -a votre_mot_de_passe 
zmldappasswd -n votre_mot_de_passe 
zmldappasswd -p votre_mot_de_passe 

zmmypasswd votre_mot_de_passe  
zmmypasswd --root votre_mot_de_passe 

Puis on effectue un redémarrage complet des services Zimbra

zmcontrol restart

SSH

Réinitialisez vos clef SSH

su - zimbra
zmsshkeygen 
zmupdateauthkeys 

Vérifications

Dans un premier temps, vérifiez que l’utilisateur zimbra n’a pas de mot de passe d’activé dans /etc/shadow.

Il doit être dans la forme suivante :

zimbra:!:6666::::::

Ensuite, regardez les fichiers pour vérifier qu’il n’y a pas de connexion SSH via l’utilisateur zimbra :

/var/log/auth.log 

et

/var/log/secure

Indexation Internet

Afin de ne pas apparaitre sur les moteurs de recherches, il faudra exécuter la commande suivante :

su zimbra
zmprov mcf zimbraMailKeepOutWebCrawlers TRUE +zimbraResponseHeader "X-Robots-Tag: noindex" 

Update Zimbra (si nécessaire)

Vous trouverez sur ce lien les différentes releases de Zimbra Collaboration. Vous pouvez voir que les patchs ne sont disponibles que pour certaines versions.

https://wiki.zimbra.com/wiki/Zimbra_Releases

Si par exemple vous êtes dans une version entre la 8.7.0 et la 8.7.10 il faudra obligatoirement faire la mise à jour en 8.7.11.

https://wiki.zimbra.com/wiki/Zimbra_Releases/8.7.0/Upgrade

Pour ceci, téléchargez la version en question sur votre serveur de messagerie.

Décompressez le fichier :

tar xzvf zcs-XXXX.tgz 

Déplacez-vous dedans :

cd zcs-XXXX.tgz

Lancez l’installation via :

./install.sh

Validez les différentes boîtes de dialogue :

 Use Zimbra's packaging server [Y]                 Y
 Do you wish to upgrade? [Y]                       Y 
 The system will be modified. Continue? [N]        Y  

Cela peut prendre plusieurs minutes.

Enfin tapez les commandes suivantes (sous zimbra) :

zmprov mcf zimbraMtaCommandDirectory /opt/zimbra/common/sbin
zmprov mcf zimbraMtaDaemonDirectory /opt/zimbra/common/libexec 
zmprov mcf zimbraMtaMailqPath /opt/zimbra/common/sbin/mailq 
zmprov mcf zimbraMtaManpageDirectory /opt/zimbra/common/share/man 
zmprov mcf zimbraMtaNewaliasesPath /opt/zimbra/common/sbin/newaliases 
zmprov mcf zimbraMtaSendmailPath /opt/zimbra/common/sbin/sendmail 

Si vous n’étiez pas à minima en 8.7.0 saisissez les commandes suivantes :

zmprov ms `zmhostname` zimbraAmavisDSPAMEnabled FALSE
zmlocalconfig -e amavis_dspam_enabled=false
zmamavisdctl restart  

Patch

Vous trouverez les patchs à cette adresse :

https://wiki.zimbra.com/wiki/Zimbra_Releases

Les patchs sont cumulatifs.

Téléchargez le patch en fonction de votre version de Zimbra.

Pour retrouver votre version (ainsi que le niveau de patch), tapez la commande suivante :

zmcontrol –v

Décompressez votre tar et dirigez-vous dedans :

tar xzf zcs-patch-8.7.11_GA_XXX.tgz
cd zcs-patch-8.7.11_GA_XXX

En tant que root, installez le patch via :

./installPatch.sh

Retournez sous Zimbra et redémarrez à nouveau les services :

su zimbra
zmcontrol restart 

Enfin, vérifiez à nouveau votre version :

zmcontrol –v
Release 8.7.11.GA.1854.UBUNTU16.64 UBUNTU16_64 FOSS edition, Patch 8.7.11_P12.

Votre serveur est à présent patché contre l’exploitation des failles Zimbra CVE-2019-9670.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *