4.16. Web Cache欺骗攻击

    例如,网站 配置了反向代理。对于那些包含用户个人信息的页面,如 http://www.example.com/home.php ,由于每个用户返回的内容有所不同,因此这类页面通常是动态生成,并不会在缓存服务器中进行缓存。通常缓存的主要是可公开访问的静态文件,如css文件、js文件、txt文件、图片等等。此外,很多最佳实践类的文章也建议,对于那些能公开访问的静态文件进行缓存,并且忽略HTTP缓存头。

    4.16.2. 漏洞成因

    当代理服务器设置为缓存静态文件并忽略这类文件的caching header时,访问 时,会发生什么呢?整个响应流程如下:

    • 浏览器请求 http://www.example.com/home.php/no-existent.css ;
    • 服务器返回 的内容(通常来说不会缓存该页面);
    • 响应经过代理服务器;
    • 代理识别该文件有css后缀;
    • 在缓存目录下,代理服务器创建目录 home.php ,将返回的内容作为 non-existent.css 保存。

    4.16.4. 漏洞存在的条件

    漏洞要存在,至少需要满足下面两个条件:

    • web cache功能根据扩展进行保存,并忽略caching header;
    • 当访问如 不存在的页面,会返回 home.php 的内容。
    • 如果缓存组件提供选项,设置为根据content-type进行缓存;
    • 访问 这类不存在页面,不返回 home.php 的内容,而返回404或者302。

    4.16.6. Web Cache欺骗攻击实例

    Paypal在未修复之前,通过该攻击,可以获取的信息包括:用户姓名、账户金额、信用卡的最后4位数、交易数据、emaill地址等信息。受该攻击的部分页面包括: