您的位置:首页 > 其它

Samba漏洞(CVE-2015-0240)poc分析

2015-03-01 20:56 781 查看
written by ling

1.      前言

Samba漏洞(cve-2015-0240)是前几天公布的一个漏洞https://securityblog.redhat.com/2015/02/23/samba-vulnerability-cve-2015-0240/

,今天看见国外有人公布了poc:
https://gist.github.com/worawit/33cc5534cb555a0b710b


,因此对这个漏洞进行了调试分析。
2.      漏洞成因

漏洞成因在于没有对变量进行初始化

NTSTATUS_netr_ServerPasswordSet(pipes_struct *p,
struct netr_ServerPasswordSet *r)
{
NTSTATUSstatus = NT_STATUS_OK;
structsamu *sampass=NULL;
inti;
structnetlogon_creds_CredentialState *creds;

DEBUG(5,("_netr_ServerPasswordSet:%d\n", __LINE__));

become_root();
status= netr_creds_server_step_check(p, p->mem_ctx,
r->in.computer_name,
r->in.credential,
r->out.return_authenticator,
&creds);
unbecome_root();

if(!NT_STATUS_IS_OK(status)) {
DEBUG(2,("_netr_ServerPasswordSet:netlogon_creds_server_step failed. Rejecting auth "
"requestfrom client %s machine account %s\n",
r->in.computer_name,creds->computer_name));
TALLOC_FREE(creds);
returnstatus;
}

在_netr_ServerPasswordSet中没有对creds进行初始化,netr_creds_server_step_check函数在返回失败时,仍然没有对creds进行初始化,之后直接对没有初始化的creds调用TALLOC_FREE触发漏洞。

 

3.      环境搭建

Fedora 14 + samba 3.5.5

Poc运行效果如下:

 


4.      调试分析

Smbd程序属于accept-fork类型服务,每来一个连接,fork一个进程与其交互。因此在gdb附加到smbd进程后,选择跟踪子进程。

经过对照源码,发现ebp-0x20为creds。





 

通过堆栈回朔,可以知道对ebp-0x20的真正赋值来自与函数talloc_zero



分析talloc_zero函数(在libtalloc.so.2.0.1库中)从talloc_zero中可以看出ebp-0x20(即v20)与talloc_zero函数(有2个参数,第一个参数为地址,第二个参数为大小)的第一个参数有关。



PS:调试时,程序进程老收到SIGUSR1信号,之后程序就会跳到信号处理函数执行,老影响到调试,不知道用handle SIGUSR1 ignore能否忽略掉该信号。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: