补丁分析
官网上函数加强了s->s3->rrec.length的长度值的判断。
定位变量为SSL3_RECORD结构的length。
它代表SSL3记录数据的有效长度值,该值可以由外部用户控制。
这里书上对代码的注释有误,我自己重写一遍。
这里可以猜测p数据的rrec.data大小分配与payload变量无关,而是根据实际的长度有关。
漏洞形成过程与原因:
- 用户发送心跳包,OpenSSL调用dtls1_process_heartbeat函数或者tls1_process_hearbeat函数对心跳包进行处理。
- 心跳包处理函数分配最大65554的内存块,读取用户指定payload长度的内存数据到分配区域,由于复制长度payload由用户控制,当它超过心跳包数据的实际长度时候就会造成越界访问。
- 最后返回越界访问的信息给用户,造成信息泄露
总结
本质上还是实际分配空间长度和最后访问长度(用户控制)不同造成的越界读取。
文章评论