maloc如何设法获取已在SSL Heartbeat中分配的内存?

时间:2014-04-12 15:47:00

标签: c openssl

最近Heartbleed漏洞是由此特定未经检查的执行造成的:

buffer = OPENSSL_malloc(1 + 2 + payload + padding);

(根据http://java.dzone.com/articles/everything-you-need-know-about-2

但是malloc在任何时候都可以抓住已经在其他地方抛出的内存。即使payloadpadding变量由用户值填充,但在我看来,这些变量只能导致内存不足错误(具有非常大的值),并且< em> not 地址空间的移位,以便在这个缓冲区之外读取服务器的RAM。

2 个答案:

答案 0 :(得分:3)

OpenSSL使用自己的内存分配器(出于速度原因,他们说)。因此,内存永远不会传递回操作系统。相反,它们会汇集未使用的缓冲区并重新使用它们。

如果你调用OPENSSL_malloc,那么你得到的缓冲区几乎可能包含100%的OpenSSL以前使用过的数据。这可能是加密数据,未加密数据甚至私有加密密钥。

答案 1 :(得分:1)

它没有。它抓取一小块内存,然后继续从中复制更大量的数据,读取经过malloc&gt; d块的末尾,进入堆后面发生的任何事情 - 其他malloc&#39 ; d用于其他事物(其他客户端或系统内容)的块(活动和死亡) - 并将原始数据复制到攻击者。