关于一个不是的漏洞

图片
在2019年3月末,从事网络安全和威胁防护服务的美国公司Trustwave发布了有关PostgreSQL DBMS中漏洞的消息 ,该消息存在于从PostgreSQL 9.3到版本11.2的所有版本中。 此漏洞已在CVE(常见漏洞和披露)信息安全漏洞数据库中注册,编号为CVE-2019-9193 。 该消息引起了极大的轰动,因为根据CVSS(通用漏洞评分系统)漏洞评级系统,此漏洞在10分制上被评为9.0。


漏洞被分配了以下特征:


  • 机密性影响(对机密性的影响)-信息的完全公开会导致所有系统文件的公开。
  • 完整性影响(对完整性的影响)-完全失去系统保护,结果是整个系统受到损害。
  • 可用性影响-资源的可用性完全不可用。
  • 访问复杂度低。 使用只需要很少的知识或技能。
  • 身份验证-要求攻击者通过命令行或桌面会话或Web界面登录到系统。
  • 获得访问权限-不。
  • 漏洞类型(漏洞类型)-代码执行。

现在让我们弄清楚到底发生了什么。


2013年,在PostgreSQL 9.3中重新添加了一次提交,类似于psql中的\ copy meta命令,该提交使您可以在PostgreSQL表和文件系统中的常规文件之间移动数据。 COPY TO将表的内容复制到文件,COPY FROM-从文件复制到表(将数据添加到表中已有的数据)。 与在客户端上实现的\ copy元命令不同,COPY..TO / FROM命令在服务器端实现。 COPY命令具有可选的PROGRAM参数“ command”,该参数允许服务器执行“ command”并将标准输出传递给PostgreSQL服务器,反之亦然。 正是这个参数引起了有关该漏洞的恐慌和消息,因为根据Trustwave,此命令允许在操作系统用户的上下文中执行任意代码。 但是,这正是开发人员的意图! 这次,PostgreSQL全球发展集团(PGDG) 发布官方帖子 ,以及pgsql通用电子邮件列表中的信函(关于COPY FROM / TO PROGRAM的CVE-2019-9193 )和领先开发人员的评论,例如Magnus Hagander在他的博客上


但是要了解本质,细节很重要。 这是文档中有关此内容的内容:“ 请注意,该命令是通过命令外壳启动的,因此,如果您想从不受信任的来源向该命令传递任何参数,则必须小心删除外壳中具有特殊含义的所有特殊字符,或者筛选它们。 出于安全原因,最好将自己限制为固定的命令行,或者至少不允许用户在其中输入任意内容 。”


此外,该文档还说,仅允许数据库超级用户使用文件或外部命令执行COPY命令,或者仅允许内置角色pg_read_server_files,pg_write_server_files或pg_execute_server_program的内置角色成员(在版本11中出现),因为这允许您读取/写入任何文件并运行任何文件服务器有权访问的程序。 操作系统中运行的其他访问控制机制(例如SELinux)可能会限制PROGRAM中命令的执行。


从结构上讲,数据库超级用户与运行服务器的服务器进程的操作系统用户之间没有安全边界。 PostgreSQL 9.3中添加的COPY ... PROGRAM函数并未更改上述任何内容,而是在已经存在的相同安全范围内添加了新命令。 因此,PostgreSQL服务器不能以操作系统的超级用户(例如root)运行。


COPY..TO / FROM ... PROGRAM功能本身为数据处理,数据后处理,即时数据压缩等提供了无限的可能性。 禁止使用这种有用的工具是错误的。 迈克尔·帕奎尔(Michael Paquier)的博客中给出了COPY..TO / FROM ... PROGRAM构造示例。


从这个故事得出的一个重要结论是,在设计和创建数据库时,不仅要记住功能特征,而且还要记住信息安全并遵循以下规则:


  • 在数据库中创建普通用户时,请勿授予他们超级用户权限,只有代表服务器启动的postgres操作系统用户才能在数据库中充当超级用户。 在这种情况下,特权不会升级。 如果将超级用户权限授予普通数据库用户,则等同于向该用户授予postgres用户在操作系统中所具有的权限。
  • 使用pg_hba.conf的功能来确保没有超级用户可以远程登录。
    如果pg_hba.conf文件中没有前面带有“ host”的行,则以下条目禁止postgres用户使用tcp / ip协议从任何地址连接到任何数据库。

    # TYPE DATABASE USER ADDRESS METHOD host all postgres 0.0.0.0/0 reject 
  • 在PostgresSQL中使用高级信息安全技术,例如CIS PostgreSQL基准测试PostgreSQL安全技术实施指南(STIG)
  • 使用已确认符合信息安全功能要求和对信息安全工具的信任级别的认证产品。

因此,我们发现CVE-2019-9193不是漏洞。 但是你不应该放松。 不要错过有关纠正已识别漏洞的更新和新的次要版本的信息,没有这些信息,任何一个大型项目都无法做到。

Source: https://habr.com/ru/post/zh-CN448750/


All Articles