自制中英字幕,原载自:https://www.youtube.com/watch?v=GEbn3nHyKnA
——————————
原作者关于假设与戏剧化表述的解释:
假设:
- 2:51 处的“电子邮件混淆”与“发生bug”的图表。 添加此内容是为了说明错误是由此功能触发的。 他们没有方便的图表来告诉他们错误何时被触发。
- 3:55 提到的“十字路口(工程师面临选择)”很可能没有发生。 只是为了添加戏剧/情节。
- 解释为什么在 script_consume_attr 的结束操作中调用 fhold 是我最好的猜测 7:50
- 最后一个空缓冲区背后的历史和原因从未被解释过。 但我猜测一些现有的模块 A 最初会将数据提供给 Ragel 解析器。 模块 A 仍然存在,并且仍然继续输出这个空的最后一个缓冲区,但是现在 cf-html 在模块 A 和Ragel 解析器之间。 因此,cf-html 会毫无问题地使用模块 A 的数据 + 最后一个空缓冲区,但它的输出将不再包含空缓冲区。 然后 Ragel 解析器再接收此输出。
- Cloudflare 是否修改了编译后的 C 代码未知/从未提及。 Ragel 选择使用 == 而不是 ≥ 进行缓冲区结束检查一定是有原因的,从语义上讲,如果每次迭代都检查缓冲区结束,则 == 更有意义,这应该可以避免缓冲区溢出。
- 从技术上和最严格的意义上讲,这是一个“缓冲区过度读取”,而不是“溢出”或“溢出”,但 Cloudbleed 的维基百科页面说“溢出”,所以我们就这么叫了。
- 这个bug有没有被黑客率先发现并利用是有争议的
勘误:
- 13:13,正确的数字是 0.06%(如图所示),但我说的是 0.6%
- 13:28,该错误自 9 月以来就可能存在(显示内容)
——————————————————
故事内容来源:
Cloudflare博客:
https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/
https://blog.cloudflare.com/quantifying-the-impact-of-cloudbleed/
谷歌project Zero团队issue:
https://bugs.chromium.org/p/project-zero/issues/detail?id=1139
其他:
https://asamborski.github.io/cs558_s17_blog/2017/04/08/cloudbleed.html
https://www.colm.net/open-source/ragel/