研究人員最近發(fā)現(xiàn),Java和Python運行時都存在漏洞,它們未能正確驗證FTP URL中的特殊字符,最終導(dǎo)致黑客甚至能夠繞過防火墻訪問本地網(wǎng)絡(luò)。
上周六,安全研究員Alexander Klink公布了一種很有趣的攻擊方式,他利用Java應(yīng)用中的XXE(XML External Entity)漏洞發(fā)送郵件。XXE漏洞就是欺騙應(yīng)用去解析構(gòu)建的XML文件,從而讓XML解析器泄露敏感信息如文件、目錄列表甚至是服務(wù)器上運行的進(jìn)程。
Klink演示相同類型的漏洞還可以用來欺騙Java runtime向遠(yuǎn)程服務(wù)器發(fā)起FTP連接,URL形式是:
ftp://user:password@host:port/file.ext
結(jié)果發(fā)現(xiàn)Java FTP客戶端并不會過濾特殊的CR和LF字符,而會解析這些字符。CRLF的意思就是回車(CR, ASCII 13, ) 換行(LF, ASCII 10, )。在FTP URL中插入這些字符會導(dǎo)致Java FTP客戶端執(zhí)行這些命令,甚至還可以執(zhí)行SMTP (Simple Mail Transfer Protocol)命令,因為SMTP與FTP語法很相似。
Klink的演示中,黑客可以利用漏洞強迫Java程序向SMTP服務(wù)器發(fā)送郵件。
Klink在博客介紹了攻擊場景:“當(dāng)你能從一臺能夠解析XML的服務(wù)器連接到一臺無限制(甚至沒有垃圾郵件、病毒郵件過濾)的內(nèi)部郵件服務(wù)器時,這個攻擊就會非常有意思。”
Python和Java的新漏洞
看到Klink的攻擊后,來自Blindspot Security的研究員Timothy Morgan又公開了一種類似的攻擊方式,這種攻擊方式能夠針對Java和Python的FTP——由于該攻擊可被用來繞過防火墻,因此更為嚴(yán)重。
Morgan把攻擊稱為“通過惡意URL的FTP協(xié)議流注入”,這種攻擊和利用了缺少CRLF過濾特性注入惡意FTP命令的方法是類似的。
Morgan沒有注入SMTP 命令,而是利用了FTP PORT命令讓客戶端連接FTP服務(wù)器的指定TCP端口。
安全人員指出,很多基于Linux的全狀態(tài)數(shù)據(jù)包檢測型防火墻(SPI),包括商業(yè)防火墻,會支持傳統(tǒng)模式的FTP,當(dāng)檢測到來自客戶端的FTP流量中的PORT命令時就會自動打開TCP端口,并且轉(zhuǎn)發(fā)到那個FTP客戶端的局域網(wǎng)IP。
這種攻擊向量已經(jīng)存在多年,所以conntrack的開發(fā)者們會加入額外的檢查步驟,conntrack是一套大部分防火墻都會用到的Linux工具。加入檢查之后,端口只會在PORT命令出現(xiàn)在TCP包開始的時候打開,這樣就能確保真的是客戶端發(fā)送了命令。
此處對黑客而言,攻擊需要解決兩個問題:
1. 發(fā)現(xiàn)客戶端的內(nèi)部IP地址,從而偽造PORT命令;
2. 調(diào)整客戶端與服務(wù)器端的TCP包,讓PORT命令落到包的開頭
Morgan稱他已經(jīng)找到了解決這兩個問題的方法,就是通過“通過惡意URL的FTP協(xié)議流注入”,并且他已經(jīng)開發(fā)了PoC exp打算在Oracle和Python修復(fù)FTP客戶端代碼后公開。
“整個攻擊(包括判斷受害者內(nèi)部IP的請求)是通過三個SSRF(服務(wù)器端請求偽造)實現(xiàn)的,這三個攻擊打開了TCP端口”,Morgan周一在博客中說到,“每次額外的SSRF攻擊都可以打開一個新的TCP端口。”
利用方法
利用漏洞的方法有很多,包括攻擊那些安裝了Java的用戶。用戶甚至都不需要執(zhí)行惡意Java applet,因為exp可以通過Java Web開始程序傳送。
“如果一個安裝了Java的桌面用戶訪問了一個惡意網(wǎng)站,即使Java applet被關(guān)閉,還是可以觸發(fā)Java Web Start解析JNLP文件,文件中可以包含惡意FTP代碼,從而觸發(fā)漏洞。”
攻擊者還可以利用中間人或者利用SSRF/XXE漏洞來攻擊那些運行Java應(yīng)用的服務(wù)器。
Morgan表示,他成功攻擊了運行最新內(nèi)核的Linux防火墻,而來自Palo Alto Networks和思科的防火墻在默認(rèn)設(shè)置下也未能幸免。雖然只測試了兩款商業(yè)防火墻,但他預(yù)計受此影響的防火墻不在少數(shù)。
安全建議
建議防火墻廠商在Java和Python工程師修復(fù)漏洞之前關(guān)閉傳統(tǒng)的FTP轉(zhuǎn)換模式。
用戶應(yīng)該禁用瀏覽器的Java插件并且取消.jnlp文件與Java Web Start的關(guān)聯(lián)。同時,對Java和Python應(yīng)用應(yīng)該審計SSRF和XXE漏洞。
*參考來源:NetworkWorld,本文作者:Sphinx,轉(zhuǎn)載請注明來自FreeBuf(FreeBuf.COM)