Skip to content

GHSA-vqc4-mpj8-jxch BIT-grafana-2022-39328 CVE-2022-39328 GO-2024-2856

Grafana Race condition allowing privilege escalation

High Go
Severity
0.0 / 10
High · CVSS 4.0
Exploit chance (EPSS)
1.08%
Chance of exploitation in the next 30 days. Higher than 65.25% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Fix
9.2.4
Upgrade github.com/grafana/grafana to this version or later

Description

Today we are releasing Grafana 9.2.4. Alongside other bug fixes, this patch release includes critical security fixes for CVE-2022-39328.

Release 9.2.4, latest patch, also containing security fix:

Appropriate patches have been applied to Grafana Cloud and as always, we closely coordinated with all cloud providers licensed to offer Grafana Pro. They have received early notification under embargo and confirmed that their offerings are secure at the time of this announcement. This is applicable to Amazon Managed Grafana and Azure Managed Grafana as a service offering.

Privilege escalation

Summary

Internal security audit identified a race condition in the Grafana codebase, which allowed an unauthenticated user to query an arbitrary endpoint in Grafana. A race condition in the HTTP context creation could make a HTTP request being assigned the authentication/authorization middlewares of another call. Under heavy load it is possible that a call protected by a privileged middleware receives instead the middleware of a public query. As a result, an unauthenticated user can successfully query protected endpoints.

The CVSS score for this vulnerability is 9.8 Critical

Impact

Unauthenticated users can query arbitrary endpoints with malicious intent.

Impacted versions

All installations for Grafana versions >=9.2.x.

Solutions and mitigations

To fully address CVE-2022-39328, please upgrade your Grafana instances. Appropriate patches have been applied to Grafana Cloud.

Reporting security issues

If you think you have found a security vulnerability, please send a report to security@grafana.com. This address can be used for all of Grafana Labs' open source and commercial products (including, but not limited to Grafana, Grafana Cloud, Grafana Enterprise, and grafana.com). We can accept only vulnerability reports at this address. We would prefer that you encrypt your message to us by using our PGP key. The key fingerprint is

F988 7BEA 027A 049F AE8E 5CAA D125 8932 BE24 C5CA

The key is available from keyserver.ubuntu.com.

Security announcements

We maintain a security category on our blog, where we will always post a summary, remediation, and mitigation details for any patch containing security fixes.

You can also subscribe to our RSS feed.

Affected versions

Go

PackageVulnerableFixed in
github.com/grafana/grafana
>= 9.2.0, < 9.2.4
9.2.4
github.com/grafana/grafana
all versions
No fix yet

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

github.com/grafana/grafana Go → 9.2.4

go
go get github.com/grafana/grafana@v9.2.4 && go mod tidy

Severity breakdown

CVSS 4.0 0.0

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Attack vector
Network
Attack complexity
Low
Attack requirements
None
Privileges required
None
User interaction
None
Confidentiality (vulnerable system)
High
Integrity (vulnerable system)
High
Availability (vulnerable system)
High
Confidentiality (subsequent systems)
None
Integrity (subsequent systems)
None
Availability (subsequent systems)
None

CVSS 3.1 9.8

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Weakness

CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

The product contains a concurrent code sequence that requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence operating concurrently.

How to prevent it
  • Architecture and Design: In languages that support it, use synchronization primitives. Only wrap these around critical code to minimize the impact on performance.
  • Architecture and Design: Use thread-safe capabilities such as the data access abstraction in Spring.
  • Architecture and Design: Minimize the usage of shared resources in order to remove as much complexity as possible from the control flow and to reduce the likelihood of unexpected conditions occurring. Additionally, this will minimize the amount of synchronization necessary and may even help to reduce the likelihood of a denial of service where an attacker may be able to repeatedly trigger a critical section (CWE-400).
  • Implementation: When using multithreading and operating on shared variables, only use thread-safe functions.
  • Implementation: Use atomic operations on shared variables. Be wary of innocent-looking constructs such as "x++". This may appear atomic at the code layer, but it is actually non-atomic at the instruction layer, since it involves a read, followed by a computation, followed by a write.
  • Implementation: Use a mutex if available, but be sure to avoid related weaknesses such as CWE-412.
  • Implementation: Avoid double-checked locking (CWE-609) and other implementation errors that arise when trying to avoid the overhead of synchronization.
  • Implementation: Disable interrupts or signals over critical parts of the code, but also make sure that the code does not go into a large or infinite loop.
  • Implementation: Use the volatile type modifier for critical variables to avoid unexpected compiler optimization or reordering. This does not necessarily solve the synchronization problem, but it can help.
  • Architecture and Design, Operation: Run your code using the lowest privileges that are required to accomplish the necessary tasks [REF-76]. If possible, create isolated accounts with limited privileges that are only used for a single task. That way, a successful attack will not immediately give the attacker access to the rest of the software or its environment. For example, database applications rarely need to run as the database administrator, especially in day-to-day operations.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-8pjx-jj86-j47p
Grafana path traversal
High Known exploited Also affects github.com/grafana/grafana
CVE-2021-39226
Authentication bypass for viewing and deletions of snapshots
High Known exploited Also affects github.com/grafana/grafana
GHSA-3w66-95m3-8jxg
Grafana: Pre-authentication denial of service in the public dashboard query handler
High Also affects github.com/grafana/grafana
GHSA-9g84-39mm-q4p3
Grafana geomap panel's XYZ tile layer has a sanitize-then-interpolate ordering bug
Medium Also affects github.com/grafana/grafana
GHSA-f74p-cwhp-x2wx
Grafana Loki datasource plugin's callResource handler contains a path traversal vulnerability.
High Also affects github.com/grafana/grafana
GHSA-9493-h4f5-633x
Grafana: Path traversal in the Tempo and Loki data source plugins
Medium Also affects github.com/grafana/grafana
GHSA-wfhv-mj62-f5xh
Grafana: Users can generate Service Account tokens after permissions removal
High Also affects github.com/grafana/grafana
GHSA-gxcp-jjxh-rwp4
Grafana: SQL Expressions Read File From Disk
Medium Also affects github.com/grafana/grafana
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor