你是否知道,即使你的Oracle数据库设置了强密码、启用了防火墙,攻击者仍可能在不提供任何认证凭据的情况下,向你的数据库“投毒”?
这不是科幻情节,而是真实存在的高危漏洞——CVE-2012-1675,又称“TNS Listener远程数据投毒漏洞”。
该漏洞自2012年公开以来,至今仍在大量未打补丁或配置不当的生产环境中潜伏。一旦被利用,攻击者可伪造数据库实例注册信息,导致服务中断、数据泄露甚至中间人攻击。本文将带你深入理解其原理,并提供可落地的修复方案。
一、什么是TNS Listener远程数据投毒漏洞?
Oracle数据库通过TNS(Transparent Network Substrate)监听器接收客户端连接请求。正常情况下,数据库实例会向本地监听器注册自身服务信息。然而,CVE-2012-1675暴露了一个致命缺陷:监听器默认允许来自任意IP的远程实例注册请求,且无需身份验证。
这意味着,攻击者只需构造一个恶意的注册包,即可:
- 向监听器注入虚假的数据库服务名;
- 劫持后续客户端的连接请求,实施中间人攻击(Man-in-the-Middle);
- 导致合法服务无法注册,引发拒绝服务(DoS)。
关键点:该漏洞不依赖缓冲区溢出或SQL注入,而是利用了协议设计缺陷,因此传统WAF或IDS难以检测。
二、漏洞影响范围
- 受影响版本:Oracle Database 10.2.0.3 至 11.2.0.3(包括RAC和单机环境)
- 不受影响版本:12c及以上(默认启用安全机制)
- 典型场景:未打补丁的10g/11g生产库,尤其暴露在内网或DMZ区域的监听端口(默认1521)
自查命令:
在数据库服务器执行:lsnrctl services listener | grep REMOTE
若输出中包含REMOTE字样,说明存在远程注册记录,极可能受漏洞影响。
三、官方解决方案:COST机制
Oracle通过Class of Secure Transport (COST) 机制修复此问题。核心思路是:限制监听器只接受来自“安全传输通道”的注册请求。
根据部署架构,分为两种方案:
1. 非RAC环境(单机数据库)
参考文档:My Oracle Support Note 1453883.1
推荐方法:限制注册仅通过TCP协议(需先应用补丁BUG:12880299)
操作步骤:
- 编辑 $ORACLE_HOME/network/admin/listener.ora
- 在监听器定义下方添加:
- SECURE_REGISTER_LISTENER = (TCP)
- (若监听器名为LISTENER_PROD,则写为SECURE_REGISTER_LISTENER_PROD = (TCP))
- 重启监听器:
- lsnrctl stop lsnrctl start
- 强制数据库重新注册:
- ALTER SYSTEM REGISTER;
⚠️ 注意:若未打补丁BUG:12880299,可改用IPC协议(但Data Guard环境不支持)。
2. RAC环境
参考文档:My Oracle Support Note 1340831.1
需在所有节点的Grid用户下修改listener.ora,并使用srvctl管理监听器:
srvctl stop listener# 修改listener.ora后srvctl start listener四、验证修复是否生效
- 再次执行:
- lsnrctl services listener | grep REMOTE
- 应无任何输出。
- 查看监听日志(路径:$ORACLE_BASE/diag/tnslsnr/
/listener/trace/listener.log)
若出现 TNS-01194: The listener command did not arrive in a secure transport,说明非法注册已被拦截,修复成功。
五、纵深防御建议
- 网络层:防火墙限制1521端口仅允许可信IP访问;
- 补丁管理:及时应用Oracle Critical Patch Updates (CPU);
- 监控审计:启用监听器日志,定期检查异常注册行为;
- 最小权限:避免使用EXTPROC_DLLS=ANY等高风险配置。
CVE-2012-1675虽已发布十余年,但在老旧系统中仍是“定时炸弹”。一次简单的配置加固,就能堵住这个无需认证的“后门”。作为DBA或安全工程师,我们不仅要关注新漏洞,更要清理历史遗留风险。
互动提问:
你的生产环境中是否还运行着10g/11g数据库?是否已修复此漏洞?欢迎在评论区分享你的加固经验或遇到的坑!
转发提醒:将本文转给负责数据库运维的同事,一起守护数据安全!
关键词提及:Oracle Database Server, TNS Listener, 远程数据投毒漏洞, CVE-2012-1675, COST, SECURE_REGISTER_LISTENER
