Grafana 8.2.3版本中包含中等程度的安全修复

228 阅读5分钟

今天我们发布了Grafana 8.2.3。这个补丁版本包括一个重要的安全修复,这个问题影响到8.0.0-beta1以上的所有Grafana版本。

Grafana云计算实例已经打了补丁,而且审计没有发现任何使用这种攻击媒介的情况。Grafana企业版的客户已被提供更新的二进制文件,并被禁止使用。

摘要

CVSS评分: 6.9

我们在2021-10-22收到一份安全报告,security@grafana.com,关于Grafana中的一个XSS漏洞。后来发现它影响了Grafana从2.0.1到8.2.2的版本。CVE-2021-41174已被分配给该漏洞。

影响

如果攻击者能够说服受害者访问引用有漏洞页面的URL,任意的JavaScript内容可能会在受害者的浏览器中执行。

访问恶意链接的用户必须是未经认证的,而且链接必须是在菜单栏中包含登录按钮的页面。

未认证的用户有两种方法可以打开Grafana中包含登录按钮的页面:

  • 启用匿名认证。这意味着Grafana中的所有页面都会对攻击开放。
  • 该链接是一个未经认证的页面。以下页面存在漏洞。
    • /dashboard-solo/snapshot/*
    • /dashboard/snapshot/*
    • /invite/:code

网址必须被精心制作,以利用AngularJS的渲染,并包含AngularJS表达式的插值绑定。AngularJS使用双大括号进行插值绑定。{{ }}

一个表达式的例子是:{{constructor.constructor(‘alert(1)’)()}} 。这可以像这样包含在链接的URL中。

当用户跟随链接并显示页面时,登录按钮将包含原始链接,并有一个查询参数,以强制重定向到登录页面。该URL没有被验证,AngularJS渲染引擎将执行URL中包含的JavaScript表达式。

攻击审计

我们不能保证下面的内容能识别所有的攻击,所以如果你使用下面描述的审计过程发现了什么,你应该考虑做一个全面的评估。

通过反向代理/负载平衡器日志

要确定你的Grafana安装是否被利用了这个漏洞,通过你的反向代理/负载平衡器访问日志,搜索路径包含{{ ,后面是调用JavaScript代码的实例。例如,这可能是试图显示一个假的登录页面或窃取浏览器或会话数据的代码。OWASP欺骗表有几个XSS攻击的例子。

通过Grafana企业的审计功能

如果你在配置中启用了 "记录Web请求",并在router_logging = true ,寻找path ,其中包含{{ ,后面是会调用JavaScript代码的请求。

打过补丁的版本

8.2.3版

解决方案和缓解措施

下载并安装适合您的Grafana版本的补丁。

Grafana云实例已经打了补丁,Grafana企业版客户在禁售期提供了更新的二进制文件。

解决方法

如果由于某些原因你不能升级,你可以使用反向代理或类似的方法来阻止访问,阻止路径中的字面字符串{{

一个Nginx规则的例子,阻止字面字符串{{

location ~ \{\{ {
    deny all;
}

时间线和事后分析

下面是一个详细的时间线,从我们最初知道这个问题开始,所有时间均为UTC:

  • 2021-10-21 23:13: 安全研究人员发送了关于XSS漏洞的初始报告。
  • 2021-10-21 23:13: 确认至少在8.0.5和8.2.2版本中是可以重现的。
  • 2021-10-22 02:02: 宣布严重程度为MEDIUM。
  • 2021-10-22 09:22: 发现开启了匿名认证的Grafana实例有漏洞。这包括play.grafana.org/。
  • 2021-10-22 09:50: 作为缓解措施,Grafana Cloud上的所有实例都禁用了匿名访问。
  • 2021-10-22 11:15: 在Grafana Cloud上部署了阻止恶意请求的解决方法。
  • 2021-10-22 12:35: 对Grafana Cloud上的实例启用了匿名访问。
  • 2021-10-22 12:51: 所有实例都受到工作方案的保护。从这一点来看,Grafana Cloud不再受到影响。
  • 2021-10-22 14:05: Grafana Cloud实例更新了修复措施。
  • 2021-10-22 19:23: 确定不需要周末工作,因为问题的严重程度为中度,并且已经确定了根本原因。
  • 2021-10-25 14:13: 结束了对Grafana云的审计;没有证据表明存在漏洞。
  • 2021-10-27 12:00:Grafana企业版图像在禁售期向客户发布。
  • 2021-11-03 12:00:公开发布。

报告安全问题

如果你认为你发现了一个安全漏洞,请将报告发送到security@grafana.com。这个地址可用于Grafana实验室的所有开源和商业产品(包括但不限于Grafana、Tempo、Loki、k6、Tanka以及Grafana Cloud、Grafana Enterprise和grafana.com)。我们只接受这个地址的漏洞报告。我们希望你使用我们的PGP密钥对你的信息进行加密。密钥的指纹是f988 7bea 027a 049f ae8e 5caa d125 8932 be24 c5ca

该密钥可从keys.gnupg.net搜索security@grafana 获得。

安全公告

Grafana博客上有一个安全类别,我们会在那里发布任何包含安全修复的补丁的摘要、补救措施和缓解细节,你可以从我们的安全公告RSS订阅更新。