CVE:CVE-2004-1189
CNNVD:CNNVD-200412-725
Kerberos是美国麻省理工学院（MIT）开发的一套网络认证协议，它采用客户端/服务器结构，并且客户端和服务器端均可对对方进行身份认证（即双重验证），可防止窃听、防止replay攻击等。
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数组之后的位置。
精心构建提交数据可能以进程权限执行任意指令。
一般管理者需要执行部分密码更改操作才会建立这个受此漏洞影响的状态。
solution:Upgrade mit kerberos_5 to a higher version than 1.3.5,and avoid the version (,1.3.5]