最近的 Heartbleed 漏洞是由这种特殊的未经检查的执行引起的:
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
(根据 http://java.dzone.com/articles/everything-you-need-know-about-2 )
但是 malloc 怎么可能随时获取已经分配到其他地方的内存。尽管 payload
和 padding
变量由用户值填充,但在我看来,这些变量只会导致内存不足错误(非常大值),并且不是为了读取这个缓冲区之外的服务器 RAM 而改变地址空间。
最佳答案
OpenSSL 使用自己的内存分配器(他们说是出于速度原因)。因此,内存永远不会传回给操作系统。相反,他们汇集未使用的缓冲区并重新使用它们。
如果您调用 OPENSSL_malloc,您获得的缓冲区包含 OpenSSL 之前使用的数据的可能性几乎是 100%。这可能是加密数据、未加密数据甚至是私有(private)加密 key 。
关于c - maloc 是如何设法获取已在 SSL Heartbeat 中分配的内存的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032594/