在 2018年8月10日,Oracle 独立的发送了一封"安全警告"邮件给所有的 Oracle 用户,这封邮件的标题是:Oracle Security Alert for CVE-2018-3110。这也是今年 Oracle 第一次独立针对一个 CVE 安全风险发布预警。
正常情况下,Oracle 每个季度发布一次安全补丁更新,今年的下一次发布应该在10月16日。所以针对 CVE-2018-3110 的预警就非常值得大家重视。
CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据,CVE因此成为了安全信息共享的“关键字”。在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。
预警的邮件内容如下:
CVE-2018-3110 影响范围是所有当前在支持的数据库版本,但是一部分版本已经在2018年7月的CPU中修订,所以如果此前应用了 7 月的CPU,则本次主要针对Windows 提出修订,还有主要是针对刚刚发布的 Oracle 18.3 版本的修正。
详细说明如下:
修正了Windows上版本11.2.0.4和12.2.0.1中的Oracle数据库漏洞。 CVE-2018-3110的CVSS v3基本分数为9.9,可能会导致Oracle数据库和对底层服务器的shell访问完全受损。
CVE-2018-3110还影响Windows上的12.1.0.2以及Linux和Unix上的Oracle数据库,但是这些版本和平台的补丁包含在2018年7月的CPU中。
如果您在Windows上运行Oracle数据库版本11.2.0.4和12.2.0.1,请应用下面指出的修补程序。 如果您在Windows或Linux或Unix上的任何版本的数据库上运行版本12.1.0.2并且尚未应用2018年7月的CPU,请执行此操作。
由于此漏洞的性质,Oracle强烈建议客户立即采取措施。
除了以上声明的版本,其他过期版本同样会受到影响,只是 Oracle 不再单独列出和提供独立的补丁而已。
本次警告之所以独立发出,重点预警,是因为这个漏洞的危险性非常高,CVSS V3的评分高达 9.9 ,也就几乎是能够『完全控制系统』的安全威胁。
CVSS : Common Vulnerability Scoring System,即“通用漏洞评分系统”,是一个“行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度”。 CVSS的目标是为所有软件安全漏洞提供一个严重程度的评级,这个评分系统把能够完全攻破操作系统层的已知安全漏洞评为基准分数10.0分。换句话说,CVSS基准分数为10.0分的安全漏洞一般指能够完全攻破系统的安全漏洞,典型的结果是攻击者完全控制一个系统,包括操作系统层的管理或者“根”权限。
当然这个漏洞是需要前提条件的,CVE-2018-3110 需要一个数据库用户,具备最基本的CREATE SESSION,也就是说能够创建会话,连接到数据库。然后,基于对于公共 JAVA 对象的访问,获得权限提升,直至全部控制数据库。
这个漏洞的组件是:Java VM。
在 2018年7月发布的CPU中,包含的 CVE-2018-3004 是和 3110 同源的漏洞,是在上一次实现攻击的基础上,有了进一步的简化攻击,从而其风险分值上升到 9.9 。
在 MOS 的以下文档,可以找到适用于各个版本的补丁:
Critical Patch Update (CPU) Program July 2018 Patch Availability Document (PAD) (文档 ID 2394520.1)。
针对 Oracle 18c ,也就是刚刚发布的 18.3 以及 12.2 的补丁列表如下,大家可以通过MOS找到适用于自己环境的补丁:
很多客户可能会关心,如果不升级,到底会有多大的影响?
有些安全漏洞,需要特殊的权限,复杂的攻击注入方式,所以及时存在,重现不容易,威胁也就不大,例如2018年1月发布的安全补丁,其中一个漏洞已经存在了很久,以下连接中重现了 CVE-2017-10282 漏洞,其评分是 9.1 :
安全警报:Oracle 2018一月号安全补丁修复由来已久安全漏洞
而本次警示的 CVE-2018-3110 其评分是 9.9 ,需要的权限更少,更容易重现。
除非您能明确控制 Java VM 组件对象授权,并且能够确保每一个连接数据库的用户的身份和操作控制,否则强烈建议应用补丁,防范风险。
如果你不需要JAVA组件,建议在安装数据库时不要选择,否则就可能面临一系列的麻烦。在 Oracle 11.2.0.1 版本中,就曾经几度发生过注入漏洞。
这些麻烦多数是过度授权,将一些JAVA对象授权给 Public 执行权限,就导致了问题。例如 11.2.0.1 的 CPU 修正 9454036,其补丁脚本 jvm_exp.sql 的最后一段正是对于权限的回收,这个命令回收了 create session 用户也能执行 DBMS_JVM_EXP_PERMS 的问题:
begin
initjvmaux.exec(‘revoke execute on sys.dbms_jvm_exp_perms from PUBLIC’);
exception
when others then
if sqlcode not in (-01927, -06550, -06512) then raise; end if;
end;
/
关于 DBMS_JVM_EXP_PERMS 的执行权限的漏洞是,可以通过类似如下代码给自己授予JAVA的系统执行权限,就可以随时提权成为DBA了:
DECLARE
POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
CURSOR C1 IS SELECT ‘GRANT’,USER(), ‘SYS’,’java.io.FilePermission’,’<<ALL FILES>>‘,’execute’,’ENABLED’ from dual;
BEGIN
OPEN C1;
FETCH C1 BULK COLLECT INTO POL;
CLOSE C1;
DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);
END;
/
此前 CPU 修订的另外一个漏洞则是和 DBMS_JAVA 的执行权限有关,通过这个Package的调用,可以随意执行系统命令,进一步提升权限:
SELECT DBMS_JAVA.RUNJAVA('oracle/aurora/util/Wrapper /bin/sh -c /usr/bin/id>/dev/shm/out') FROM DUAL;
这些方法都是在『DBA的暗世界』里广为流传的,如果您的数据库不能及时应用修正,又缺乏良好的权限控制,那么你的数据就早已经是明朗的天空了。
如果您还运行在低版本的数据库上,建议大家关注安全问题了。
参考文献:
http://www.oracle.com/technetwork/security-advisory/alert-cve-2018-3110-5032149.html
Critical Patch Update (CPU) Program July 2018 Patch Availability Document (PAD) (文档 ID 2394520.1)
活动快报
资源下载
关注公众号:数据和云(OraNews)回复关键字获取
2018DTCC , 数据库大会PPT
2017DTC,2017 DTC 大会 PPT
DBALIFE ,“DBA 的一天”海报
DBA04 ,DBA 手记4 电子书
122ARCH ,Oracle 12.2体系结构图
2017OOW ,Oracle OpenWorld 资料
PRELECTION ,大讲堂讲师课程资料
近期文章