Le 4 novembre 2020, l’équipe de Wordfence Threat Intelligence a trouvé deux vulnérabilités XSS (Cross-Site Scripting) reflétées dans PageLayer, un plugin WordPress installé sur plus de 200000 sites. Ces vulnérabilités pourraient conduire un attaquant à exécuter du Javascript malveillant dans le navigateur d’un administrateur, ce qui pourrait conduire à la prise de contrôle d’un site WordPress vulnérable.

Nous avons contacté l’éditeur du plugin, Softaculous, le 6 novembre 2020, avons reçu une réponse au cours du week-end et soumis la divulgation complète le 8 novembre 2020. Un correctif a été publié le lendemain, le 9 novembre 2020.

Tous les sites exécutant Wordfence, y compris les clients Wordfence Premium ainsi que ceux exécutant toujours la version gratuite, sont protégés contre cette vulnérabilité par la protection XSS intégrée du pare-feu Wordfence.

La description: Scripts intersites réfléchis multiples (XSS)
Plugin concerné: Page Builder: PageLayer – Générateur de site Web par glisser-déposer
Plugin Slug: pagelayer
Versions affectées: <1,3,5
ID CVE: Sera mis à jour une fois que l’identifiant est fourni.
Score CVSS: 6,1 (moyen)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: L / PR: N / UI: R / S: C / C: L / I: L / A: N
Version entièrement corrigée: 1.3.5

Le plug-in PageLayer comprend une page de paramètres qui permet aux concepteurs de sites de sélectionner les options de police et de couleur par défaut à utiliser par le générateur de page. Il accepte ces options via divers $_POST paramètres. Par exemple body[font-size] ou h3[font-size] pourrait être utilisé pour définir la taille de la police pour body ou h3 les balises et color

pourrait être utilisé pour définir la couleur d’arrière-plan.

La fonction utilisée pour modifier ces paramètres, pagelayer_website_settings, contenait une vérification de capacité et un nonce pour s’assurer que seules les demandes valides et autorisées pouvaient apporter des modifications.

Une demande soumise sans le submit ne sauvegarde pas ces modifications et continue à la place pagelayer_website_settings_T fonction utilisée pour afficher les formulaires sur la page des paramètres. Malheureusement, cette fonction a également appelé deux autres fonctions qui acceptaient les entrées de l’utilisateur afin d’afficher les paramètres, et c’est là qu’un attaquant pourrait injecter du JavaScript malveillant pouvant conduire à la prise de contrôle d’un site WordPress.

XSS dans le paramètre font-size

function pagelayer_website_font_settings($prefix){
	
	global $pagelayer, $pl_error;
	
	if(!empty($_POST)){
		$vals = $_POST;
	}else{
		$vals = $pagelayer->settings;
	}
	
	?>
	
	<table>
		<tr>
			<th scope="row"><?php echo __pl('font_family'); ?></th>
			<td>
				<label>
					<select name="<?php echo $prefix;?>[font-family]">
						<?php
							foreach($pagelayer->fonts as $k => $font){							
								echo '<option value="'.$font.'" '.($vals[$prefix]['font-family'] == $font ? 'selected' : '').'>'. (empty($font) ? 'Default': $font) .'</option>';
							}
						?>
					</select>
				</label>
			</td>
		</tr>
		
		<tr>
			<th scope="row"><?php echo __pl('font_size'); ?></th>
			<td>
				<label>
					<select class="pagelayer-show-custom" onchange="pagelayer_handle_custom(this)">
						<option value="" <?php echo (empty($vals[$prefix]['font-size']) ? 'selected="seleted"' : '');?>>Default</option>
						<option value="custom" <?php echo (!empty($vals[$prefix]['font-size']) ? 'selected="seleted"' : '');?>>Custom</option>
					</select>
					<input type="number" name="<?php echo $prefix;?>[font-size]" <?php echo (!empty($vals[$prefix]['font-size']) ? 'value="'.$vals[$prefix]['font-size'].'"' : '');?> /><span>px</span>
				</label>
			</td>
		</tr>
		

le pagelayer_website_font_settings La fonction accepte l’entrée de $_POST paramètre et fait écho au $prefix[‘font-size’] sous-paramètre à chaque exécution de la fonction, où $prefix est une balise différente telle que body ou h3. En tant que tel, si un attaquant pouvait amener un administrateur à cliquer sur un lien qui soumettait une requête POST contenant, par exemple, un body[font-size] défini sur un script malveillant, ce script serait exécuté dans le navigateur de l’administrateur.

XSS dans les paramètres de couleur

function pagelayer_website_color($text, $field){
	
	global $pagelayer, $pl_error;
	
	$val = !empty($_POST) ? @$_POST['color'][$field] : @$pagelayer->settings['color'][$field];
	
	echo '
	<table>
		<tr>
			<th scope="row">'.$text.'</th>
			<td>
				<a href="#" class="pagelayer-show-vanilla"><div class="pagelayer-color-div pagelayer-color-none"></div><span class="dashicons dashicons-no"></span></a><input type="hidden" name="color['.$field.']" value="'.$val.'">
			</td>
		</tr>
	</table>';
	
}

le pagelayer_website_color La fonction accepte également les entrées du $_POST paramètre, mais fait écho au color[$value] sous-paramètre à chaque exécution de la fonction, où $value est un sélecteur CSS tel que background ou link. Si un attaquant pouvait amener un administrateur à cliquer sur un lien qui soumettait une requête POST contenant un color sous-paramètre tel que color

défini sur un script malveillant, ce script serait exécuté dans le navigateur de l’administrateur.

Nous discuté précédemment reflété XSS et comment il peut être tout aussi dangereux que le Cross-Site Scripting (XSS) stocké, en particulier lorsqu’il est déployé contre un administrateur de site. Les exploits ciblant les administrateurs de site pourraient être utilisés pour prendre le contrôle d’un site en créant des comptes administratifs malveillants ou en incorporant des portes dérobées dans des fichiers de thème. L’une des raisons pour lesquelles nous recommandons aux développeurs de plugins d’échapper à tout ce qui peut être modifié par l’entrée de l’utilisateur est que même des paramètres apparemment inoffensifs, tels que la taille de la police, peuvent être utilisés pour générer du JavaScript malveillant.

Chronologie

4 novembre 2020 – Wordfence Threat Intelligence découvre les vulnérabilités XSS reflétées dans le plugin PageLayer.
6 novembre 2020 – Nous finissons d’analyser les vulnérabilités et entamons le processus de divulgation.
8 novembre 2020 – Nous envoyons notre divulgation complète à l’éditeur du plugin.
9 novembre 2020 – Softaculous publie un patch.

Conclusion

Dans cet article, nous avons discuté de deux vulnérabilités XSS reflétées dans le panneau d’administration du plugin PageLayer. Ces vulnérabilités ont été entièrement corrigées dans la version 1.3.5 et nous recommandons vivement à tous les utilisateurs de mettre à jour vers la dernière version, 1.3.8 au moment de la rédaction de cet article. Tous les utilisateurs de Wordfence, y compris les sites exécutant Wordfence Premium ainsi que ceux qui utilisent encore la version gratuite, sont protégés par la protection XSS intégrée du pare-feu Wordfence.

Un merci spécial à Softaculous, les fabricants du plugin PageLayer, pour leur réponse rapide à la résolution de ce problème.


Source link