Cosign CGI Check Cookie命令远程绕过认证漏洞
发布日期:2007-04-10
更新日期:2007-04-12
受影响系统:University of Michigan cosign 2.9.4a
University of Michigan cosign 2.0.1
不受影响系统:University of Michigan cosign 2.9.4b
University of Michigan cosign 2.0.2a
描述:
BUGTRAQ ID:
23422
cosign是美国密歇根大学开发的开源Web单次登录认证系统。
cosign处理用户请求中的Cookie时存在输入验证漏洞,远程攻击者可能利用此漏洞执行恶意协议命令。
未经认证的Web用户可以通过在HTTP POST请求中向cosign CGI传输恶意的cookie导致向cosign守护程序中注入任意命令。CGI没有正确地验证组成cookie的字符并将其传输给了守护程序,这样就可以执行攻击者所注入的协议命令。
<*来源:Jon Oberheide (
jon@oberheide.org)
链接:
http://www.umich.edu/~umweb/software/cosign/cosign-vuln-2007-001.txt
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
cosign CGI cookie正常为以下形式:
cosign=X
这里X是由CGI所生成的128个随机字符所组成的base64字符串。
恶意的cookie形式如下:
cosign=X\rLOGIN cosign=X 1.2.3.4 username\rREGISTER cosign=X 1.2.3.4 cosign-servicename=Y
这里X代表攻击者所选择的128个字符的任意base64字符串,\r代表回车(单个ASCII字符0x0D),1.2.3.4是攻击者的IP地址,username是攻击者所要扮演用户身份的用户ID,servicename是攻击者所要访问的cosign保护的服务,Y代表攻击者所选择的第二个128字符的base64字符串。攻击者可以通过检查cosign所保护web服务器设置的cookie来判断服务名称。
为了判断用户是否已认证,CGI会向守护程序传送CHECK cookie命令,这里cookie代表name=value对。由于没有正确的验证组成cookie的字符,这个恶意cookie会导致向守护程序发送以下命令:
CHECK cosign=X\rLOGIN cosign=X 1.2.3.4 username\rREGISTER cosign=X 1.2.3.4 cosign-servicename=Y
嵌入的回车会被处理为命令分隔符,执行以下命令:
CHECK cosign=X
LOGIN cosign=X 1.2.3.4 username
REGISTER cosign=X 1.2.3.4 cosign-servicename=Y
CGI所发送的CHECK命令判断cookie为cosign=X的用户是否已认证;这个命令返回了否定的回答。
攻击者所注入的LOGIN命令错误的断言CGI已成功的将攻击者认证为username,要求守护程序在IP地址1.2.3.4将username关联到cosign=X。
攻击者所注入的REGISTER命令要求守护程序为IP地址1.2.3.4将cosign-servicename=Y关联到cosign=X。
然后攻击者可以在对cosign所保护的servicename服务的任意请求中传送cosign-servicename=Y。运行在cosign所保护服务上的过滤器会用守护程序检查攻击者所提供的cookie,守护程序会用攻击者在上述LOGIN命令中所提供的username响应,这样攻击者就可以无须认证便以username的身份访问servicename服务。
建议:
厂商补丁:
University of Michigan
----------------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.umich.edu/~umweb/downloads/cosign-1.9.4b.tar.gz
http://www.umich.edu/~umweb/downloads/cosign-2.0.2a.tar.gz浏览次数:2809
严重程度:0(网友投票)