介绍
在研究区块链项目的过程中,360 Redteam发现区块链项目API使用Play Framework框架来构建网站。审核框架后,我们发现了一个通用漏洞。该框架不正确地处理静态文件资源的路径。任何文件读取...

介绍
在研究区块链项目的过程中,360 Redteam发现区块链项目API使用Play Framework框架来构建网站。审核框架后,我们发现了一个通用漏洞。该框架不正确地处理静态文件资源的路径。任何文件读取漏洞都可能在Windows环境中引起。
Play Framework是一个开源的Star10k + Web应用程序框架,由Scala和Java混合编写。该框架具有可扩展性和资源密集性。我们发现该框架涵盖了广泛的知名公司,包括游戏公司EA,LinkedIn,沃尔玛和三星。与此同时,我们发现该框架也用于一些区块链钱包项目,这可能会导致诸如窃取钱包密钥等问题。
漏洞数量
CVE-2018-13864
发现团队
360 RedTeam& 0keeTeam
势力范围
Play Framework 2.6.12-2.6.15
漏洞详细信息
首先,我们可以在Play Framework的 路由 文件中看到静态资源解析路由的配置信息。
#将静态资源从/public文件夹映射到/assets URL路径GET/assets/*文件controllers.Assets.at(path='/public',file)
路由调用 controllers.Assets.at 该函数将 /assets/* 指向文件目录 /public 以解析此目录中的CSS,JS文件等。跟踪controllers.Assets.at 功能
漏洞文件:/framework/src/play/src/main/scala/play/api/controllers/Assets.scala

跟踪 assetAt 功能

这里我们使用 resourceNameAt 函数来获取规范化的文件名,跟踪函数

resourceNameAt 函数首先解码文件路径URL,然后用decodeFile拼接路径,然后使用单斜杠/用 removeExtraSlashes 函数替换双斜杠//以获得最终的绝对路径。
但是,有一个路径标准化判断,它将确定文件路径规范化的前缀是否为 /public / 以及跟踪 fileLikeCanonicalPath 函数,看看做了什么

在函数中,路径以“/”作为分隔符分隔,然后遍历数组。如果遇到“.”,则删除前一个数组元素,并到达标准化路径。

由于代码用“/”分隔,在Windows环境中,我们可以使用反斜杠“\”来绕过,这样就不会删除以前的目录,实现跨目录效果,前缀是仍然是 /public /,以满足标准化路径的判断。
我们发现Scala和Java版本都受此漏洞的影响。
利用
我们在官方网站上下载了Scala版本的聊天室Demo(https://github.com/playframework/play-scala-chatroom-example/tree/2.6.x),并使用sbt在Windows下运行源代码。

获取一个静态文件,然后在编译项目后找到相应的文件路径。

构造有效负载,读取项目目录中的 build.sbt 文件。通常无法访问此文件。

400错误,检查出akkaka http不允许特殊符号,然后我们执行URL编码

成功读取目录中的其他文件。
修理计划
升级到Playframework>=2.6.16
时间线
2018-07-10 360 Redteam报道Playframework官方
2018-07-11 Playframework官方确认漏洞
2018-07-17 Playframework发布了2.6.16版以修复此漏洞
参考链接
https://www.playframework.com/security/vulnerability/CVE-2018-13864-PathTraversal
本文来自原始版本的乘客安全:0keeTeam
转载,请参阅转载声明,注明来源: https://www.anquanke.com/post/id/152476
黑客业务列表介绍和一般分类:
类别:攻击入侵破解开发
1:攻击业务订单:暂时取消所有此类业务订单[仅销售常规IDC流量]
2:入侵业务清单:包括网站源代码,办公系统,黑色系统,教育系统等。
3:破解业务类:软件,加密文件,二次打包,脱壳等。
4:二次开发业务清单:软件二次开发,源代码二次开发等
5:其他业务订单:特洛伊木马[通过所有防病毒],远程控制,特殊软件等
备注:未提及的业务订单可根据主要类别查询或直接联系客户服务。为避免浪费双方时间,请在咨询前阅读:业务交易流程及相关说明
注意:仅接受正式业务,个人无权接受。收集此内容。