⑴ fastjson為什麼經常爆出安全漏洞
fastjson是阿里巴巴開源的一款快速、輕量級的JSON解析庫。然而,fastjson在使用過程中經常爆出安全漏洞,本文將剖析fastjson反序列化漏洞的原理及防範措施。
fastjson在解析JSON字元串時,首先會查找字元串中的第一對引號內容,若內容為"@type",則載入下一對引號中的類。在JavaBeanInfo類中獲取類的詳細信息,匹配以"set"開頭的方法。函數名長度大於4,且為非靜態函數,返回類型為void或當前類參數個數為1個的方法。函數名長度大於等於4非靜態方法,以"get"開頭且第4個字母為大寫,無參數,返回值類型繼承自Collection或Map或AtomicBoolean,或AtomicInteger或AtomicLong的方法。fastjson通過反序列化利用無參構造創建對象,不通過setter或getter方法進行賦值與輸出操作,因此攻擊者只需要找到滿足條件的類即可實現攻擊。
反序列化漏洞的利用方法包括通過"TemplatesImpl"鏈載入位元組碼,執行RCE等操作。攻擊者通常會利用"TemplatesImpl"的getOutputProperties方法,在此過程中通過newTransformer方法進行攻擊。在設置攻擊代碼時,攻擊者常將位元組碼進行base64加密,以便在序列化過程中進行解密,從而繞過fastjson的安全檢查。
防範fastjson反序列化漏洞的措施包括:避免將不可信的輸入解析為JSON數據,嚴格控制允許解析的JSON數據格式;使用安全的反序列化庫替代fastjson,例如使用Gson或Jackson等庫;對輸入數據進行嚴格的驗證和清理,避免接受可能引起安全問題的數據;加強對代碼的審查,定期進行安全審計和漏洞掃描,及時修復發現的安全漏洞。
fastjson反序列化漏洞是由於其解析機制的特定設計導致的,攻擊者通過特定的輸入數據構造攻擊代碼,利用fastjson的反序列化過程進行攻擊。通過上述防範措施,可以有效降低fastjson反序列化漏洞帶來的風險,確保系統的安全性和穩定性。