多个 Apache 验证模块存在漏洞

/ns/ld/softld/data/20010909024706.htm

涉及程序:
PostgreSQL ,Oracle

描述:
多个 Apache 数据库验证模块漏洞利用分析

详细:
多个使用 SQL 数据库存储验证信息的 Apache 验证模块存在漏洞,远程攻击者利用这些漏洞可能在请求中插入非法 SQL 代码。

当使用 PostgreSQL 模块时,攻击者能执行任意 SQL 语句或导致数据库口令查询返回任意数据,从而可能取得对 WEB 服务器的非法访问权。

当使用 Oracle 模块时,攻击者能非法调用存储进程或导致数据库口令查询返回任意数据。

对于 Mysql 模块时,尚未得出可靠的测试结果。

验证过程中,必须在数据库查询口令散列值,因此要用到 SQL SECLECT 语句。在这些受影响的模块中,使用下面类似的代码:

Query := Sprintf ("SELECT %s FROM %s WHERE %s = '%s'",
Password_Column, User_Table, User_Column,
User);

然后,会比较取回的口令散列值和用户提供的口令以检查该用户是否为合法用户。

但是,用户值要通过网络取回。如果攻击者构造下面的字符串(注意开始的单引号),

‘; SELECT 'wA8aGH92dPQnIDD

这样获得的字符串将含有两个 SQL 语句

SELECT password_column FROM user_table WHERE user_column = '';
SELECT 'wA8aGH92dPQnIDD'

PostgreSQL's libpq client library 会将这两个语句都传给 PostgreSQL 服务器,服务器将会执行两条语句并将第二条的结果返回给客户端。通过这种方式,攻击者能诱骗验证代码,使它相信他所提供的口令有效。用同种攻击手法,使用 INSERT,DELETE 语句能达到其它效果。

Oracle 不允许每个请求中有多个 SQL 语句,但是使用 UNION clause 来附加多余数据是可能的,利用这点能重复上面的攻击过程。此外,攻击者也能非法调用存储进程。

受影响系统:
* AuthPG 1.2b2 by Min S. Kim (also known as mod_auth_pg)
* mod_auth_mysql 1.9 by Vivek Khera
* mod_auth_oracle 0.5.1 by Serg Oskin
* mod_auth_pgsql 0.9.5 by Guiseppe Tanzilli and Matthias Eckermann
* mod_auth_pgsql_sys 0.9.4 (by the same authors, modifications by
Victor Glushchenko)

不受影响系统:
* mod_auth_mysql 2.20 by Zeev Suraski
* mod_auth_ora7 1.0 by Ben Reser
* mod_auth_ora8 1.0 by Ben Reser

解决方案:
1、采用不受影响版本

2、下载安装补丁:
AuthPG 1.3 by Min S. Kim
http://authpg.sourceforge.net/

mod_auth_mysql 1.10 by Vivek Khera
ftp://ftp.kcilink.com/pub/

mod_auth_pgsql 0.9.6 by Guiseppe Tanzilli
http://www.giuseppetanzilli.it/mod_auth_pgsql/dist/