天天看点

解读2017-08-10发布的几个安全漏洞

postgresql , 安全漏洞 , cve-2017-7546 , cve-2017-7547 , cve-2017-7548

postgresql 社区于08-10发布了新版本,修复了三个安全漏洞。

<a href="https://www.postgresql.org/about/news/1772/">https://www.postgresql.org/about/news/1772/</a>

下面一一进行解读。

注意,libpq接口的客户端,都会自动拒绝空密码的用户登陆,这个行为可能误导用户认为空密码就是不允许登陆的。

而实际上并非如此,其他客户端驱动可能允许空密码登陆,这个漏洞修复了这个问题。在服务端拒绝空密码的用户登陆。

所以你如果不使用空密码,就不会有这个问题。

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=bf6b9e94445610a3d84cf9521032fab993f96fd6">https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=bf6b9e94445610a3d84cf9521032fab993f96fd6</a>

这个漏洞和foreign server有关,通常某个用户u1要使用foreign server需要分为几个步骤。

1、创建foreign server s1,里面包含server的连接信息。

2、赋予foreign server s1的usage权限给某个用户u1。(本漏洞所在。)

3、基于这个foreign server s1创建u1的user mapping,里面包含登陆这个foreign server的信息。

4、现在u1可以基于这个foreign server s1创建外部表。

现在的漏洞是,没有操作第2步,普通用户u1可以查询pg_user_mapping表,得到登陆这个foreign server的信息(例如连接这个外部server的用户和密码)。

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=e568e1eee4650227170cf8c64eedb74bafd7d1f0">https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=e568e1eee4650227170cf8c64eedb74bafd7d1f0</a>

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3eefc51053f250837c3115c12f8119d16881a2d7">https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3eefc51053f250837c3115c12f8119d16881a2d7</a>

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/expected/foreign_data.out;h=927d0189a0c26c5875cbe5af44d71d3819bd34eb;hp=7f2f529393d6682a69702cb32d3975074b97f87d;hb=e568e1eee4650227170cf8c64eedb74bafd7d1f0;hpb=bf6b9e94445610a3d84cf9521032fab993f96fd6">https://git.postgresql.org/gitweb/?p=postgresql.git;a=blobdiff;f=src/test/regress/expected/foreign_data.out;h=927d0189a0c26c5875cbe5af44d71d3819bd34eb;hp=7f2f529393d6682a69702cb32d3975074b97f87d;hb=e568e1eee4650227170cf8c64eedb74bafd7d1f0;hpb=bf6b9e94445610a3d84cf9521032fab993f96fd6</a>

已修复后,例子

所以,如果你继续使用老版本,你要回收某个用户的foreign server权限,请同时删除user mapping。就不会有问题。

漏洞描述:

在没有某个大对象的update权限时,用户依旧可以使用lo_put()函数操作这个大对象。

修复后,需要赋予这个大对象update权限,才可以调用lo_put()操作这个大对象。

<a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=8d9881911f0d30e0783a6bb1363b94a2c817433d">https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=8d9881911f0d30e0783a6bb1363b94a2c817433d</a>

修复后的例子如下

src/test/regress/expected/privileges.out

继续阅读