Des mises à jour coordonnées de plugins ont eu lieu entre de nombreux plugins WordPress dits "populaires", pour corriger une vulnérabilité de sécurité commune qui permet des attaques de type cross-site scripting plus connues sous l’acronyme XSS.

WordPress a également annoncé une mise à jour de sécurité. La version WordPress 4.1.2. corrige 3 failles de sécurité ainsi qu'une vulnérabilité XSS qui "pourrait permettre à des utilisateurs anonymes de compromettre un site".

Une vulnérabilité critique cross-site scripting (XSS)

La vulnérabilité commune qui a déclenché une mise à jour coordonnée de nombreux plugins populaires est causée par deux fonctions WordPress, add_query_arg () et remove_query_arg ().

Une documentation ambiguë dans le Codex de WordPress a conduit de nombreux développeurs à utiliser ces fonctions d’une façon inappropriée. Ouvrant ainsi "la porte à de potentiels vecteurs d'attaque XSS dans leur code".

De telles attaques impliquent que les utilisateurs d’un site soient invités à cliquer sur des URL spécialement conçues qui exécutent du code JavaScript dans leurs navigateurs. L’impact dépend du rôle de l’utilisateur sur le site. Par exemple, si les victimes ont des privilèges administratifs, les attaquants pourraient déclencher des actions administratives. Si les victimes sont des utilisateurs réguliers, les attaquants pourraient voler leurs cookies d’authentification et détourner leurs comptes.

Les pages du Codex ont été créées en 2009, mais en début d'année, Samuel "Otto" Wood a mis à jour deux pages afin d’inclure des informations sur l’utilisation esc_url (). Dans tous les cas, des informations inexactes ont existé sur les deux pages de ces fonctions pendant plus de cinq ans, conduisant des centaines, sinon des milliers, de développeurs à utiliser du code non sécurisé dans leurs plugins.

Le nombre exact de plugins touchés est inconnu, mais un certain nombre de plugins dont les plus populaires sur WordPress sont impactés.

La vulnérabilité a été divulguée à l’équipe de Yoast par Johannes Schmitt de Scrutinizer CI. Joost de Valk a fait circuler l’information chez leur partenaire en sécurité, Sucuri, et, ensemble, ils ont compris que la vulnérabilité pourrait affecter beaucoup plus que les plugins WordPress SEO et Google Analytics de Yoast.

Ils ont travaillé avec les développeurs principaux de WordPress et des membres de WordPress.org afin d’évaluer combien d’autres plugins populaires pourraient être vulnérables.

Joost explique dans son avis de sécurité, après que 44 personnes aient rejoint le WordPress Slack channel dédié à travailler sur les mises à jour, qu’ils ont abouti à une sortie coordonnée de ces mises à jour.

Des millions de sites Web

Des millions de sites Web sont vulnérables en raison de ce problème. Seuls Jetpack et Yoast WordPress SEO sont actifs sur plus d’un million de sites.

Sucuri a identifié un minimum de quinze plugins touchés, mais ils ont précisé qu’ils ont seulement regardé dans le top 400 et quelques autres plugins.
Selon toute vraisemblance, beaucoup plus de plugins que ceux énumérés auront des vulnérabilités similaires. add_query_arg () et remove_query_arg () sont des fonctions relativement communes dans un développement avancé de WordPress.

Parce qu'il y a probablement beaucoup de plugins et de thèmes vulnérables qui n'ont pas encore été identifiés, les développeurs sont invités à vérifier leur propre code pour l'utilisation de add_query_arg () et remove_query_arg ().

Ce n’est pas toujours une vulnérabilité à haut risque.

Il est difficile de parler exactement de haut risque tout dépend de l’utilisation des fonctions. Comme elles sont utilisées de différentes façons dans de nombreux plugins; et même dans un certain niveau de code d’un plugin, elles pourraient être utilisées de nombreuses fois et ont différents niveaux de risque dans chaque cas.

L'Escaping est un principe fondamental du développement. Il est donc inquiétant de constater qu’il y avait une aussi large utilisation d’une fonction WordPress depuis si longtemps, et non contrôlée dans le Codex.

Une nouvelle chaîne de requête URL

Notez que cette chaîne peut contenir des données "not escape" et non destinées à une URL, surtout si les données ajoutées viennent de l’entrée de l’utilisateur. Le résultat devrait être passé à travers esc_url () avant d’être sorti comme HTML, dans un lien.

// This would output '/client/?s=word&foo=bar'
echo esc_url( add_query_arg( 'foo', 'bar' ) );
 
// This would output '/client/?s=word&foo=bar&baz=tiny'
$arr_params = array( 'foo' => 'bar', 'baz' => 'tiny' );
echo esc_url( add_query_arg( $arr_params ) );
Notez l'utilisation de esc_url () avant la sortie du lien.

// This would output 'http://blog.example.com/2009/04/16/?hello=world'
echo esc_url( add_query_arg( 'hello', 'world', 'http://blog.example.com/2009/04/16/' ) );
L’utilisation de esc_url () n’est pas nécessaire ici, parce que la valeur est connue pour être sûre.

Le risque d’exploitation reste faible

Cela dit, beaucoup de développeurs, même avec les vulnérabilités en place, disent que le risque d’exploitation est faible, en raison des privilèges requis pour attaquer des utilisateurs. Bien qu’il soit important de noter que ce n’est pas garanti, il est primordial de mettre à jour vos plugins, si vous avez des mises à jour disponibles.

Le Codex est un Wiki. Ce n’est pas une question fondamentale pour WordPress que de savoir pourquoi il a été mal documenté, mais il pointe un certain nombre de problèmes qui ont été constatés depuis quelque temps déjà, en ce qui concerne la valeur du Codex. En fait, ce matin la page du Codex pour add_query_arg() a été redirigée vers la nouvelle page developer.wordpress.org pour la fonction de remplacement.

Finalement, le Codex disparaîtra pour la plupart des fonctions de développement, au profit du nouveau « Code Reference ».

Des mises à jour forcées

Cinq plugins ont opté pour des mises à jour forcées. Jetpack, P3 Plugin Profiler, Download Monitor, Easy Digital Downloads et Related Posts for WordPress ont opté pour des mises à jour forcées et automatisées par WordPress.org. Cela signifie que ces plugins ont créé de nouvelles versions pour chaque branche majeure de leurs plugins afin d’être distribués et automatiquement mis à jour par l’équipe de WordPress.org.

D’autres plugins n’ont pas choisi cette solution. Notamment, Yoast qui n’a pas souhaité adopter la mise à jour forcée pour ses plugins WordPress SEO et Google Analytics. Joost de Valk cite des préoccupations que certains propriétaires de sites ont eu avec des plugins désactivés lors du dernier processus de mise à niveau forcée.

Pas de panique !

Si vous utilisez un site WordPress, ces mises à jour devraient probablement vous affecter.

Il n’y a aucune raison de paniquer ou d’être trop préoccupé, mais vous devriez mettre à jour vos plugins dès que vous pouvez afin de réduire votre risque de vulnérabilité.

Vous pouvez utiliser le Plugin Sucuri pour WordPress afin d'analyser votre site.