某開源部落格系統最新版原始碼審計
*本文原創作者:davichi8282,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載
0×00 概述
近期審計一個JAVA開源部落格系統mblog2.5最新版,整體系統還是很安全的,漏洞較少,傳統的問題像XSS系統使用全域性過濾的方式進行實體化處理,上傳問題使用白名單校驗,越權方面限制的也比較死,本次審計主要在於發現安全問題,具體實現頁面沒有去搞,感興趣的可以自己去具體實現。
0×01 審計思路
下載此原始碼解壓之後發現40多M,比較大的一個原始碼了,如果遇到這樣比較大的原始碼,可以使用一些輔助工具去手工審計比如Notepad++,可以快速定位位置和查詢一些關鍵字去審計,比較快,但是這樣去審計可能一些邏輯安全問題發現不了,但是有利就有弊,這只是程式碼審計常用方法之一了,具體是哪些關鍵字比如可以檢視所有使用者輸入的地方,會不會結合一些危險函式去執行。比如XSS,可以全域性搜尋”request.”關鍵字,結果如下:
我們以紅框處舉例,可以直接雙擊進入程式碼位置:
可以看到直接獲取content引數做更新文章操作,這裡看似有XSS風險,但是還不能確定,可能update的時候已經做了安全處理,這時候可以看此檔案有沒有import其他,回到頂部:
可以看到引入BaseController,這裡可能含有一些全域性基礎處理相關的操作包括全域性安全過濾等操作,跟蹤。
可以看到BaseController.java檔案含有全域性過濾XSS機制,經跟蹤發現是實體化操作,這麼一來只要是import這個檔案的地方基本不存在XSS問題了。
0×02 白盒審計
原始碼資訊:mblog2.5
站點地址: ofollow,noindex" target="_blank">https://gitee.com/szhirong/mblog
不安全的隨機數生成(Fortify常掃出):
JAVA語言在生成URL或者一些需要加密金鑰等情況下會需要使用隨機數,隨機數會分為統計學和密碼學兩種,統計學輸出的資料易猜測,所以需要隨機數生成的時候建議使用密碼學PRNG,可以通過搜尋random()函式判斷;
程式碼位置:
\mblog\mblog-base\src\test\java\test\Keygen.java
此處引入 java.util.Random裡的random()函式進行隨機數生成輸出,其結果易猜測,所以需要使用
java.security.SecureRandom提供的SecureRandom()函式代替生成隨機數。
SSRF:
ssrf(伺服器端請求偽造漏洞)即一般在伺服器提供從遠端伺服器獲取內容並返回給使用者的時候容易發生,比如下載圖片,遠端獲取圖片資訊等,審計的時候可以重點關注url請求相關的操作,比如常見的url.openStream(),url.openConnection()等函式。
程式碼位置:
\mblog\mblog-base\src\main\java\mblog\base\utils\ImageUtils.java
這裡是根據URL遠端下載的地方,但是未對傳入的URL做任何過濾並且輸出到os,所以存在SSRF問題,需要對傳入的URL做白名單地址限制和禁止一些除了http,https以外的協議,比如ftp,gopher協議等。
0×03 其他
除了這些問題之外,其他的比如XXE,可以去看哪些解析xml介面,有沒有禁止解析外部實體,反序列化漏洞可以重點看readObject()等函式反序列話時候有沒有做限制過濾,或者可以直接看那些實現serializable介面的類裡有沒有重寫readObject(),readUnshared()等方法,是否存在邏輯問題,這裡審計的時候未發現反序列化相關問題。
0×04 總結
本次審計發現的問題並不多,資訊洩露這些就不寫了,主要是演示如何快速通過搜尋危險函式,關鍵字等來進行審計的方法吧。
*本文原創作者:davichi8282,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載