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

标签 c openssl

最近的 Heartbleed 漏洞是由这种特殊的未经检查的执行引起的:

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

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

但是 malloc 怎么可能随时获取已经分配到其他地方的内存。尽管 payloadpadding 变量由用户值填充,但在我看来,这些变量只会导致内存不足错误(非常大值),并且不是为了读取这个缓冲区之外的服务器 RAM 而改变地址空间。

最佳答案

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

如果您调用 OPENSSL_malloc,您获得的缓冲区包含 OpenSSL 之前使用的数据的可能性几乎是 100%。这可能是加密数据、未加密数据甚至是私有(private)加密 key 。

关于c - maloc 是如何设法获取已在 SSL Heartbeat 中分配的内存的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032594/

相关文章:

c - 如何让chdir()在程序结束后停留在指定目录?

c++ - 为什么我的 struct stat 有一个 st_mtim 而不是 st_mtime 字段?

ssh - 从 PKCS12 文件中提取公钥/私钥以便稍后在 SSH-PK-Authentication 中使用

java - 如何在 Java 中调用 OpenSSL 方法?

ruby-on-rails - OpenSSL::SSL::SSLError in UsersController#create (SSL_connect returned=1 errno=0 state=unknown state: unknown protocol)

c - 函数未生成正确的 openssl rsa key

c++ - C/C++ 中的线程,任何标准?

c++ - unsigned关键字会影响sizeof的结果吗?

我可以计算 double 引入的误差吗?

c++ - OpenSSL AES 加密似乎无法正常工作