原文:https://labs.detectify.com/2018/09/04/xss-using-quirky-implementations-of-acme-http-01/

摘要


对于有些托管服务提供商来说,他们实现的http-01验证方法会将部分challenge密钥放到响应中去,从而导致大量实现了http-01 ACME-challenge的网站很容易受到XSS的攻击。

半年以前,Frans对不同的Let's Encrypt验证方法进行了研究,并将结果放到了一篇关于如何利用TLS SNI为共享主机上的其他域颁发证书的文章中。

在这篇报告,还考察了其他验证方法,例如http-01。该验证方法的工作原理是,让Let’s Encrypt 的请求位于/.well-known/acme-challenge/KEY1中的文件,并期望获得具有KEY1.KEY2的格式的响应。

由于KEY1同时出现在响应和请求中,所以,一些托管服务提供商使用支持ACME的证书颁发者(Let's Encrypt只是其中之一)创建了一种解决方案,其中第一个密钥KEY1将从URL中取得,然后,使其与响应中使用的固定的KEY2相结合。

发送请求:

/.well-known/acme-challenge/ABC123

响应如下所示:

ABC123.XYZ567

很明显,这里很容易受到XSS攻击,不过,还需要考虑是否采用了相应的缓解措施:

  • Content-type未设置为HTML。
  • Web浏览器对请求进行URL编码,因此,如果返回原始请求,则无法注入特殊字符,因为它们已经进行了URL编码(<例如,最终会以%3c结尾)。
  • 某些Web浏览器中的XSS审核程序可能会捕获返回的值并阻止触发JavaScript。
点击收藏 | 0 关注 | 1
登录 后跟帖