富因特网应用程序(Rich Internet Applications, RIA)应该遵循Adobe的 crossdomian.xml 策略来控制跨域访问数据和使用服务,例如Oracle Java,Siverlight和Adobe Flash。因此,一个域名授予另一个不同域名远程访问自己的服务的能力。但是,这些策略文件中描述的访问控制被糟糕配置。糟糕的策略配置会导致跨站点伪造请求攻击(CSRF),也可能允许第三方机构访问只属于用户的敏感信息。
一个跨域策略文件规定了一个web客户端如Java,Adobe Flash,Adobe Reader等访问不同域名站点数据的权限文件。对于Silverlight来说,微软采取接纳一部分crossdomain.xml配置,也额外创建了自己的跨域策略文件:clientaccesspolicy.xml文件。
当一个web客户端发现一个资源需要从另一个站点请求获得,他先查看目标站点的策略文件来决定是否进行跨域请求,包括http头和允许的基于socket的连接。
主策略文件位于域名的根目录下。一个客户端可能被指示读取一个不同的策略文件,但他总会先检查主策略文件来确保主策略文件允许读取请求的我策略文件。
许多应用程序支持 crossdomian.xml 文件。但是在Silverlight的例子中,他只接受被配置为允许任何域名站点访问的 crossdomain.xml 。为了更加精细控制Silverlight,必须使用 clientaccesspolicy.xml 文件。
策略文件可以授予如下几种控制权限:
一个过度(滥用)的权限控制策略文件例子:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
测试应用策略文件弱点:
为了测试RIA策略文件弱点,测试需要从应用程序根目录获得 crossdomain.xml 和 clientaccesspolicy.xml 策略文件,以及从每一个能够发现的目录。
举例说明,如果一个应用的URL是 http://www.owasp.org ,测试应该尝试下载 http://www.owasp.org/crossdomain.xml 和 http://www.owasp.org/clientaccesspolicy.xml 。
在获取所有的策略文件之后,每个权限都应该检查是否遵循最低权限原则。请求应该从域名、端口或协议来做限制,过度的权限策略应该避免。存在“*”的策略应该被特别仔细检查。
例子:
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
期望结果:
白皮书