La fonction se contente d'enregistrer les valeurs de user_id et access_token fournies par l'utilisateur dans les options du plugin. Ces valeurs seront ensuite utilisées chaque fois qu'un backup est effectué pour sauvegarder les données sur le Drive associé aux identifiants.
Le défaut important de cette fonction est que son premier argument, la variable state, n'est jamais utilisée et aucune vérification n'est effectuée pour vérifier sa valeur. En effet, cette variable devrait être au format suivant : success:[instance_id] où instance_id est une valeur aléatoire unique pour chaque installation du plugin. Cette valeur étant inconnue d'un attaquant, si elle était vérifiée, cela rendrait impossible l'exploitation d'une attaque CSRF.
Exploitation
Pouvoir manipuler des options du plugin au moyen d'une attaque CSRF est une chose, mais concrètement, comment exploiter efficacement cette attaque ?
Après que les options contenant les identifiants Google sont enregistrées par la fonction do_complete_authentication, le plugin utilise ces informations pour se connecter au compte Google et, si le plugin est configuré pour envoyer les backups sur Google Drive, les prochains backups seront envoyés sur le Google Drive associé.
De ce fait, afin d'exploiter cette vulnérabilité, un attaquant doit dans un premier temps générer un jeton d'accès valide donnant accès à son compte Google Drive. La manière la plus simple de faire cela est d'installer le plugin UpdraftPlus sur un instance locale de WordPress, d'aller dans les paramètres du plugin, d'activer le stockage sur Google Drive et d'effectuer l'authentification sur un compte Google valide. Suite à cela, le plugin redirige automatiquement vers une page hébergée sur auth.updraftplus.com contenant un lien vers l'instance locale de WordPress au format suivant : https://[domain]/wp-admin/options-general.php?action=updraftmethod-googledrive-auth&state=success%3A[instance_id]&access_token=[access_token]&user_id=[user_id]
Afin d'exploiter la CSRF, il suffit de changer le nom de domaine du lien pour le faire diriger vers un site vulnérable et de faire en sorte qu'un administrateur authentifié sur ce site y accède.
Si l'attaque est un succès, l'attaquant recevra les prochains backups sur son compte Google Drive. Il aura potentiellement accès à la base de donnée et aux paramètres de l'installation.
Correction
Voici le correctif implémenté par l'éditeur dans la fonction handle_url_actions: