Hen*_*nry 14 coldfusion coldfusion-10 cfwebsocket
在Adobe ColdFusion 10开发指南中的点对点通信中使用WebSocket时mysocket,<cfwebsocket>可以调用一个invoke()方法,该方法可以从JavaScript调用Any CFC上的任何公共方法.
这怎么不是安全风险?cfc/function如何防止被websocket调用?
1.创建CFM页面index.cfm.
Run Code Online (Sandbox Code Playgroud)<script type="text/javascript"> function msgHandler(msgobj){ var txt = document.getElementById("myDiv"); var message = ColdFusion.JSON.encode(msgobj); txt.innerHTML += message + "<br >" + "<br>"; } function invokecfcfn(){ var fname= document.getElementById("fnname").value; if (fname == "f2") { alert("f2 selected"); mysocket.invoke("mycfc", "f2", ["echo"]); } else mysocket.invoke("mycfc", fname); } </script> <cfwebsocket name="mysocket" onmessage="msgHandler"/> <form> <select id="fnname"> <option>f1</option> <option>f2</option> <option>f3</option> </select> <input id="invokefn" name="invokefn" value="Invoke CFC function " type="button" onclick="invokecfcfn();"> <div id="myDiv"> </div> </form>2.创建一个CFC mycfc.cfc,其中包含从客户端页面调用的函数.
Run Code Online (Sandbox Code Playgroud)<cfcomponent> <cffunction name="f1" > <cfreturn "Message returned from f1"> </cffunction> <cffunction name="f2" returntype="string" > <cfargument name="arg1" type="string" required="true" > <cfset msg= "Message from wsssendmessage of f2 which you called with arg " & arg1> <cfset wssendMessage(msg)> <cfreturn "Message returned from f2"> </cffunction> <cffunction name="f3" > <cfthread action="run" name="t1" > <cfloop index="i" from="1" to="10"> <cfset sleep(20000)> <cfset wssendMessage("Message #i# from wsssendmessage of f3 #now()#")> </cfloop> </cfthread> <cfreturn "Thread initiated in f3"> </cffunction> </cfcomponent>
编辑:不是任何函数,私有函数返回:
{
"clientid":39550088,
"ns":"coldfusion.websocket.channels",
"reqType":"invoke",
"code":4001,
"type":"response",
"msg":"The method f1 was not found in component mycfc.cfc."
}
Run Code Online (Sandbox Code Playgroud)
更新:
我尝试移动mycfc.cfc到/com(在webroot之外)并添加了映射,/com并且仍然可以成功调用函数.
更新:2013年7月3日
Adobe产品安全事件响应团队(PSIRT)了解此问题,并积极与ColdFusion产品团队合作以发布修复程序.
http://blogs.coldfusion.com/post.cfm/coldfusion-10-websocket-vulnerebility
更新:2013年7月9日
Adobe已经为Windows,Macintosh和Linux发布了ColdFusion 10的安全修补程序.此修补程序解决了一个漏洞(CVE-2013-3350),该漏洞可能允许攻击者使用WebSockets在ColdFusion组件(CFC)上调用公共方法.
http://www.adobe.com/support/security/bulletins/apsb13-19.html
我不认为你可以用ColdFusion解决这个问题,因为它目前的情况(更新:这是在ColdFusion 10.0.11发布之前编写的;现在问题已由10.0.11解决).我不认为布鲁斯的基于CFML的答案 - 虽然它或其变体可行 - 但在现实世界中确实是可行的.
我可能会回到使用防火墙规则:Web套接字请求进入特定端口,因此您可以围绕该端口上的请求获得一组规则,以及允许哪些方法.
这不是一个很好的解决方案,但考虑到这种情况,它可能是最方便的.
我在对原始问题的评论中指出了我对CF方面的研究,但可能更好地从这里链接到:" Web套接字安全问题:风险评估和发现 "
Adobe 发布了适用于 Windows、Macintosh 和 Linux 的 ColdFusion 10 安全修补程序。此修补程序解决了一个漏洞 (CVE-2013-3350),该漏洞可能允许攻击者使用 WebSocket 调用 ColdFusion 组件 (CFC) 上的公共方法。
http://www.adobe.com/support/security/bulletins/apsb13-19.html
应用更新 11 后调用公共方法将返回"code":4001&"msg":"The method f1 in component mycfc cannot be accessed remotely."
| 归档时间: |
|
| 查看次数: |
2914 次 |
| 最近记录: |