Samba netlogon远程代码执行漏洞分析 CVE-2015-0240

官方漏洞信息
Samba 3.5.0到4.2.0rc4版本的smbd文件服务程序存在一个远程代码执行漏洞,攻击者可以无需登录执行任意代码。

攻击者可以匿名与samba服务器建立空会话连接,然后调用ServerPasswordSet RPC接口,导致一个未初始化的栈指针被传给TALLOC_FREE()函数,通过发送特别构造的数据,可以控制该指针的内容,当该指针被释放时,攻击者可以以root身份执行任意代码。

Samba 4.1以及更高版本需要在服务器配置文件中设置“server schannel = yes”才能触发此漏洞。

描述

攻击者可以在不进行认证的情况下,发送特定的netlogon数据包,使用root权限执行恶意代码。

影响范围

Samba 3.5.0 到 4.2.0rc4

修复方法

官方补丁:http://www.samba.org/samba/security/

另外, Samba 4.2.0rc5, 4.1.17, 4.0.25 和 3.6.25 已经有安全发行版来纠正这个漏洞.
老版本Samba补丁: http://samba.org/samba/patches/

临时缓解方法
Samba 4.0.0及以上版本, 在smb.conf中的[global]字段中,添加如下配置:

[bash]
rpc_server:netlogon=disabled
[/bash]

此方法对Samba 3.6.x及之前版本无效。

分析

Samba客户端向服务端请求登录并认证通过后,服务端会用客户端、服务器、以及客户端密码 hash 等信息,生成一个会话凭证(credential),并保存到本地文件中。默认情况下该文件的存储路径为/var/lib/samba/private/schannel_store.tdb。生成文件时所用的 hash 索引用到了 Samba 客户端的计算机名,而这个计算机名,是在请求中由客户端提供的。
漏洞出现在 NetrServerPasswordSet请求从本地文件里获取凭证的过程中。调用 NetrServerPasswordSet请求时,服务器会先取出之前存储的凭证,并将之和请求中客户端提供的凭证做校验,在校验成功后才进行设置密码的操作。而该请求无需认证即可操作,攻击者可以构造 NetrServerPasswordSet 请求并填充非法凭证(比如非法的计算机名),导致服务端无法从本地取得合法的凭证进行验证,而表示‘凭证’的指针无法完成初始化,后续TALLOC_FREE(creds) 等代码释放未初始化的指针,触发漏洞。

References

Samba NetLogon未初始化指针漏洞的复现与浅析
Metasploit漏洞扫描脚本
官方漏洞信息

Leave a comment

Your email address will not be published. Required fields are marked *