Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

做者: Badcode@知道創宇404實驗室
日期: 2019/07/09
原文連接html

漏洞簡介

Adobe ColdFusion 是一個商用的快速開發平臺。它能夠做爲一個開發平臺使用,也能夠提供Flash遠程服務或者做爲 Adobe Flex應用的後臺服務器 。java

2019年06月11日,Adobe 發佈安全公告[1],修復了Adobe ColdFusion多個嚴重漏洞。其中有一個由Moritz Bechler提交的命令注入漏洞(CVE-2019-7839)。windows

2019年06月26日,Moritz Bechler 在 Bugtraq 上公佈了遠程代碼執行漏洞(CVE-2019-7839)的部分細節[2],因爲 JNBridge 組件存在缺陷,而 ColdFusion 默認開啓JNBridge組件,致使代碼執行漏洞。安全

漏洞影響

•ColdFusion 2018 Update 3 及以前的版本
•ColdFusion 2018 Update 10 及以前的版本
•ColdFusion 11 Update 18 及以前的版本
•<= ColdFusion 9bash

漏洞分析

根據 Moritz Bechler 披露的部分細節,是因爲ColdFusion 默認開啓了 JNBridge listener 從而致使了漏洞。服務器

先來了解一下JNBridge。ide

什麼是 JNBridge

JNBridge 是一種領先的JAVA與.NET互操做的的產品,憑藉JNBridge技術,Java 和.NET代碼無需交叉編譯器就能夠實現對象共享。全部Java代碼運行在JVM上,而.NET代碼則運行在CLR上。在該方案下,JVM和CLR能夠運 行在不一樣的機器上,也能夠運行在一臺機器的不一樣進程上,甚至還能運行在相同的進程的不一樣應用程序域上。工具

下載 JNBridgePro,安裝完以後會有demo。試用licenseui

jnbp-eval-v10.0#1899-2367-9451-2280
這裏咱們嘗試使用.net去調用java,跑一下logDemo,瞭解下大體流程。spa

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

啓動 Java 服務端
根據 JNBridge 的安裝路徑,修改startJava.bat,運行

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

能夠看到,JNBridge 服務端 listener 已開啓,監聽在8085端口。

構建 .Net 客戶端

根據 demo的指示文檔 logDemo.pdf,一步一步構建 .Net 項目。

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

運行

運行 .Net 項目,調用 Java 服務端,成功調用。

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

如何執行調用 java.lang.Runtime

以前流程有一步是將loggerDemo.javaClass轉成 logger.dll,試想一下,是否能夠將java.lang.Runtime導成dll文件,供 .Net 客戶端引用,而後去調用 Java 服務端的java.lang.Runtime

嘗試一下

rt.jar引入 classpath

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

添加java.lang.Runtime

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

導出 runtime.dll

引入 .Net 項目中供調用

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

運行

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

成功調用到了 Java 服務端中的java.lang.Runtime,這也是這個漏洞的根源。

ColdFusion 中的 JNBridge

ColdFusion 中是默認運行了 JNBridge listener 的,而且是 Java 服務端,監聽端口是 6095(ColdFusion 2018)、6093(ColdFusion 2016)、6085(ColdFusion <=9/11)。

因爲 Coldfusion 中帶的 JNBridge 版本不一樣,因此構造 payload 的方式有些差別。

ColdFusion 2016/2018

ColdFusion 2018 中的 JNBridge 版本是 v7.3.1,沒法使用上面的的JNBridge v10去構造 payload,在 JNBridge 官網上能夠下載一部分歷史版本[3],下載 v7.3版本。

編寫想要在 Java 服務端執行的代碼

String command = "whoami";
String [] commandArgs;
String os = System.getProperty("os.name");
System.out.println(os);
if(os.toLowerCase().startsWith("win")){
      commandArgs = new String[]{"cmd.exe", "/c", command};
  }else {
      commandArgs = new String[]{"/bin/bash", "-c", command};
  }

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(commandArgs);

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null)
   {
       System.out.println(line);
   }
       br.close();

裏面使用到了java.lang.Runtimejava.lang.Processjava.io.BufferedReaderjava.io.InputStreamReaderjava.lang.System,將相關類從rt.jar中導成runtime2.dll,供 .Net 客戶端引用。

根據 Java代碼重寫

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

這裏面有個很是重要的 JNBShare.dll,這裏使用本身安裝的 JNBridge 成功後生成的 JNBShare.dll,沒法使用ColdFusion 中 JNBridge 的 JNBShare.dll,會報錯。

運行,***遠程的ColdFusion 2018(Linux平臺),成功返回結果。

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

ColdFusion 9/11

ColdFusion 9 內部的 JNBridge 版本是 v5.1,監聽端口是 6085。因爲這個版本比較老了,沒找到安裝包,如今須要生成供咱們引用的runtime2.dll和能用的JNBShare.dll。ColdFusion 內部的 JNBridge中的jnbproxyGui.exe沒法構建 .net -&gt; java項目,也就是說GUI工具用不了,所幸的是命令行工具還能夠用。

jnbproxy.exe,看下參數。

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

根據參數,生成runtime2.dll

jnbproxy /d C:\logDemo /cp C:\ColdFusion9\jnbridge\jre\lib\rt.jar /host localhost /n runtime2 /nj /pd n2j /port 6085 /pro b /pp C:\ColdFusion9\lib java.lang.Runtime java.lang.Process java.io.BufferedReader java.io.InputStreamReader java.lang.System
至於 JNBShare.dll,由於內部的沒法使用,安裝包又下載不到。幸運的是有人收藏了這個JNBShare.dll,谷歌搜索可以找到,而且恰好是v5.1版本的。

運行,***遠程的 ColdFusion 9(windows平臺),返回命令執行結果。

Adobe ColdFusion RCE(CVE-2019-7839) 漏洞分析

References

[1] 安全公告:

https://helpx.adobe.com/security/products/coldfusion/apsb19-27.html
[2] 部分細節:

https://seclists.org/bugtraq/2019/Jun/38
[3] 歷史版本:

https://jnbridge.com/download-back-versions

相關文章
相關標籤/搜索