Le 10 juillet 2020, notre équipe Threat Intelligence a découvert une vulnérabilité dans Pack SEO tout en un, un plugin WordPress installé sur plus de 2 millions de sites. Cette faille permettait aux utilisateurs authentifiés avec un accès de niveau contributeur ou supérieur à la possibilité d’injecter des scripts malveillants qui seraient exécutés si une victime accédait à la page “tous les messages” du panneau wp-admin.

Nous avons contacté l’équipe du plugin le même jour de découverte le 10 juillet 2020 et un correctif a été publié quelques jours plus tard le 15 juillet 2020.

Ceci est considéré comme un problème de sécurité de gravité moyenne qui, comme pour toutes les vulnérabilités XSS, peut entraîner une reprise complète du site et d’autres conséquences graves. Nous vous recommandons vivement de mettre immédiatement à jour la dernière version de ce plugin. Au moment de la rédaction de ce document, il s’agit de la version 3.6.2 de All in One SEO Pack.

Les clients Wordfence Premium ont reçu une nouvelle règle de pare-feu le 10 juillet 2020 pour se protéger contre les exploits ciblant cette vulnérabilité. Les utilisateurs de Wordfence gratuits recevront cette règle après trente jours, le 9 août 2020.


All In One SEO Pack est un plugin qui fournit plusieurs fonctionnalités d’amélioration du référencement pour aider à classer le contenu d’un site WordPress plus haut sur les moteurs de recherche. Dans le cadre de ses fonctionnalités, il permet aux utilisateurs qui ont la possibilité de créer ou de modifier des articles de définir un titre et une description SEO directement à partir d’un article pendant sa modification. Cela permet aux créateurs de publications d’améliorer plus facilement le référencement des publications au fur et à mesure de leur rédaction. Cette fonctionnalité est disponible pour tous les utilisateurs qui peuvent créer des publications, tels que les contributeurs, les auteurs et les éditeurs.

Malheureusement, les métadonnées SEO pour les publications, y compris les champs de titre et de description SEO, n’avaient pas de filtrage d’entrée permettant aux utilisateurs de niveau inférieur comme les contributeurs et les auteurs de pouvoir injecter du HTML et du JavaScript malveillant dans ces champs.

	/**
	 * Saves the data of our metabox settings for a post.
	 *
	 * @since   ?
	 * @since   3.4.0   Added support for priority/frequency + minor refactoring.
	 *
	 * @param   int     $id     The ID of the post.
	 * @return  bool            Returns false if there is no POST data.
	 */
	function save_post_data( $id ) {
		$awmp_edit = null;
		$nonce     = null;

		if ( empty( $_POST ) ) {
			return false;
		}

		if ( isset( $_POST['aiosp_edit'] ) ) {
			$awmp_edit = $_POST['aiosp_edit'];
		}

		if ( isset( $_POST['nonce-aioseop-edit'] ) ) {
			$nonce = $_POST['nonce-aioseop-edit'];
		}

		if ( isset( $awmp_edit ) && ! empty( $awmp_edit ) && wp_verify_nonce( $nonce, 'edit-aioseop-nonce' ) ) {

			$optlist = array(
				'keywords',
				'description',
				'title',
				'custom_link',
				'sitemap_exclude',
				'disable',
				'disable_analytics',
				'noindex',
				'nofollow',
				'sitemap_priority',
				'sitemap_frequency',
			);

			if ( empty( $this->options['aiosp_can'] ) ) {
				unset( $optlist['custom_link'] );
			}

			if ( ! AIOSEOPPRO ) {
				$optlist = array_diff( $optlist, array( 'sitemap_priority', 'sitemap_frequency' ) );
			}

			foreach ( $optlist as $optionName ) {
				$value = isset( $_POST[ "aiosp_$optionName" ] ) ? $_POST[ "aiosp_$optionName" ] : '';
				update_post_meta( $id, "_aioseop_$optionName", $value );
			}
		}
	}

Voici un aperçu de l’endroit où ces champs peuvent être modifiés dans l’éditeur de publication:

Zone SEO en post de All in One SEO Pack.

Le titre SEO et la description SEO de chaque article sont toujours affichés sur la page “tous les articles” tels qu’ils apparaissent dans la colonne de droite pour un accès plus rapide à l’édition. Par conséquent, toutes les valeurs ajoutées au titre du SEO et aux champs de description du SEO seraient affichées ici dans un format nonanitized, entraînant l’exécution de JavaScript enregistré dans ces champs lorsqu’un utilisateur accède à la page “tous les messages”.

Les zones Titre SEO et Description SEO qui apparaissent dans la zone d’administration “Tous les messages”.

Tout JavaScript injecté dans le champ de description SEO serait également exécuté lors de la visite directe de la page si une balise de fermeture était insérée par un attaquant avant d’ajouter son propre script. Par exemple, cela pourrait ressembler à . Cela était dû au fait que la balise fermait la balise de script d’origine de la description SEO et injectait un script supplémentaire directement après.

Utilisation d’une balise de script de fermeture pour démarrer un nouveau script.

En raison de l’exécution de JavaScript chaque fois qu’un utilisateur accède à la page “tous les messages”, cette vulnérabilité serait une cible privilégiée pour les attaquants qui sont en mesure d’accéder à un compte qui leur permet de publier du contenu. Étant donné que les contributeurs doivent soumettre tous les messages pour examen par un administrateur ou un éditeur, un contributeur malveillant pourrait être sûr qu’un utilisateur doté de privilèges plus élevés accèderait à la zone “Tous les messages” pour examiner les messages en attente. Si le JavaScript malveillant a été exécuté dans le navigateur d’un administrateur, il pourrait être utilisé pour injecter des portes dérobées ou ajouter de nouveaux utilisateurs administratifs et reprendre un site.

Heureusement, dans la version corrigée, le développeur du plugin a ajouté un filtrage à toutes les valeurs méta post-SEO afin que tous les caractères HTML fournis soient échappés et incapables de devenir des scripts exécutables.

Démonstration de la preuve de concept

Quelle est la vulnérabilité d’un contributeur +?

La grande nouvelle de cette vulnérabilité est qu’elle nécessite un niveau élevé d’autorisations à exploiter, ce qui rend plus difficile pour les attaquants d’utiliser réellement dans une attaque. Par conséquent, il est moins susceptible d’être ciblé dans le cadre d’une campagne de masse automatisée. Cela pourrait cependant être une méthode supplémentaire pour intensifier une attaque plus sophistiquée. À ce titre, vous devez toujours prendre quelques précautions de sécurité pour protéger votre site contre les vulnérabilités ciblant les exploits d’utilisateurs de niveau supérieur.

Utilisez toujours le principe du moindre privilège.
Le moindre privilège est un concept de sécurité qui suggère que les utilisateurs disposent du minimum de privilèges requis pour faire leur travail. Cela signifie que lorsque vous fournissez aux utilisateurs un accès à votre site, vous devez vous assurer que vous leur accordez le moins de privilèges nécessaires pour effectuer les actions nécessaires. Si vos utilisateurs n’ont pas besoin d’écrire des articles mais ont besoin d’un compte, assurez-vous de leur fournir uniquement un accès au niveau abonné ou équivalent. Vous pouvez en savoir plus sur les rôles et capacités WordPress ici.

Nous comprenons que dans certains cas, vous devrez peut-être accorder aux utilisateurs un peu plus de privilèges pour effectuer certaines tâches que leur routine quotidienne normale. Dans ces cas, nous recommandons de fournir aux utilisateurs des privilèges temporairement élevés, puis de révoquer ces privilèges une fois la tâche terminée.

Par exemple, si vous voulez que quelqu’un écrive un article invité sur votre blog WordPress, nous vous recommandons de lui fournir un accès au niveau contributeur pour écrire l’article, puis, une fois qu’il a terminé, rétrograder ses privilèges au niveau abonné. Une fois qu’ils ont fini d’écrire le message d’invité, ils n’ont plus besoin de privilèges de niveau contributeur. Par conséquent, le maintien du principe du moindre privilège en rétrogradant ces privilèges est optimal pour la sécurité de votre site.

Parallèlement à cela, nous vous recommandons d’auditer les comptes d’utilisateurs de votre site pour vous assurer qu’il n’y a pas de comptes non autorisés ou restants à supprimer. Laisser des comptes inutilisés sur un site fournit aux attaquants plus de vecteurs d’intrusion possibles pour exploiter les vulnérabilités qui nécessitent des autorisations de niveau supérieur.

La confiance et la vérification sont importantes pour permettre aux utilisateurs d’accéder à votre site.
Lorsque vous fournissez aux utilisateurs des rôles de niveau supérieur tels que contributeur, auteur et éditeur, nous vous recommandons fortement de vérifier que l’utilisateur peut faire confiance. Cela peut être fait en vérifiant les références personnelles ou en établissant des protocoles de sécurité limitant l’accès aux personnes qui travaillent pour des entreprises réputées.

Si quelqu’un vous appelle, vous envoie un e-mail ou vous contacte de quelque manière que ce soit pour vous dire qu’il a besoin d’accéder à votre site pour une raison quelconque, et que cela ne vient pas de quelqu’un que vous connaissez et en qui vous avez confiance, cela peut être une tentative d’ingénierie sociale. Ne fournissez jamais d’informations d’identification ou d’accès au compte utilisateur, sauf si vous pouvez faire confiance et vérifier à qui vous fournissez ces informations.

N’oubliez pas de ne jamais partager de comptes ou de mots de passe. Au lieu de cela, créez des comptes séparés et choisissez l’option d’informer l’utilisateur du compte par e-mail. De cette façon, l’utilisateur peut configurer son propre mot de passe et vous pouvez appliquer des mots de passe forts à l’aide de Wordfence, de sorte que les mots de passe ne soient jamais transmis par e-mail, ce qui devrait être considéré comme un canal de communication non sécurisé. Comme vous ne partagez pas de comptes, vous pouvez toujours révoquer immédiatement l’accès pour un nouvel utilisateur si des actions malveillantes commencent à apparaître.

Utilisez et appliquez des mots de passe forts pour les utilisateurs finaux, en particulier ceux qui disposent de privilèges plus élevés.
Nous recommandons fortement d’appliquer des mots de passe forts pour tous les utilisateurs, cependant, les comptes avec des privilèges plus élevés présentent un risque élevé car ils ont plus de capacités associées à leur compte. Pour cette raison, des mots de passe forts sont extrêmement importants à appliquer, afin d’atténuer le risque associé à des attaquants obtenant un accès non autorisé à ces comptes grâce à des techniques d’attaque compromettant les mots de passe comme la force brute.

Nous recommandons également d’appliquer l’authentification à deux facteurs pour tous les utilisateurs, en particulier ceux qui ont des capacités de niveau supérieur, pour aider à fournir une couche supplémentaire de sécurité de connexion et de protection contre les attaques par force brute et les mots de passe compromis. Wordfence rend cela facile avec des fonctionnalités intégrées qui peuvent être trouvées dans la zone “Sécurité de connexion” du plugin Wordfence ou avec l’utilisation du stand alone Plugin de sécurité de connexion Wordfence. Vous pouvez en savoir plus sur l’activation et la configuration de ces paramètres ici.

Calendrier de divulgation

10 juillet 2020 – Découverte initiale et analyse de vulnérabilité. La règle de pare-feu a été publiée pour les clients Wordfence Premium. Premier contact avec l’équipe du plugin Semper.
13 juillet 2020 – Le développeur principal de Semper confirme un canal de discussion approprié. Nous fournissons une divulgation complète.
15 juillet 2020 – Un patch a été publié (version 3.6.2).
9 août 2020 – Les utilisateurs de Wordfence gratuits reçoivent une règle de pare-feu.

Conclusion

Dans la publication d’aujourd’hui, nous avons détaillé une faille qui permettait aux utilisateurs WordPress de niveau supérieur d’injecter des scripts malveillants dans les publications du plug-in SEO All in One. Cette faille a été entièrement corrigée dans la version 3.6.2. Nous recommandons aux utilisateurs de mettre à jour immédiatement la dernière version disponible au moment de la lecture de ce document.

Sites en cours d’exécution Wordfence Premium sont protégés des attaques contre cette vulnérabilité depuis le 10 juillet 2020. Les sites exécutant la version gratuite de Wordfence recevront cette mise à jour des règles de pare-feu le 9 août 2020. Si vous connaissez un ami ou un collègue utilisant ce plugin sur leur site, nous vous recommandons fortement en leur transmettant cet avis afin qu’ils puissent mettre à jour et protéger leur site WordPress.

Un merci spécial au développeur principal pour le pack SEO All in One, Benjamin Rojas, d’avoir travaillé rapidement pour obtenir un correctif afin de protéger les utilisateurs.


Source link

%d blogueurs aiment cette page :