Vulnérabilités dans MainWP dans les version inférieur à 2.0.23

Au cours de la dernière semaine, j’ai eu l’occasion d’auditer MainWP (https://mainwp.com/) qui permet une gestion centralisée d’environnements WordPress. Durant notre revue de code, certaines vulnérabilités ont été identifiées et ont été soumises à l’équipe de développement pour la production de correctifs de sécurité. La version corrigée est maintenant disponible, ainsi, si ce n’est déjà fait, n’oubliez pas de mettre votre serveur ainsi que l’ensemble de vos clients à la version 2.0.23 ou supérieur et de suivre les instructions de mises à jours dans le tableau de bord.

update_mainwp

Je tiens à remercier l’équipe de MainWP pour la mise en place rapide des correctifs associés.

Injection WP_Query dans WordPress

Le volet des vulnérabilités logiques et avancés sur la plate-forme WordPress n’est pas très documentés et la majorité des vulnérabilités rapportés sont notamment l’injection SQL, l’inclusion de fichier ou le XSS.  Pourtant comme cette plate-forme est de plus en plus utilisée pour livrer des solutions complexes, elle devient une cible de plus en plus intéressante pour des attaques ciblés visant l’accès aux données.

Les mécanismes de sécurité et le fonctionnement interne de WordPress sont souvent moins connus et maîtrisés (aussi bien en revue de code ou en attaque en aveugle),  L’une de ces catégories d’attaque est la manipulation de WP_Query, qui est le mécanisme « standard » pour interroger les articles.

L’extrait suivant est tiré d’une plugins populaire de WordPress.

$args = apply_filters('...', array_merge($_REQUEST, $args));
...
$the_query = new WP_Query( $args );

Ce qui revient à transposer l’ensemble des paramètres GET et POST associée à la requète dans les critères de recherche de WP_Query.  Coté exploitation c’est le pire scénario, mais nous retrouvons souvent des variantes de cette vulnérabilité qui impact un ou l’autre des paramètres.

La plupart des outils d’analyse de type fuzzing vont rarement identifier cette vulnérabilité, car l’impact est limité à retourner des enregistrements ou non sans provoquer d’erreur identifiable.  Par contre, d’un point de vue d’attaque ciblé, il devient très intéressant pour un attaquant de pouvoir manipuler WP_Query pour accéder à de l’information qui lui est normalement inaccessible.

Par exemple,  &post_status=draft  permettra d’accéder aux publication non publiés, &type=any permettra d’accéder à l’ensemble des types de publications, has_password aux pages protégées par mot de passe.

Dans un contexte où l’API de WordPress protège très peu les données lors des interrogations directes, des accès à de l’informations sensible deviennent alors très facile, par exemple des fiches de membres, des commandes et des pages à accès restreints.

Budget 2015, jeu d’argent en ligne et filtration de sites illégaux

Dans le nouveau budget 2015-2016 du Gouvernement du Québec, un des éléments mentionne le jeu d’argent en ligne et la perte de revenu de Loto-Québec.  La piste de solution retenue est la responsabilité pour les fournisseurs d’accès Internet de mette en place des systèmes de filtrage de sites Internet pour bloquer des sites non autorisé par le gouvernement du Québec.

Pour reprendre l’énoncé exact du budget

Une modification législative sera proposée afin d’instaurer une mesure de filtration des sites illégaux. Celle-ci prévoira qu’aucun fournisseur de services Internet ne pourra permettre l’accès à un site de jeux de hasard et d’argent en ligne dont le nom se retrouve sur une liste de sites à proscrire établie par Loto-Québec. L’application de cette mesure sera assurée par la Régie des alcools, des courses et des jeux, laquelle devra disposer des ressources nécessaires pour exercer ces nouvelles responsabilités

 

Vous pouvez consulter le Budget ici, l’énoncé est vers la fin de celui-ci dans la section sur le jeu en ligne .

Je ne tiens pas à commenter le jeu en ligne. Par contre,  le concept de filtration de sites Internet par le gouvernement est un concept qui me déplaît.  Cette approche ne fonctionne pas.  Elle a été testé dans d’autres pays avec aucun succès, les mesures technologiques sont facilement contournables, ces dispositions législatives ouvrent la porte à des abus pouvant impacter la liberté d’expression en plus d’impliquer des infrastructures supplémentaires auprès des fournisseurs Internet.

Déjà un grand nombre de citoyens utilisent des mandataires et des réseaux privés virtuels pour accéder à du contenus non accessible du Québec tel que la vidéo sur demande ou des systèmes similaires, alors imaginer que les joueurs en ligne n’utiliseront pas les mêmes techniques et qu’ils se limiterons qu’aux sites autorisés par le gouvernement est mal connaitre la technologie en cause et le fonctionnement d’Internet et des mécanismes de contrôles associés.

Les modifications législatives ne sont pas encore proposées, mais il convient de rester vigilant.  La neutralité Internet est un concept important et la mise en place de mesure technologique n’est jamais une bonne solution pour régler ce genre de problématique qui est avant tout politique.

 

 

Comment les logiciels espions contournent Google Chrome

Au cours des dernières versions, les navigateurs Internet ont ajoutés de plus en plus de protection contre l’installation de modules tierce malveillant.  Notamment Google qui a décidé de bloquer toutes extensions n’étant pas en provenance de leur Chrome Store.  Par contre, Au cours d’une investigation récente j’ai eu l’occasion d’analyser pourquoi un de ces modules s’était installé malgré tout… Encore une fois, l’utilisateur demeure le maillon faible, mais cette fois ci, ce maillon est automatisé.

Dans le cadre de ce billet, je vais me concentrer sur la méthode d’exploitation par des logiciels malveillant/espion du navigateur de Google Chrome™ qui est souvent vu comme « plus sécuritaire », le code a été simplifié pour ne pas être trop techniques et des demandes de suppression ont été demandées donc je n’inclurai pas de lien direct.

La technique est intéressante (d’un point de vue malicieux), et la même technique peut-être facilement adaptés dans plusieurs situations.

Tout commence par le lancement du logiciel malveillant. Lors de son démarrage,  le logiciel tente d’identifier les différents navigateurs et de localiser les installations de Google Chrome

Process process = new Process();
string str = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Google\\Chrome\\Application\\chrome.exe";
if (!File.Exists(str))
str = Environment.GetEnvironmentVariable("localappdata") + "\\Google\\Chrome\\Application\\chrome.exe";

 

Lorsqu’il est localisé, le logiciel fait ouvrir une fenêtre en mode invisible et accède directement à Chrome Web Store via une URL sous la forme : https://chrome.google.com/webstore/detail/xxxxx/yyyyyyyy ( ou x représente la nom de la plugin, et y son identifiant)

process.StartInfo = new ProcessStartInfo(str, i_url)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
process.Start();

Par la suite le logiciel malveillant utilise le temps et l’utilisation processeur pour attendre que le navigateur soit exécuté, il identifie la fenêtre via son titre (windowCaption.Contains(« Google Chrome ») ) et par la suite, simule des actions utilisateur via les fonctions SendMessage() Windows.

sendMessage(s_chromeHandle, "007", "0", "0");
sendMessage(s_chromeHandle, "006", "00000001", "0");
sendMessage(s_chromeHandle, "0100", "9", "000F0001");
sendMessage(s_chromeHandle, "0100", "D", "001C0001");
sendMessage(s_chromeHandle, "0102", "D", "001C0001");

Ce qui correspond à donner le focus, activer la fenêtre, simuler la touche « tabulation » et simuler la touche « enter ».   Visuellement cela correspond la cliquer sur le bouton « Ajouter à Chrome »

ajout-nouvelle-extension

Même logique pour récupérer les informations de la nouvelle fenètre, et par la suite deux nouvelles touches sont envoyés.

sendMessage(s_confirmNewExtensionWindows, "0100", "25", "014B0001");
sendMessage(s_confirmNewExtensionWindows, "0100", "D", "011C001");

Flèche vers le gauche pour sélectionner « Ajouter » et ensuite « enter » pour confirmer la nouvelle extension.

Mais que venons-nous d’accepter…

confirmation-nouvelle-extension

Ainsi la totalité des privilèges a été octroyé à cette extension.

Le logiciel malicieux installe de plus, un service sur le poste de travail qui démarre un processus en écoute sur le port 60000 sur localhost accessible via le protocole websocket, cette interface est accéder à partir de plugin qui l’utilise comme moyen de communication.

websocketServerLocation = 'ws://127.0.0.1:60000';

L’API de web service plugin est aussi intéressante (encore une fois, d’un point de vue malveillant), car elle permet d’exécuter des commandes dans le contexte du poste

  • GetMacAddress
  • IsBhoInstalled
  • GetRegistryValue
  • IsUserAdmin
  • LunchProcess (j’ignore si l’erreur typographique est volontaire ou non…)

Ce service permet aussi de conserver les informations de navigations dans des bases de données sqlite externe (temporairement stocké dans le dossier %TEMP%.  À l’inverse, la gestion des messages du côté de l’extension permet plusieurs méthodes de contrôle et de manipulation de contenu et conformément à son « manifest » est automatiquement exécuté lors des accès http/https et lors de l’ouverture de nouveaux onglets.

"content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["js/------------.js" ],
      "run_at": "document_start"
    },
	{
	  "matches": ["http://*/*", "https://*/*"],
      "js": ["js/-------------.js" ],
      "run_at": "document_end"
	}
  ],

D’un point de vue « pentester », ce genre de logiciel devient intéressant, car il est probablement exploitable dans des contextes d’escalade via une falsification de résolution DNS et une Policy redirigeant vers le localhost.   Simplement développer une page vulnérable à l’externe, et faire un code javascript utilisant le web socket pour  exploiter la méthode d’exécution d’un processus LunchProcess

Au final, ce genre d’exploitation démontre qu’il est encore trop simple contourner des infrastructures sécuritaires et la nécessitée d’avoir des spécialiste en sécurité opérationnel dans les organisations.  Cela soulève aussi différents questionnement.

  • Pourquoi ce genre d’application est autorisé dans le chrome store (la réponse simple étant l’absence d’assurance qualité et d’audit) ?
  • Pourquoi un seul logiciel de sécurité sur virustotal détectait ce logiciel comme malicieux ?
  • Pourquoi il n’a toujours de plusieurs sur l’utilisation de l’UAC (Contrôle de compte Utilisateur Windows) du coté applicatif (qui mitige pourtant ce genre d’attaque par message) ? (Et oui, le premier site retourné quand on recherche UAC est comment le désactiver… malheureusement…)
  • Combien d’autres logiciels malveillants similaires sont en circulation ?
  • Pourquoi il n’a pas un service de signature à la authenticode qui vérifi la légitimité des logiciels avant d’émettre un certificat ?

Malheureusement, il n’a pas de solution miracle à ce type d’attaque.  L’application white listing est toujours une solution, mais sera toujours trop couteux en termes d’efficacité opérationnels.  Avoir un peu plus de temps, j’en profiterai  pour vérifier l’analyse comportemental des antivirus dans un contexte ou des simulations de saisie utilisateurs sont envoyés à un autre processus ou pour vérifier si tous les flux sont bien interceptés par des systèmes de détection « Command & Control »

Vulnérabilité relais courriel (sendmail.php) dans le thème WordPress « nolimits » de whoathemes

Le thème WordPress NoLimits de whoathemes intègre un script d’expédition de courriel (sendmail.php) non sécurisé permettant l’envoi de courriel à des tiers.

$to      = isset($_POST['to']) ? test_input($_POST['to']):'';
$name    = isset($_POST['name']) ? test_input($_POST['name']):'';
$email   = isset($_POST['email']) ? test_input($_POST['email']):'';
$subject = isset($_POST['subject']) ? test_input($_POST['subject']):'';
$phone   = isset($_POST['phone']) ? test_input($_POST['phone']):'';
$website = isset($_POST['website']) ? test_input($_POST['website']):'';
$country = isset($_POST['country']) ? test_input($_POST['country']):'';
$city    = isset($_POST['city']) ? test_input($_POST['city']):'';
$company = isset($_POST['company']) ? test_input($_POST['company']):'';
$content = isset($_POST['content']) ? test_input($_POST['content']):'';
$sitename = isset($_POST['sitename']) ? test_input($_POST['sitename']):'';
$siteurl = isset($_POST['siteurl']) ? test_input($_POST['siteurl']):'';

Synchronisation de courriels cpanel/whm via ftp

Petit script de synchronisation des courriels cpanel via FTP que j’ai programmé rapidement pour finaliser une migration. lftp est requis et n’est pas présent par défaut sur Cloud linux donc il doit être installé (yum install lftp). Selon la configuration du serveur source, il peut être requis d’ajouter « set ftp:ssl-allow off; » et/ou « set ftp:passive-mode off; »

#!/bin/bash
# Hote Distant
RHOST="remote_server.example.org"
RUSER="remote_user"
RPASS="remote_password"

# Utilisateur Local
LUSER="local_user"

# Domaine de messagerie
DOMAIN="example.org"

# Copy de la configuration et des courriels
/usr/bin/lftp -c "set ftp:list-options -a;
open ftp://$RUSER:$RPASS@$RHOST/;
lcd /home/$LUSER/etc/$DOMAIN;
cd /etc/$DOMAIN;
mirror --delete --verbose;
lcd /home/$LUSER/mail/$DOMAIN;
cd /mail/$DOMAIN;
mirror --delete --verbose"

# Changement de permissions
chown $LUSER:$LUSER -R /home/$LUSER/etc/$DOMAIN/* 
chown $LUSER:$LUSER -R /home/$LUSER/mail/$DOMAIN/* 
chown $LUSER:mail /home/$LUSER/etc/$DOMAIN/passwd* /home/$LUSER/etc/$DOMAIN/quota*

/usr/local/cpanel/scripts/linksubemailtomainacct $LUSER
/scripts/mailperm $LUSER

Publié ici au cas où il serait utile à un autre sysadmin.

Vulnerabilité ntopng dans pfsense

J’ai expédié un avis de vulnérabilité la semaine dernière à l’équipe de pfsense concernant le package ntopng, pour votre information voici le commit de correction https://github.com/pfsense/pfsense-packages/commit/0e931059d5cf44828b0b1dd29a9102618d0ce2a1 . Pas besoin d’inclure de PoC, le diff est assez explicatif sur la vulnérabilité. Donc si vous utilisez le package ntopng v0.2, je vous invite à le mettre à jours.

Structure des tables de Trend Micro OfficeScan 11

L’un des nouveau éléments et pas toujours très connu de la version 11 du logiciel Trend Micro OfficeScan est la possibilité d’utiliser une base de donnée SQL serveur plutôt que la base de données interne (cette option est disponible via l’utilitaire SQLTxfr.exe disponible dans le dossier d’officescan \PCCSRV\Admin\Utility\SQL).

Ceci facile  la mise en place de rapports statistiques et de conformité, la mise ne place de tableau de bord ou d’agent de surveillance et la documentation de la configuration.  C’est un élément qui est peu documenté par Trend Micro, alors à titre d’informations voici un sommaire des principales tables à utiliser pour accéder à la configuration des agents ainsi qu’à la journalisation associée.

Trend Micro OfficeScan 11 - Structure des tables principales

Cette technique permet aussi d’accéder à certain attribut très intéressant, notamment le chemin d’accès AD du poste (DIST_NAME_AD) et le GUID de l’utilisateur, ce qui permet de mieux recouper les informations avec d’autres logiciels de sécurité.

 

Lancement en mode béta de catégo.info

C’est avec plaisir que notre entreprise rend accessible en mode invitation notre plate-forme de gestion de la sécurité catégo.info. Ce produit à été développé pour aider les organisations à gérer de façon dynamique leur sécurité de l’information, notamment leur catégorisation, les analyses de risques et la rédaction de plan directeur.

Je tiens à remercier mon équipe, ainsi que mes clients qui ont participé au développement de cette plate-forme en ligne.

Pour plus d’information visitez decouvrez.catego.info ou sur catego.info

Conférence Hackfest 2013

Vous trouverez ci-bas les ma présentation sur les techniques d’évasions antivirales pour le hackfest 2013. Merci à tous ceux qui sont venu y assister.

Bon hackfest

Go to Top