{"id":18898536,"date":"2026-05-04T17:12:19","date_gmt":"2026-05-04T17:12:19","guid":{"rendered":"https:\/\/wordpress.org\/support\/topic\/public-security-patch\/"},"modified":"2026-05-04T17:15:11","modified_gmt":"2026-05-04T17:15:11","slug":"public-security-patch","status":"publish","type":"topic","link":"https:\/\/wordpress.org\/support\/topic\/public-security-patch\/","title":{"rendered":"Public Security Patch"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A client of mine really enjoys this plugin but the security issues must be addressed. I am posting the patches I made to this plugin to address the two major security issues. The Broken Access Control and CSRF issue.<br \/><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">==============================================<br \/>WORDPRESS PLUGIN SECURITY FIXES<br \/>Mega Addons For WPBakery Page Builder Version 4.3.0 -&gt; 4.3.1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">============================================== <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FILE 1: main.php<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Line 87-99 &#8211; SECURITY FIX: Added nonce verification AND capability check <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BEFORE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function vc_saving_data() {<br \/>if (isset($_REQUEST)) {<br \/><br \/>    \/\/ Sanitizing $_REQUEST before saving<br \/>    $vc_save_data = array_map( 'sanitize_text_field', $_REQUEST );<br \/>    update_option( 'vc_save_data', $vc_save_data );<br \/><br \/>}<br \/><br \/>}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"> AFTER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function vc_saving_data() {<br \/>check_ajax_referer( 'vc_mega_addons_nonce', 'nonce' );<br \/><br \/>if ( ! current_user_can( 'manage_options' ) ) {<br \/>    wp_die( __( 'Unauthorized', 'mega-addons' ) );<br \/>}<br \/><br \/>if (isset($_REQUEST)) {<br \/>    $vc_save_data = array_map( 'sanitize_text_field', $_REQUEST );<br \/>    update_option( 'vc_save_data', $vc_save_data );<br \/><br \/>}<br \/><br \/>}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CHANGES MADE:<\/p>\n\n\n\n<ul>\n<li>Line 88: Added check_ajax_referer( &#8216;vc_mega_addons_nonce&#8217;, &#8216;nonce&#8217; );<\/li>\n\n\n\n<li>Lines 90-92: Added capability check for manage_options<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Line 117 &#8211; VERSION UPDATE<br \/>BEFORE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;p&gt;Version 4.3.0&lt;\/p&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">AFTER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;p&gt;Version 4.3.1&lt;\/p&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">============================================== <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FILE 2: includes\/settings.php<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Line 13-15 &#8211; SECURITY FIX: Added nonce field<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BEFORE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;form id=\"addonsdata\"&gt;<br \/>    &lt;table class=\"form-table\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br \/>AFTER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;form id=\"addonsdata\"&gt;<br \/>    &lt;?php wp_nonce_field( 'vc_mega_addons_save', 'vc_mega_addons_nonce' ); ?&gt;<br \/>    &lt;table class=\"form-table\"&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CHANGES MADE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- Line 14: Added &lt;?php wp_nonce_field( 'vc_mega_addons_save', 'vc_mega_addons_nonce' ); ?&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">==============================================<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FILE 3: lib\/admin.js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Line 7 &#8211; SECURITY FIX: Added nonce to AJAX call<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BEFORE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data = data + '&amp;action=vc_save_data';<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">AFTER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data = data + '&amp;action=vc_save_data&amp;nonce=' + jQuery('#vc_mega_addons_nonce').val();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CHANGES MADE:<\/p>\n\n\n\n<ul>\n<li>Line 7: Added nonce parameter to AJAX data<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">==============================================<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FILE 4: index.php<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Line 8 &#8211; VERSION UPDATE<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BEFORE:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Version: 4.3.0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">AFTER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Version: 4.3.1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">==============================================<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SECURITY ISSUES FIXED:<\/p>\n\n\n\n<ol>\n<li>CSRF (Cross-Site Request Forgery)<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>The AJAX action vc_save_data had no nonce verification<\/li>\n\n\n\n<li>Attackers could trick authenticated admins to submit forms <br \/><br \/>FIX: Added check_ajax_referer() and wp_nonce_field()<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\">\n<li>Broken Access Control (Subscriber+ Settings Update)<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>No capability check &#8211; any logged-in user could update settings<\/li>\n\n\n\n<li>Should require &#8216;manage_options&#8217; capability (admin only)<br \/><br \/>FIX: Added current_user_can( &#8216;manage_options&#8217; ) check<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">==============================================<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SUMMARY OF CHANGES:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">main.php &#8211; 3 changes (nonce check, capability check, version)<br \/>includes\/settings.php &#8211; 1 change (nonce field)<br \/>lib\/admin.js &#8211; 1 change (nonce in ajax)<br \/>index.php &#8211; 1 change (version)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Total files modified: 4<br \/>Total changes: 6<br \/><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I hope this helps others. User Note: I have not independently verified that this closed or fixes the two currently known security issues with this plugin. This is my best personal attempt at solving them in the short term until an official patch is released. Please use this information and patch details at your own risk.<\/p>\n","protected":false},"template":"","class_list":["post-18898536","topic","type-topic","status-publish","hentry","topic-tag-update"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/18898536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":1,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/18898536\/revisions"}],"predecessor-version":[{"id":18898539,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/18898536\/revisions\/18898539"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=18898536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}