设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> 私服架设 >> 千年私服 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
最新StdItems.db资料修改…
Microsoft Office XP远程…
Novell Nsure Audit 1.0…
NEXTWEB (i)Site多个安全…
NEXTWEB (i)Site多个安全…
phpWebSite远程路径泄露…
Microsoft DHCP远程缓冲…
Microsoft Jet DB引擎数…
Microsoft WINS服务远程…
Microsoft HyperTermina…
  MIT Kerberos 5管理库libkadm5srv远程堆溢出漏洞           
MIT Kerberos 5管理库libkadm5srv远程堆溢出漏洞
 

受影响系统:
MIT Kerberos 5 1.3.5
MIT Kerberos 5 1.3.4
MIT Kerberos 5 1.2.9
MIT Kerberos 5 1.2.8
MIT Kerberos 5 1.2.7
描述:
--------------------------------------------------------------------------------
CVE(CAN) ID: CAN-2004-1189

Kerberos是一款广泛使用的使用强壮的加密来验证客户端和服务器端的网络协议。

MIT Kerberos 5管理库在密码历史处理代码中存在一个堆溢出,远程攻击者可以利用这个漏洞以进程权限执行任意指令。

溢出发生在'src/lib/kadm5/srv/svr_principal.c'中的add_to_history()函数中,密码历史存储在一个缓冲区中,即adb->old_keys指向的osa_pw_ent_rec数组,adb->old_key_next是数组的一个索引,数组长度存在adb->old_key_len中,数组动态可调整大小并且没有独立头指针。

策略历史计数存储在pol->pw_hist_num中,但是实际KEYS的最大值存在于adb->old_keys的是pol->pw_hist_num-1,因为当密码更改发生时,"current" key数据也用于历史的对比。

如果adb->old_key_next小于pol->pw_hist_num-1,adb->old_key_next索引值允许指向adb->old_keys数组最后的一个位置。当后续调用add_to_history()增加数组时需要解决越界索引。

在密码更改后如果pol->pw_hist_num递减为adb->old_key_next,就会引起adb->old_key_next索引越界,后续的密码更改将不会调用调整大小代码,add_to_history()函数就会写密码条目到adb->old_keys数组之后的位置。

精心构建提交数据可能以进程权限执行任意指令。

一般管理者需要执行部分密码更改操作才会建立这个受此漏洞影响的状态。

建议:
--------------------------------------------------------------------------------
厂商补丁:

MIT
---
* 后续发行的krb5-1.4 release会包含此漏洞的补丁,krb5-1.4-beta3 release同样包含此问题的修正。

* 后续的krb5-1.3.6 patch release补丁将修正此问题。

* 对src/lib/kadm5/srv/svr_principal.c采用如下补丁,并重新编译库和程序,此补丁针对krb5-1.3.5:

http://web.mit.edu/kerberos/advisories/2004-004-patch_1.3.5.txt

相关PGP签名可从如下地址获得:

http://web.mit.edu/kerberos/advisories/2004-004-patch_1.3.5.txt.asc

相关补丁内容:

Index: svr_principal.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/lib/kadm5/srv/svr_principal.c,v
retrieving revision 1.26.2.1
diff -c -r1.26.2.1 svr_principal.c
*** svr_principal.c 2 Sep 2003 18:58:56 -0000 1.26.2.1
- --- svr_principal.c 20 Dec 2004 19:47:29 -0000
***************
*** 1017,1022 ****
- --- 1017,1025 ----

memset(&adb->old_keys[adb->old_key_len],0,sizeof(osa_pw_hist_ent));
adb->old_key_len++;
+ for (i = adb->old_key_len - 1; i > adb->old_key_next; i--)
+ adb->old_keys[i] = adb->old_keys[i - 1];
+ memset(&adb->old_keys[adb->old_key_next],0,sizeof(osa_pw_hist_ent));
} else if (adb->old_key_len > pol->pw_history_num-1) {
/*
* The policy must have changed! Shrink the array.
***************
*** 1039,1048 ****
histp[i] = adb->old_keys[j];
}
/* Now free the ones we don't keep (the oldest ones) */
! for (i = 0; i < adb->old_key_len - (pol->pw_history_num - 1); i++)
for (j = 0; j < adb->old_keys[KADM_MOD(i)].n_key_data; j++)
krb5_free_key_data_contents(context,
&adb->old_keys[KADM_MOD(i)].key_data[j]);
free((void *)adb->old_keys);
adb->old_keys = histp;
adb->old_key_len = pol->pw_history_num - 1;
- --- 1042,1053 ----
histp[i] = adb->old_keys[j];
}
/* Now free the ones we don't keep (the oldest ones) */
! for (i = 0; i < adb->old_key_len - (pol->pw_history_num-1); i++) {
for (j = 0; j < adb->old_keys[KADM_MOD(i)].n_key_data; j++)
krb5_free_key_data_contents(context,
&adb->old_keys[KADM_MOD(i)].key_data[j]);
+ free(adb->old_keys[KADM_MOD(i)].key_data);
+ }
free((void *)adb->old_keys);
adb->old_keys = histp;
adb->old_key_len = pol->pw_history_num - 1;
***************
*** 1052,1061 ****
- --- 1057,1070 ----
}
}

+ if (adb->old_key_next + 1 > adb->old_key_len)
+ adb->old_key_next = 0;
+
/* free the old pw history entry if it contains data */
histp = &adb->old_keys[adb->old_key_next];
for (i = 0; i < histp->n_key_data; i++)
krb5_free_key_data_contents(context, &histp->key_data[i]);
+ free(histp->key_data);

/* store the new entry */
adb->old_keys[adb->old_key_next] = *pw;

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-1-2 22:28:08
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持