CVE-2018-16621 Nexus Repository Manager3 EL注入
- Auth:Cryin'
介紹
根據sonatype官方給出的 360010789153-CVE-2018-16621-Nexus-Repository-Manager-Java-Injection-October-17-2018" rel="nofollow,noindex" target="_blank">公告資訊 ,Nexus Repository Manager 3存在一個任意EL表示式注入漏洞,攻擊通過構造特殊請求可可實現遠端任意程式碼執行。
-
關於sonatype Nexus Sonatype Nexus Repository Manager(又名NXRM)是一款maven倉庫管理應用。
-
受影響Richfaces版本:
- All previous Nexus Repository Manager 3 OSS/Pro versions up to and including 3.13.0
補丁分析
Nexus對於CVE-2018-16621的漏洞修復補丁對比:
nexus-public/EscapeHelper.java at f94f870eb4dbee30f82b9290e10a35658d4105f8 · sonatype/nexus-public · GitHub
在3.14.0版本中最,新增了EscapeHelper.stripJavaEl方法對使用者輸入roles引數進行過濾,正則匹配的結果是將‘${’替換為‘{ ’,從而防止EL表示式注入。
其中EscapeHelper.stripJavaEl的實現如下:
/** * Strip java el start token from a string * @since 3.14 */ public String stripJavaEl(final String value) { if (value != null) { return value.replaceAll("\\$+\\{", "{"); } return null; } }
漏洞成因
在 org.sonatype.nexus.security.privilege.PrivilegesExistValidator 和 org.sonatype.nexus.security.role.RolesExistValidator 類中,會將沒有找到的 privilege 或 role 放入錯誤模板中,而在錯誤模板在渲染的時候會提取其中的EL表示式並執行
漏洞復現
拉取一個版本低於3.14.0的Nexus docker映象,這裡隨便找一個shifudao/nexus3:
docker pull shifudao/nexus3
使用如下命令執行:
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
訪問 http://localhost:8081 並使用預設賬號密碼admin:admin123登入Nexus,建立使用者並修改使用者角色引數roles,也可通過建立角色的roles 和 privileges引數觸發如圖:
修復建議
官方已釋出修復版本,升級版本至3.14.0即可,升級幫助: https://support.sonatype.com/hc/en-us/articles/115000350007