中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 網絡安全 > 
  • Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

發布時間:2020-08-07 14:05:41 來源:ITPUB博客 閱讀:218 作者:酷酷的曉得哥 欄目:網絡安全

作者: Badcode and Longofo@知道創宇404實驗室  

時間: 2020年2月9日

原文鏈接: https://paper.seebug.org/1260/

英文鏈接: https://paper.seebug.org/1261/

前言

2019年9月初我們應急了Nexus Repository Manager 2.x 命令注入漏洞(CVE-2019-5475),其大致的原因和復現步驟在   YumCapability activationCondition 方法中。

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

在上面 Path of "createrepo" 中設置的值會通過 getConfig().getCreaterepoPath() 獲取到,獲取到該值之后,調用 this.validate() 方法

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

傳進來的 path 是用戶可控的,之后將 path 拼接 --version 之后傳遞給 commandLineExecutor.exec() 方法,看起來像是執行命令的方法,而事實也是如此。跟進 CommandLineExecutor 類的 exec 方法

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

在執行命令前先對命令解析, CommandLine.parse(),會以空格作為分隔,獲取可執行文件及參數。

最終是調用了 Runtime.getRuntime().exec()執行了命令。

例如,用戶傳入的 command 是 cmd.exe /c whoami,最后到 getRuntime().exec()方法就是 Runtime.getRuntime().exec({"cmd.exe","/c","whoami"})

所以漏洞的原理也很簡單,就是在 createrepo或者 mergerepo路徑設置的時候,該路徑可以由用戶指定,中途拼接了 --version字符串,最終到了 getRuntime.exec()執行了命令。

漏洞復現

Path of "createrepo"里面傳入 payload。

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

Status 欄可以看到執行的結果

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

第一次繞過分析

第一次補丁分析

官方補丁改了幾個地方,關鍵點在 這里

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

常規做法,在執行命令前對命令進行過濾。新增加了一個 getCleanCommand() 方法,對命令進行過濾。

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

allowedExecutables是一個 HashSet,里面只有兩個值, createrepomergerepo。先判斷用戶傳入的 command是否在 allowedExecutables里面,如果在,直接拼接 params--version直接返回。接著對用戶傳入的 command進行路徑判斷,如果是以nexus的工作目錄( applicationDirectories.getWorkDirectory().getAbsolutePath())開頭的,直接返回 null。繼續判斷,如果文件名不在 allowedExecutables則返回 null,也就是這條命令需要 以 /createrepo或者 /mergerepo結尾。都通過判斷之后,文件的絕對路徑拼接 --version  之后變成了 cmd.exe \c whoami,后面是執行不了的。可以直接執行exe,注意后面是還會拼接 --version的,所以很多命令是執行不了的,但是還是有辦法利用能執行任意exe這點來做后續的攻擊的。

第二次繞過分析

第二次補丁分析

在我提交上述繞過方式后,官方修復了這種繞過方式,看下官方的 補丁

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

getCleanCommand()   C:\\Windows\\System32\\calc.exe \\..\\..\\win.ini

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

經過 parse() 第二次繞過測試

測試環境
  • 2.14.15-01 版本
  • Windows
測試步驟

Path of "createrepo"里面傳入 payload。

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

查看進程, notepad.exe 啟動了

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

可以看到,成功繞過了補丁。

第二次繞過分析+

經過Badcode師傅第二次繞過分析,可以看到能成功在Windows系統執行命令了。但是有一個很大的限制:

  1. nexus需要安裝在系統盤
  2. 一些帶參數的命令無法使用

在上面說到的 Artifacts Upload上傳處是可以上傳任意文件的,并且上傳后的文件名都是通過自定義的參數拼接得到,所以都能猜到。那么可以上傳自己編寫的任意exe文件了。

第二次繞過分析+測試
測試環境
  • 2.14.15-01 版本
  • Windows
測試步驟

導航到 Views/Repositories->Repositories->3rd party->Configuration,我們可以看到 默認本地存儲位置的絕對路徑(之后上傳的內容也在這個目錄下):

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

導航到 Views/Repositories->Repositories->3rd party->Artifact Upload ,我們可以上傳惡意的exe文件:

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

該exe文件將被重命名為 createrepo-1.exe (自定義的參數拼接的):

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

同樣在 Path of "createrepo" 里面傳入 payload(這時需要注意前面部分這時是以nexus安裝目錄開頭的,這在補丁中會判斷,所以這里可以在最頂層加 ..\ 或者弄個虛假層 aaa\..\ 等)

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

可以看到createrepo-1.exe已經執行了:

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過


最新版本分析

最新版本補丁分析

第二次補丁繞過之后,官方又進行了修復,官方 補丁主要如下

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

刪除了之前的修復方式,增加了 YumCapabilityUpdateValidator 類,在 validate 中將獲取的值與properties中設置的值使用 equals 進行絕對相等驗證。這個值要修改只能通過 sonatype-work/nexus/conf/capabilities.xml

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

最新版本驗證

前端直接禁止修改了,通過抓包修改測試:

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

YumCapabilityUpdateValidator.validate 斷到

Nexus Repository Manager 2.x 命令注入漏洞 (CVE-2019-5475) 兩次繞過

可以看到這種修復方式無法再繞過了,除非有文件覆蓋的地方覆蓋配置文件,例如解壓覆蓋那種方式,不過沒找到。

不過 Artifacts Upload那里可以上傳任意文件的地方依然還在,如果其他地方再出現上面的情況依然可以利用到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金塔县| 海南省| 县级市| 古交市| 临泉县| 杭州市| 锡林郭勒盟| 贡觉县| 霞浦县| 句容市| 宁乡县| 江都市| 金塔县| 黄骅市| 许昌县| 尼玛县| 舒兰市| 株洲市| 咸阳市| 黔东| 博野县| 云霄县| 龙州县| 白朗县| 资中县| 开远市| 类乌齐县| 萨迦县| 兴仁县| 水城县| 苍山县| 濉溪县| 元氏县| 石泉县| 湘阴县| 奉化市| 潞西市| 济南市| 伊宁市| 东方市| 柯坪县|