价值1250美元的ERPNext模版注入漏洞

作者:深圳市网安计算机安全检测技术有限公司 | 国际 2019/03/07 13:52:34 734
文章来源:https://www.freebuf.com/articles/web/196075.html

几个月前,我专注于电子医疗记录web应用程序中的漏洞研究。在研究过程当中,我发现ERPNext是由FrappéTechnologiesPvt开发的企业资源规划软件。其中有可用的医疗保健模块以及漏洞披露计划,因此我决定对ERPNext进行简单测试并审计其免费试用版。在我发现Web应用用户配置文件页中的服务器端模板注入漏洞之前,我花了相当长的时间。

1_B_GcP5OL7FY2Z-fPM6fwNg.jpeg

正如你在上图中所看到的, first name{{7*7}}和last name{{8*8}}字段在上面呈现为49和64。这足以表明存在模板注入漏洞。我使用下面的图片来自Portswigger博客,网址为https://portswigger.net/blog/server-side-template-injection,James Kettle确定了用作Jinja2的模板引擎。以下使用的图片是在Portswigger博客(https://portswigger.net/blog/server-side-template-injection)上找到的,确认使用的模板引擎为Jinja2。

2_jeI82s02ke_rf8bh-gnk8A.png

然后我将first name字段设置为:

{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}

刷新后可以看到以下页面,这表明我在运行Web应用程序的服务器上具有读取权限。

3_a-FKLy13PLSXjjERwzK4LA.png

接着,我将我的first name设置为:

{{ ''.__class__.__mro__[2].__subclasses__()[40]('/home/frappe/PoC.txt', 'w').write(' Proof of Concept: brian@hyde.solutions') }}

刷新页面后,将我的first name设置为:

{{ ''.__class__.__mro__[2].__subclasses__()[40]('/home/frappe/PoC.txt').read() }}

再次刷新并出现以下消息,表明我能够成功地在文件系统上写入文件。

4_rAoGu4gbYunRjsvbA18Nuw.png

此外,我还能读取到他们的SSH RSA私钥,但我不会将它公布出来。总之,这是一个非常严重的安全漏洞。我向Frappé报告了该漏洞,他们很快为此推出了一个修复补丁。从本质上讲,他们只是将包含字符串.__的名称列入了黑名单而不是渲染模板,例如{{7*7}}仍会呈现为49。在阅读Frappé的一些文档并查看了Github上ERPNext的一些源码之后我发现,通过提交以下模板语法作为我的first或last name,我可以泄露更多的敏感信息:

{{ frappe.local.conf }}

刷新页面后,显示以下信息:

5_O-3ed2Pp3oOyb2xvUU7jRw.png

然后,我再次向他们报告了这个问题,这次他们推出的补丁比之前的要好很多。ERPNext的开发人员对我的审计和提交的报告表示感谢,并为此支付了我1250美元的奖金。这里我想提一点,Frappé的漏洞披露计划并未正式提供奖赏,但他们会对提交的漏洞和负责任的漏洞披露提供酬劳并分配CVE。

除了以上展示的SSTI漏洞之外,我还在以下电子邮件响应中发现了多个XSS漏洞,一个SQL注入漏洞和另一个SSTI漏洞:

6_dz9gFVRHL_6crxPHOqrEGA.png7_IYcl4Nyp1KYkjoXGBH10HA.png

总而言之,如果你希望为开源软件基金会做出贡献,或是想要寻求一些好的实践目标,并获取CVE编号的分配。那么请尝试查看Frappé Technologies Pvt的ERPNext。

安全漏洞报告

Frappe安全公告

推荐关注

指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室