Magento是一套开源的电子商务系统,是主要面向企业的应用,可处理电子商务各方面的需求,包括像购物、航运、产品评论等等,较终为建设一个多用途和适用面广的电子商务网站提供帮助。
Magento项目小组目前已经发布补丁,修复Magento上一个高危的安全漏洞。
漏洞信息
这个漏洞是一个存储型XSS,是安全厂商Sucuri于2015年11月10日发现的,可实施攻击的场景为:当用户注册一个新账户时或者当用户更改当前账户的邮件地址时等涉及到邮箱账号提交的场景。
该问题关键在于CMS(内容管理系统)如何过滤在用户侧输入的包含邮件地址信息的数据。据Sucuri的研究发现,Magento并没有有效地对邮件地址中可能存在的恶意字符进行过滤。
这种不安全的数据过滤机制能够让攻击者在输入电子邮箱的同时附加上恶意代码。
漏洞分析
这个问题存在于Magento中的app/design/adminhtml/default/default/template/sales/order/view/info.phtml
正如从上面的代码段中看到的,template会将getcustomeremail方法的返回值(即用户填入的邮箱地址)传递到管理面板上。而继续我们的分析,在以下代码段中也有所发现:
根据上述的代码段编写的规则,Magento可以接受两种不同的邮件格式:
1、一种较为常见,没有双引号,没有“<”符号等等; 2、另外一种,为引用字符串格式,它几乎可以接受任何可打印字符,只要输入数据的周围有两个双引号。
此刻,从理论上,我们尝试使用比如“>”@sucuri.net作为用户账号邮箱,提交一个订单,接着观察当管理员在后台管理面板上查看我们提交的订单时会发生什么情况?
上图的结果证实了我们的猜测,Magento确实存在一个XSS漏洞。
漏洞的易利用性
正如前面的POC结果展示的,如果攻击者接着利用像上述所说的带有恶意代码的邮箱地址的账户下了一个订单,当网站管理员在后台打开这个订单时,那么恶意代码将会执行。而基于攻击的原理,该漏洞其实对于任何攻击者来说都是容易掌握利用的。
比如JS代码能被用于访问cookies,所以攻击者可以通过窃取管理员的cookies,随后用于非法访问站点。当然,也可以实施其他的攻击,攻击的方式也取决于攻击者的技术能力。
WordPress站点此前也面临同样问题
从原理上来看, 该漏洞类似于Sucuri在10月份发现的存在于 Jetpack WordPress plugin的一个XSS漏洞。Jetpack WordPress plugin的XSS漏洞同样也是攻击者可以通过将恶意代码附加到邮箱地址,并通过反馈的形式发送到后台,因此导致在后台执行恶意代码。
受影响版本
目前受影响的版本包括Magento 社区版1.9.2.3及更早版本,Magento 企业版 1.14.2.3及更早版本,当前的2.x版本并未受该问题的影响。
如果还运行着Magento的老版本,网站管理员需尽快升级在线商城。