首页 -> 安全研究

安全研究

安全漏洞
pam_mysql认证时输入合法性检查的漏洞

发布日期:2000-10-27
更新日期:2000-10-27

受影响系统:

  pam_mysql 0.4
  pam_mysql 0.3
  pam_mysql 0.2
  pam_mysql 0.1
不受影响系统:

pam_mysql 0.4.7
描述:

pam_mysql是一个PAM(可插装的认证模块)模块,它允许使用MySQL数据库作为后端
的系统的管理员设置认证机制。由于没有检查用户输入中的SQL查询元字符,pam_mysq
l存在两个漏洞可导致本地和远程入侵。

在0.4版本之前的pam_mysql中,对文件系统具有本地存取权限的用户可能察看存放在
数据库中的密码或者密码散列值。当用户进行认证时,pam_mysql执行下面这个查询以
获得用户密码(或密码散列值):
select password from users where user = '<user>'
值"<user>"是用户提供的登录名,pam_mysql未检查其中的元字符。结果用户可以输入
类似这样的登录名:
"root' into file /tmp/owned;"

这将使MySQL在执行时将查询结果(数据库中root用户的密码值)写入到一个文件中。
如果该值是密码散列值,攻击者可以尝试对其进行穷举攻击。如果该值是明文,攻击者
可以通过pam_mysql以被侵害用户的身份(即root)正常进行认证。

在pam_mysql 0.4版本中存在类似的漏洞,允许攻击者完全避开认证机制进行未授权登
录。为决定试图认证的用户是否可以成功地认证,pam_mysql模块执行如下查询:
select user from users where user = '<user>' and password = '<pass>'

<user>和<pass>值是用户提供的登录名和密码值。不幸的是,和0.4版本之前的用户登
录名相似,它们未被检查是否包含元字符。只要攻击者知道一个有效的用户名,他就可
能利用这个漏洞在无需密码的情况下进行认证。如果密码被设为:
"' or user = 'bill"
MySQL将按照如下的形式来执行查询:
select user from users where user = '<user>' and password ='' or user ='bill'
只要数据库中存在该用户名,这个查询将返回有效的结果。这样攻击者将以<user>的身
份得到认证。


<* 来源:Secure Realities Advisory SRADV00004:
        http://www.securereality.com.au
*>


建议:

临时解决方案:

NSFOCUS建议您停止使用有问题的版本,并尽快升级到最新版本

厂商补丁:

升级到0.4.7版本:
http://download.sourceforge.net/pam-mysql/pam_mysql-0.4.7.tar.gz


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