Skip to content
Heist/ feed
Back to feed
High

Unauthenticated DoS: avatar cache leaks goroutines when /avatar/:hash requests time out

Type: advisorySources: OSV

Every uncached /avatar/:hash request spawns a goroutine that refreshes the Gravatar image. If the refresh sits in the 10-slot worker queue longer than three seconds, the handler times out and stops listening for the result, so that goroutine blocks forever trying to send on an unbuffered channel. Sustained traffic with random hashes keeps tripping this timeout, so goroutine count grows linearly, eventually exhausting memory and causing Grafana to crash on some systems.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-21720
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 20:45 UTC · Revision 1

Source evidence

Unauthenticated DoS: avatar cache leaks goroutines when /avatar/:hash requests time out

core-osv · Original source

Published 27 Jan 2026, 09:07 UTC

Every uncached /avatar/:hash request spawns a goroutine that refreshes the Gravatar image. If the refresh sits in the 10-slot worker queue longer than three seconds, the handler times out and stops listening for the result, so that goroutine blocks forever trying to send on an unbuffered channel. Sustained traffic with random hashes keeps tripping this timeout, so goroutine count grows linearly, eventually exhausting memory and causing Grafana to crash on some systems.

osv:CVE-2026-21720
Complete source record
{
  "id": "98fe3ee890ac88e7f6f81146e3aa800eacd2a413d58d9cc6325f055212d3ab15",
  "url": "https://osv.dev/vulnerability/CVE-2026-21720",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Unauthenticated DoS: avatar cache leaks goroutines when /avatar/:hash requests time out",
    "summary": "Every uncached /avatar/:hash request spawns a goroutine that refreshes the Gravatar image. If the refresh sits in the 10-slot worker queue longer than three seconds, the handler times out and stops listening for the result, so that goroutine blocks forever trying to send on an unbuffered channel. Sustained traffic with random hashes keeps tripping this timeout, so goroutine count grows linearly, eventually exhausting memory and causing Grafana to crash on some systems.",
    "evidence": "osv:CVE-2026-21720",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-21720",
      "aliases": [
        "BIT-grafana-2026-21720",
        "CVE-2026-21720"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/grafana/grafana",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "723a1642e8f43947a8e0c4621face5b3d985e1d2"
                },
                {
                  "introduced": "4c0e7045f97f356716755b47183b22e7f12bb4bf"
                },
                {
                  "fixed": "e133492ed413438f6a81cd956c8d7712f83f1579"
                },
                {
                  "introduced": "ccd7b6ce7ea6184b8c7eb1de044174147dd9a648"
                },
                {
                  "fixed": "7b200250e485dcb3f2ace4587786a1e1f45c7d22"
                },
                {
                  "introduced": "92f1fba9b4b6700328e99e97328d6639df8ddc3d"
                },
                {
                  "fixed": "33436a3f337ea2f1c44aefa5c5ac508763741340"
                },
                {
                  "introduced": "20051fb1fc604fc54aae76356da1c14612af41d0"
                },
                {
                  "last_affected": "20051fb1fc604fc54aae76356da1c14612af41d0"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:-:*:*:*",
                    "range": [
                      {
                        "introduced": "3.0.0"
                      },
                      {
                        "fixed": "11.6.9"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:enterprise:*:*:*",
                    "range": [
                      {
                        "introduced": "3.0.0"
                      },
                      {
                        "fixed": "11.6.9"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:-:*:*:*",
                    "range": [
                      {
                        "introduced": "12.0.0"
                      },
                      {
                        "fixed": "12.0.8"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:enterprise:*:*:*",
                    "range": [
                      {
                        "introduced": "12.0.0"
                      },
                      {
                        "fixed": "12.0.8"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:-:*:*:*",
                    "range": [
                      {
                        "introduced": "12.1.0"
                      },
                      {
                        "fixed": "12.1.5"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:enterprise:*:*:*",
                    "range": [
                      {
                        "introduced": "12.1.0"
                      },
                      {
                        "fixed": "12.1.5"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:-:*:*:*",
                    "range": [
                      {
                        "introduced": "12.2.0"
                      },
                      {
                        "fixed": "12.2.3"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:*:*:*:*:enterprise:*:*:*",
                    "range": [
                      {
                        "introduced": "12.2.0"
                      },
                      {
                        "fixed": "12.2.3"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:12.3.0:*:*:*:-:*:*:*",
                    "range": [
                      {
                        "introduced": "12.3.0"
                      },
                      {
                        "last_affected": "12.3.0"
                      }
                    ],
                    "source": "CPE_STRING"
                  },
                  {
                    "cpe": "cpe:2.3:a:grafana:grafana:12.3.0:*:*:*:enterprise:*:*:*",
                    "range": [
                      {
                        "introduced": "12.3.0"
                      },
                      {
                        "last_affected": "12.3.0"
                      }
                    ],
                    "source": "CPE_STRING"
                  }
                ]
              }
            }
          ],
          "versions": [
            "12.3.0",
            "v12.3.0",
            "v12.0.7",
            "v11.6.8",
            "v12.2.2",
            "v12.1.4",
            "v12.0.6+security-01",
            "v12.0.6",
            "v12.2.1",
            "v12.1.3",
            "v11.6.7",
            "v12.1.2",
            "v12.0.5",
            "v11.6.6",
            "v12.1.1",
            "v12.0.4",
            "v11.6.5",
            "v12.0.3",
            "v11.6.4",
            "v12.1.0",
            "v11.6.2",
            "v11.6.0",
            "pkg/promlib/v0.0.8",
            "pkg/promlib/v0.0.7",
            "pkg/promlib/v0.0.6",
            "pkg/promlib/v0.0.5",
            "pkg/promlib/v0.0.4",
            "pkg/promlib/v0.0.3",
            "pkg/promlib/v0.0.2",
            "pkg/promlib/v0.0.1",
            "pkg/util/xorm/v0.0.1",
            "v0.0.1-test",
            "v10.0.0-preview",
            "v0.0.0-cloud",
            "v3.2.1-test",
            "v8.5.16",
            "v9.3.0-beta1",
            "v8.4.0-beta1",
            "v8.3.3",
            "v6.5",
            "v6.0.0-beta1",
            "v5.,2.4",
            "v5.0.0",
            "v5.0.0-beta5",
            "v5.0.0-beta4",
            "v5.0.0-beta3",
            "v5.0.0-beta2",
            "v5.0.0-beta1",
            "v4.6.0-beta1",
            "v4.5.0",
            "v4.5.0-beta1",
            "v4.4.0",
            "v3.1.0-beta1",
            "v3.0.2",
            "v3.0.1",
            "v3.0.0-beta7",
            "v3.0.0-beta6",
            "v2.6.0",
            "v2.6.0-beta1",
            "v2.5.0",
            "v2.0.2",
            "v2.0.1",
            "v2.0.0-beta3",
            "v2.0.0-beta1",
            "v1.9.1",
            "v1.9.0",
            "v1.9.0-rc1",
            "v1.7.0-rc1",
            "v1.6.1",
            "v1.6.0",
            "v1.5.4",
            "v1.5.3",
            "v1.5.2",
            "v1.5.1",
            "v1.5.0",
            "v1.4.0",
            "v1.3.0",
            "v1.2.0",
            "v1.1.0",
            "v1.0.4",
            "v1.0.3",
            "v1.0.2",
            "v1.0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-21720.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:51.449203345Z",
      "provider": "osv",
      "references": [
        "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-21720.json",
        "https://access.redhat.com/security/cve/CVE-2026-21720",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/21xxx/CVE-2026-21720.json",
        "https://grafana.com/security/security-advisories/cve-2026-21720",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-21720",
        "https://bugzilla.redhat.com/show_bug.cgi?id=2433226"
      ],
      "provider_metadata": {
        "cna_assigner": "GRAFANA",
        "unresolved_ranges": [
          {
            "extracted_events": [
              {
                "range": [
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "11.6.9"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.0.8"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.1.5"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "11.6.9"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.0.8"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.1.5"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.2.3"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.2.3"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.3.1"
                  },
                  {
                    "introduced": "3.0.0"
                  },
                  {
                    "fixed": "12.3.1"
                  }
                ],
                "source": "AFFECTED_FIELD",
                "strategy": "StandardRange"
              }
            ]
          }
        ],
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/21xxx/CVE-2026-21720.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-21720",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 520353,
  "published_at": "2026-01-27T09:07:04.758+00:00"
}