Grafana Labs reports:
+++ +On Nov. 2, during an internal security audit, we discovered that when the fine-grained access control beta feature is enabled and there is more than one organization in the Grafana instance, Grafana 8.0 introduced a mechanism which allowed users with the Organization Admin role to list, add, remove, and update users’ roles in other organizations in which they are not an admin.
+
Grafana Labs reports:
+++ +If an attacker is able to convince a victim to visit a URL referencing a vulnerable page, arbitrary JavaScript content may be executed within the context of the victim’s browser.
+The user visiting the malicious link must be unauthenticated, and the link must be for a page that contains the login button in the menu bar.
+There are two ways an unauthenticated user can open a page in Grafana that contains the login button:
++
+- Anonymous authentication is enabled. This means all pages in Grafana would be open for the attack.
+- The link is to an unauthenticated page. The following pages are vulnerable: +
++
+- +
/dashboard-solo/snapshot/*
- +
/dashboard/snapshot/*
- +
/invite/:code
The url has to be crafted to exploit AngularJS rendering and contain the interpolation binding for AngularJS expressions. AngularJS uses double curly braces for interpolation binding:
+{{ }}
An example of an expression would be:
+ +{{constructor.constructor(‘alert(1)’)()}}
. This can be included in the link URL like this:When the user follows the link and the page renders, the login button will contain the original link with a query parameter to force a redirect to the login page. The URL is not validated, and the AngularJS rendering engine will execute the JavaScript expression contained in the URL.
+