• Resolved Matt Schofield

    (@mattschofield)


    Hi. We’re receiving errors when inserting WPForm blocks, in both WPForms V 1.8.2.1 and the one published today (V 1.8.2.2).

    On selecting WPForms block, the pane to select a form appears just fine, but on selecting a form (any form) from the dropdown, the block suddenly renders only the following error message:

    Error loading block: The response is not a valid JSON response.

    The forms render and function properly on the frontend despite the error being reported in the editor.

    We use 7G Firewall from PerishablePress, a very lightweight set of rewrite rules added to our sites .htaccess file. The error logs for the firewall are reporting the following:

    109.156.***.*** - 2023/06/28 14:04:44 - GET - HTTP/2.0 - /wp-json/wp/v2/block-renderer/wpforms/form-selector - context=edit&attributes%5BclientId%5D=66cc45c6-4ff2-4393-b49d-72db69280b5e&attributes%5BformId%5D=499&attributes%5BdisplayTitle%5D=false&attributes%5BdisplayDesc%5D=false&attributes%5BfieldSize%5D=medium&attributes%5BfieldBorderRadius%5D=3px&attributes%5BfieldBackgroundColor%5D=%23ffffff&attributes%5BfieldBorderColor%5D=rgba(%200%2C%200%2C%200%2C%200.25%20)&attributes%5BfieldTextColor%5D=rgba(%200%2C%200%2C%200%2C%200.7%20)&attributes%5BlabelSize%5D=medium&attributes%5BlabelColor%5D=rgba(%200%2C%200%2C%200%2C%200.85%20)&attributes%5BlabelSublabelColor%5D=rgba(%200%2C%200%2C%200%2C%200.55%20)&attributes%5BlabelErrorColor%5D=%23d63637&attributes%5BbuttonSize%5D=medium&attributes%5BbuttonBorderRadius%5D=3px&attributes%5BbuttonBackgroundColor%5D=%23066aab&attributes%5BbuttonTextColor%5D=%23ffffff&attributes%5BcopyPasteValue%5D=%7B%22displayTitle%22%3Afalse%2C%22displayDesc%22%3Afalse%2C%22fieldSize%22%3A%22medium%22%2C%22fieldBorderRadius%22%3A%223px%22%2C%22fieldBackgroundColor%22%3A%22%23ffffff%22%2C%22fieldBorderColor%22%3A%22rgba(%200%2C%200%2C%200%2C%200.25%20)%22%2C%22fieldTextColor%22%3A%22rgba(%200%2C%200%2C%200%2C%200.7%20)%22%2C%22labelSize%22%3A%22medium%22%2C%22labelColor%22%3A%22rgba(%200%2C%200%2C%200%2C%200.85%20)%22%2C%22labelSublabelColor%22%3A%22rgba(%200%2C%200%2C%200%2C%200.55%20)%22%2C%22labelErrorColor%22%3A%22%23d63637%22%2C%22buttonSize%22%3A%22medium%22%2C%22buttonBorderRadius%22%3A%223px%22%2C%22buttonBackgroundColor%22%3A%22%23066aab%22%2C%22buttonTextColor%22%3A%22%23ffffff%22%7D&post_id=34&_locale=user [e] [V] [a] - - https://staging.**OBFUSCATED**.com/wp-admin/post.php?post=34&action=edit - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58

    By removing “modules” one-by-one of the 7G firewall, we’ve identified it’s the Query String module that WPForms has become incompatible with since 1.8.2.1. WPForms worked flawlessly with these rewrite rules in all its version prior to 1.8.2.1.

    By removing the Query String module from the 7G rewrite rules (module pasted below), the WPForms we insert in the editor render within the editor perfectly. Downgrading our security to accommodate WPForms isn’t an option.

    # 7G:[QUERY STRING]
    <IfModule mod_rewrite.c>
    
    RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
    RewriteCond %{QUERY_STRING} (/|%2f)(:|%3a)(/|%2f) [NC,OR]
    RewriteCond %{QUERY_STRING} (order(\s|%20)by(\s|%20)1--) [NC,OR]
    RewriteCond %{QUERY_STRING} (/|%2f)(\*|%2a)(\*|%2a)(/|%2f) [NC,OR]
    RewriteCond %{QUERY_STRING} (ckfinder|fckeditor|fullclick) [NC,OR]
    RewriteCond %{QUERY_STRING} (`|<|>|\^|\|\\|0x00|%00|%0d%0a) [NC,OR]
    RewriteCond %{QUERY_STRING} ((.*)header:|(.*)set-cookie:(.*)=) [NC,OR]
    RewriteCond %{QUERY_STRING} (localhost|127(\.|%2e)0(\.|%2e)0(\.|%2e)1) [NC,OR]
    RewriteCond %{QUERY_STRING} (cmd|command)(=|%3d)(chdir|mkdir)(.*)(x20) [NC,OR]
    RewriteCond %{QUERY_STRING} (globals|mosconfig([a-z_]{1,22})|request)(=|\[) [NC,OR]
    RewriteCond %{QUERY_STRING} (/|%2f)((wp-)?config)((\.|%2e)inc)?((\.|%2e)php) [NC,OR]
    RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumbs?)?)((\.|%2e)php) [NC,OR]
    RewriteCond %{QUERY_STRING} (absolute_|base|root_)(dir|path)(=|%3d)(ftp|https?) [NC,OR]
    RewriteCond %{QUERY_STRING} (s)?(ftp|inurl|php)(s)?(:(/|%2f|%u2215)(/|%2f|%u2215)) [NC,OR]
    RewriteCond %{QUERY_STRING} (\.|20)(get|the)(_|%5f)(permalink|posts_page_url)(\(|%28) [NC,OR]
    RewriteCond %{QUERY_STRING} ((boot|win)((\.|%2e)ini)|etc(/|%2f)passwd|self(/|%2f)environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (((/|%2f){3,3})|((\.|%2e){3,3})|((\.|%2e){2,2})(/|%2f|%u2215)) [NC,OR]
    RewriteCond %{QUERY_STRING} (benchmark|char|exec|fopen|function|html)(.*)(\(|%28)(.*)(\)|%29) [NC,OR]
    RewriteCond %{QUERY_STRING} (php)([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}) [NC,OR]
    RewriteCond %{QUERY_STRING} (e|%65|%45)(v|%76|%56)(a|%61|%31)(l|%6c|%4c)(.*)(\(|%28)(.*)(\)|%29) [NC,OR]
    RewriteCond %{QUERY_STRING} (/|%2f)(=|%3d|$&|_mm|cgi(\.|-)|inurl(:|%3a)(/|%2f)|(mod|path)(=|%3d)(\.|%2e)) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3c)(.*)(e|%65|%45)(m|%6d|%4d)(b|%62|%42)(e|%65|%45)(d|%64|%44)(.*)(>|%3e) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3c)(.*)(i|%69|%49)(f|%66|%46)(r|%72|%52)(a|%61|%41)(m|%6d|%4d)(e|%65|%45)(.*)(>|%3e) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3c)(.*)(o|%4f|%6f)(b|%62|%42)(j|%4a|%6a)(e|%65|%45)(c|%63|%43)(t|%74|%54)(.*)(>|%3e) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3c)(.*)(s|%73|%53)(c|%63|%43)(r|%72|%52)(i|%69|%49)(p|%70|%50)(t|%74|%54)(.*)(>|%3e) [NC,OR]
    RewriteCond %{QUERY_STRING} (\+|%2b|%20)(d|%64|%44)(e|%65|%45)(l|%6c|%4c)(e|%65|%45)(t|%74|%54)(e|%65|%45)(\+|%2b|%20) [NC,OR]
    RewriteCond %{QUERY_STRING} (\+|%2b|%20)(i|%69|%49)(n|%6e|%4e)(s|%73|%53)(e|%65|%45)(r|%72|%52)(t|%74|%54)(\+|%2b|%20) [NC,OR]
    RewriteCond %{QUERY_STRING} (\+|%2b|%20)(s|%73|%53)(e|%65|%45)(l|%6c|%4c)(e|%65|%45)(c|%63|%43)(t|%74|%54)(\+|%2b|%20) [NC,OR]
    RewriteCond %{QUERY_STRING} (\+|%2b|%20)(u|%75|%55)(p|%70|%50)(d|%64|%44)(a|%61|%41)(t|%74|%54)(e|%65|%45)(\+|%2b|%20) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\x00|(\"|%22|\'|%27)?0(\"|%22|\'|%27)?(=|%3d)(\"|%22|\'|%27)?0|cast(\(|%28)0x|or%201(=|%3d)1) [NC,OR]
    RewriteCond %{QUERY_STRING} (g|%67|%47)(l|%6c|%4c)(o|%6f|%4f)(b|%62|%42)(a|%61|%41)(l|%6c|%4c)(s|%73|%53)(=|\[|%[0-9A-Z]{0,2}) [NC,OR]
    RewriteCond %{QUERY_STRING} (_|%5f)(r|%72|%52)(e|%65|%45)(q|%71|%51)(u|%75|%55)(e|%65|%45)(s|%73|%53)(t|%74|%54)(=|\[|%[0-9A-Z]{2,}) [NC,OR]
    RewriteCond %{QUERY_STRING} (j|%6a|%4a)(a|%61|%41)(v|%76|%56)(a|%61|%31)(s|%73|%53)(c|%63|%43)(r|%72|%52)(i|%69|%49)(p|%70|%50)(t|%74|%54)(:|%3a)(.*)(;|%3b|\)|%29) [NC,OR]
    RewriteCond %{QUERY_STRING} (b|%62|%42)(a|%61|%41)(s|%73|%53)(e|%65|%45)(6|%36)(4|%34)(_|%5f)(e|%65|%45|d|%64|%44)(e|%65|%45|n|%6e|%4e)(c|%63|%43)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(.*)(\()(.*)(\)) [NC,OR]
    RewriteCond %{QUERY_STRING} (@copy|\$_(files|get|post)|allow_url_(fopen|include)|auto_prepend_file|blexbot|browsersploit|(c99|php)shell|curl(_exec|test)|disable_functions?|document_root|elastix|encodeuricom|exploit|fclose|fgets|file_put_contents|fputs|fsbuff|fsockopen|gethostbyname|grablogin|hmei7|input_file|open_basedir|outfile|passthru|phpinfo|popen|proc_open|quickbrute|remoteview|root_path|safe_mode|shell_exec|site((.){0,2})copier|sux0r|trojan|user_func_array|wget|xertive) [NC,OR]
    RewriteCond %{QUERY_STRING} (;|<|>|\'|\"|\)|%0a|%0d|%22|%27|%3c|%3e|%00)(.*)(/\*|alter|base64|benchmark|cast|concat|convert|create|encode|declare|delete|drop|insert|md5|request|script|select|set|union|update) [NC,OR]
    RewriteCond %{QUERY_STRING} ((\+|%2b)(concat|delete|get|select|union)(\+|%2b)) [NC,OR]
    RewriteCond %{QUERY_STRING} (union)(.*)(select)(.*)(\(|%28) [NC,OR]
    RewriteCond %{QUERY_STRING} (concat|eval)(.*)(\(|%28) [NC]
    
    	#RewriteRule .* - [F,L]
    
        RewriteRule .* /7G_log.php?log [END,NE,E=7G_QUERY_STRING:%1___%2___%3]
    
    </IfModule>

    Is this something you could please look in to? I’ve tested with 8G Firewall (currently in beta) and the same issue occurs. Thanks for looking.

Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Support Ralden Souza

    (@rsouzaam)

    Hi @mattschofield,

    Thanks for reaching out!

    Could you please share the site info by going to WPForms > Tools > System Info? This will help us to investigate this issue.

    Thanks!

    Thread Starter Matt Schofield

    (@mattschofield)

    Thanks. The details below are from a small stage I’ve set up just for troubleshooting this issue. The issue is occurring on all sites I use 7G firewall on. All site environments are broadly similar in build and up to date.

    ### Begin System Info ###
    
    -- WPForms Info
    
    Lite:                     Jun 28, 2023 @ 7:17pm
    Lite Connect:             Backup is not enabled
    
    -- Site Info
    
    Site URL:                 https://staging.obfus.com
    Home URL:                 https://staging.obfus.com
    Multisite:                No
    
    -- WordPress Configuration
    
    Version:                  6.2.2
    Language:                 en_GB
    User Language:            en_GB
    Permalink Structure:      /%category%/%postname%/
    Active Theme:             FWJTheme 1.0.0 (Astra-child)
    Show On Front:            page
    Page On Front:            Home (#34)
    Page For Posts:           Unset
    ABSPATH:                  /home/obfusc/public_html/staging/
    Table Prefix:             Length: 6   Status: Acceptable
    WP_DEBUG:                 Disabled
    WPFORMS_DEBUG:            Not set
    Memory Limit:             40M
    Registered Post Stati:    publish, future, draft, pending, private, trash, auto-draft, inherit, request-pending, request-confirmed, request-failed, request-completed
    Revisions:                Limited to 3
    
    -- WordPress Uploads/Constants
    
    WP_CONTENT_DIR:           /home/obfusc/public_html/staging/wp-content
    WP_CONTENT_URL:           https://staging.obfus.com/wp-content
    UPLOADS:                  Not set
    wp_uploads_dir() path:    /home/obfusc/public_html/staging/wp-content/uploads/2023/06
    wp_uploads_dir() url:     https://staging.obfus.com/wp-content/uploads/2023/06
    wp_uploads_dir() basedir: /home/obfusc/public_html/staging/wp-content/uploads
    wp_uploads_dir() baseurl: https://staging.obfus.com/wp-content/uploads
    
    -- Must-Use Plugins
    
    aios-firewall-loader.php: 
    
    -- WordPress Active Plugins
    
    Advanced Editor Tools: 5.9.0
    All In One WP Security: 5.1.9
    Asset CleanUp: Page Speed Booster: 1.3.9.1
    Astra Bulk Edit: 1.2.6
    Astra Pro: 4.1.5
    Broken Link Checker: 2.2.0
    Code Snippets: 3.4.0
    Imagify: 2.1.1
    Password Protected: 2.6.3.1
    Redirection: 5.3.10
    Relevanssi: 4.20.0
    Sidebar Manager: 1.1.7
    WPForms Lite: 1.8.2.2
    WP Rocket: 3.14
    WP Rollback: 1.7.3
    Yoast SEO: 20.10
    Yoast Test Helper: 1.17
    
    -- WordPress Inactive Plugins
    
    
    -- Webserver Configuration
    
    PHP Version:              8.1.20
    MySQL Version:            8.0.33
    Webserver Info:           Apache
    
    -- PHP Configuration
    
    Memory Limit:             256M
    Upload Max Size:          2M
    Post Max Size:            8M
    Upload Max Filesize:      2M
    Time Limit:               30
    Max Input Vars:           1000
    Display Errors:           N/A
    
    -- PHP Extensions
    
    cURL:                     Supported
    fsockopen:                Supported
    SOAP Client:              Not Installed
    Suhosin:                  Not Installed
    
    -- Session Configuration
    
    Session:                  Disabled
    
    ### End System Info ###
    Plugin Support Ralden Souza

    (@rsouzaam)

    Hi @mattschofield,

    Thanks for the details!

    We are looking into the issue, and will update you as soon as we have more details. In the meantime, please feel free to let me know if you have any questions.

    Thanks!

    Thread Starter Matt Schofield

    (@mattschofield)

    In case it helps save a bunch of time, it’s the two lines below (from the 7G query string module) that reveal the problem.

    RewriteCond %{QUERY_STRING} (e|%65|%45)(v|%76|%56)(a|%61|%31)(l|%6c|%4c)(.*)(\(|%28)(.*)(\)|%29) [NC,OR]
    
    RewriteCond %{QUERY_STRING} (concat|eval)(.*)(\(|%28) [NC]

    Both lines are blocking potentially malicious requests that contain the string ‘eval’ ( or ‘eval()’ ). With those two lines removed from .htaccess, WPForms render properly in the gutenberg block editor. I’m sure you’re already there, but if by chance the above is useful, cool.

    kaggdesign

    (@kaggdesign)

    Thank you, @mattschofield; we have already discovered it. Frankly speaking, the problem is in the not well-developed code of the 7G Firewall. They should check for the proper regular expression to determine eval function usage, which is always eval ( ... ). Instead, they block any request, containing eval as a part of the text. Let’s say, if a request contained the word evaluation, this would also create a problem.

    Our Gutenberg block had the copyPasteValue variable, which contained eval substring. We changed it to copyPasteJsonValue – so there is no more eval in the setting name. And this was our solution to avoid the bug on the 7G side.

    The update should be released at the end of July.

    Thread Starter Matt Schofield

    (@mattschofield)

    Thank you @kaggdesign

    I’ve reported and described the false positive to PerishablePress, along with your recommendation to check the proper regular expression. 8G is in beta, so perhaps the next release will be updated to reflect the above if feasible.

    Thread Starter Matt Schofield

    (@mattschofield)

    Just to tie this off out of courtesy. PerishablePress kindly replied to the report I filed. This is the first eval false-positive instance they can recall being reported, and as such is unlikely to prompt a change in the core of the firewall.

    Perhaps as the 7G and 8G rules are adopted by more security devs, false positive reports may become more frequent. I believe AIOWPS may be considering adopting the 7G set as an option for users alongside their current 5G and 6G offerings. I note from another recent “invalid json response” post in here that DreamShield reported to its users that the formselector.es5.js file was potentially malicious, which contains the innocent but offending “copypasteValue” text identified above. I wonder if they adopted the same 7G or 8G rule recently?

    Anyhow, thanks again.

    Plugin Support Ralden Souza

    (@rsouzaam)

    Hi @mattschofield,

    Thanks for all the information shared so far!

    Please know this issue will be fixed in WPForms version 1.8.2.3. I’m taking note of this topic, and I’ll make sure to send you an update when the new version that fixes this issue is released.

    Thanks!

    Thread Starter Matt Schofield

    (@mattschofield)

    Thanks @rsouzaam

    Plugin Support Ralden Souza

    (@rsouzaam)

    Hi @mattschofield,

    I wanted to share some good news! We’ve just released WPForms version 1.8.2.3.

    This version should solve the conflict between WPForms and the 7G Firewall plugin. If you’d like to check the details out, here’s our changelog.

    As the issue is solved with this new version, I’m going to go ahead and close this thread for now. But if you’d like us to assist further, please feel welcome to continue the conversation.

    Thanks!

Viewing 10 replies - 1 through 10 (of 10 total)

The topic ‘Error loading block: the response is not a valid JSON response’ is closed to new replies.