2013-04-25 241 views
7

我得到了我的javaEE應用程序的veracode報告。它在任何日誌記錄上都有缺陷(使用log4j),所以我將StringEscapeUtils.escapeJava(log)添加到它們中,但veracode一直將它們報告爲安全缺陷。安全漏洞 - veracode報告 - crlf注入

這是一個正確的解決方案嗎? 我還能做什麼?

這是報告信息: 標題:日誌

不正確的輸出中和

說明: 函數調用可能會導致日誌鍛造攻擊。將非用戶提供的數據寫入日誌文件允許攻擊者僞造日誌條目或將惡意內容注入日誌文件。損壞的日誌文件可用於覆蓋攻擊者的蹤跡或作爲對日誌查看或處理實用程序的攻擊的傳遞機制。例如,如果網絡管理員使用基於瀏覽器的實用程序查看日誌,則可能會發生跨站點腳本攻擊。

建議: 儘可能避免直接在日誌文件中嵌入用戶輸入。通過使用安全日誌記錄機制(例如OWASP ESAPI Logger)來清理用戶提供的用於構造日誌 的數據,該機制將自動刪除 意外的回車和換行,並且可以配置爲使用HTML實體編碼,用於非字母數字的 數據。只有在絕對必要時編寫自定義黑名單代碼。始終驗證用戶提供的輸入以確保 符合預期格式,並儘可能使用集中式數據驗證例程。

他們建議使用ESAPI,但它是一個非常大的項目,所以我需要最簡單的辦法,謂就是爲什麼我用String.escape「StringEscapeUtils.escapeJava(日誌)」

THX先進試過!

+0

您能否提供來自Veracode報告的更多信息?當然可以剝離任何識別信息 – 2013-04-26 00:02:11

回答

7

我領導Veracode應用安全諮詢小組,並且可以詳細解答您的問題。對話的最佳場所是通過[email protected],因爲討論可能涉及您的發現的具體細節,我們可能希望避免公開。

簡短的答案是StringEscapeUtils.escapeJava()可以有效地消除典型的CRLF風險,但它不是我們的系統自動識別的機制之一,因爲在某些情況下它可能不足。

該Veracode系統有一個機制,適當標記這些調查結果,所以他們不會造成混淆。

請聯繫Veracode支持([email protected]),我們將能夠詳細討論。

此致敬禮, 吉姆。

+1

您能否詳細說明Veracode尋找的已批准機制? – 2017-10-23 10:14:22

5

本報告中存在兩個相互矛盾的問題。

首先,存在日誌注入 - 使用換行符溢出到單獨的日誌行中。 StringEscapeUtils.escapeJava會生成具有行分隔符和非ASCII字符的輸出,原則上確保此問題得到解決。然而,Veracode並不知道 - 作爲一個自動化掃描器,它並不知道該方法在做什麼以確保能夠說明,因此必須報告可能存在漏洞。當然,Veracode無法知道第三方庫代碼中的每個轉義函數。

當您在日誌行內使用自己的分隔符時,也可能發生日誌注入,例如Bad thing happened with parameters {0} and {1}。在這種情況下,如果攻擊者在其中一個參數中包含字符串" and ",那麼您將無法準確重新創建哪個數據屬於哪個參數。這裏的答案是圍繞帶有分隔符的參數,這些分隔符不出現在轉義函數的輸出中 - 例如,在每個值周圍放置雙引號,並使用escapeJava來轉義該值中的任何雙引號字符。

第二次攻擊發生在您的應用程序之外,當使用某個工具查看日誌時。如果該工具存在注入漏洞,則日誌數據中的元字符可以變爲活動狀態。典型的例子是在Web界面中查看日誌,將日誌直接複製到頁面中而不會轉義,從而導致HTML注入,從而導致日誌查看應用程序中出現跨站點腳本。

如果您可以確定您只是查看工具中的日誌,而不會遇到像這樣的愚蠢錯誤,則無需擔心。

否則,嘗試從您認爲可能受到影響的語言中轉義任何元字符。通常用於HTML的<&。如果您不希望將HTML轉義爲所有非HTML日誌數據,則可以使用另一種方式替換這些字符,例如在escapeJava的輸出中用\u003E等轉義符替換這些字符。

同樣,Veracode將無法自動計算出您正在做的事情必然是安全的,因此您必須在這些報告被忽略/處理後將其標記爲一次。

+0

我upvoted這個,但我想評論「用於查看日誌文件工具的缺陷」:如果該工具有缺陷,該工具應該是固定的。沒有好的/明智的方式來使破損工具的日誌數據「安全」。 – 2015-06-01 10:24:40

+0

確實。然而,在當天,「用於查看日誌文件的工具」可能是IE,在這種情況下,您遇到了兩個問題:首先,文本日誌中的HTML標記導致文件被嗅探爲text/html,其次文件被從本地機器上查看,結束於我的計算機區域,此時該計算機擁有足夠高的權限以便能夠通過ActiveX執行任意代碼。幸運的是,從那時起,MIME嗅探和區域權限就被馴服了,所以日誌文件中的HTML問題更爲罕見。 – bobince 2015-06-01 19:32:32

+0

使用IE查看日誌文件?這就像將子彈放入槍中一樣聰明,俯視槍管並將其射入你的眼睛,以便**看到它是否有效。 – 2015-06-02 08:11:33

1

使用StringEscapeUtils.escapeHtml(日誌)來避免HTML注入並可能解決您的問題。

+0

我這樣做了,Veracode繼續報告crlf問題。爲了說服Veracode,我必須添加'ESAPI.encoder()。encodeForHTML(raw)'。 – cjungel 2015-10-06 18:35:30

1

我遇到了同樣的問題,我通常忽略這個缺陷的原因很簡單:記錄器只是給我一個日誌事件。它不應該關心格式(暴露敏感數據是另一個問題)。

此處的解決方案是在將日誌事件寫入日誌文件的appender中添加適當的過濾/後處理。在此步驟中,您可以刪除特殊字符(\0\r - 回車,\b - 退格,\x1b - 逃生和\x7f - 刪除)和替換\n\n...,使其無法僞造日誌行注入日誌。

當你這樣做時,你可以放心地忽略所有這些缺陷。另外,如果系統管理員使用錯誤的工具查看日誌文件(執行轉義序列的任何事件,\r和退格鍵),他應該被解僱。