id: CVE-2021-39226 info: name: Grafana Snapshot - Authentication Bypass author: Evan Rubinstein,matejsmycka severity: high description: Grafana instances up to 7.5.11 and 8.1.5 allow remote unauthenticated users to view the snapshot associated with the lowest database key by accessing the literal paths /api/snapshot/:key or /dashboard/snapshot/:key. If the snapshot is in public mode, unauthenticated users can delete snapshots by accessing the endpoint /api/snapshots-delete/:deleteKey. Authenticated users can also delete snapshots by accessing the endpoints /api/snapshots-delete/:deleteKey, or sending a delete request to /api/snapshot/:key, regardless of whether or not the snapshot is set to public mode (disabled by default). impact: | An attacker can bypass authentication and gain unauthorized access to Grafana Snapshot feature. remediation: 'This issue has been resolved in versions 8.1.6 and 7.5.11. If you cannot upgrade you can block access to the literal paths: /api/snapshots/:key, /api/snapshots-delete/:deleteKey, /dashboard/snapshot/:key, and /api/snapshots/:key. They have no normal function and can be disabled without side effects.' reference: - https://github.com/advisories/GHSA-69j6-29vr-p3j9 - https://nvd.nist.gov/vuln/detail/CVE-2021-39226 - https://github.com/grafana/grafana/commit/2d456a6375855364d098ede379438bf7f0667269 - https://grafana.com/docs/grafana/latest/release-notes/release-notes-8-1-6/ - http://www.openwall.com/lists/oss-security/2021/10/05/4 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L cvss-score: 7.3 cve-id: CVE-2021-39226 cwe-id: CWE-287 epss-score: 0.9435 epss-percentile: 0.9996 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: cve2021,cve,grafana,kev,vkev,vuln http: - method: GET path: - "{{BaseURL}}/api/snapshots/:key" - "{{BaseURL}}/dashboard/snapshot/:key" matchers-condition: and matchers: - type: word words: - '"isSnapshot":true' - type: status status: - 200 # digest: 490a0046304402206b6413446a0ed93255959da5a4c5501122e0584e8281c8b39425972e590c16b90220021f0badc4c6f8f201e93e75dd3af6c3ac6f37d9e18bbaacc95327ad9f4bd85f:922c64590222798bb761d5b6d8e72950