游客发表
Druid是授权阿里巴巴开源的一个数据库连接池组件,很多Java项目都在用它。访问但真正让安全圈记住它的漏洞,不是授权性能多好,而是访问它自带的监控页面——StatViewServlet。这个页面能看SQL执行记录、漏洞Session信息、授权URI访问统计,访问甚至能直接执行一些管理操作。漏洞问题在于,授权不少开发者把它部署到生产环境后,访问完全没做访问控制。漏洞
我见过最离谱的授权一次测试,对方是访问一家做物流系统的公司。他们的漏洞Druid监控页面直接挂在公网根路径下,连端口都没改。打开页面,数据库连接池里跑着十几个活跃连接,每一条SQL都清清楚楚——用户手机号、订单金额、收货地址,全在页面上滚动刷新。那一刻我甚至有点恍惚,这哪是监控页面,分明是数据裸奔现场。
这类漏洞的利用门槛低到令人发指。不需要任何工具,浏览器直接访问/druid/index.html,如果返回200,恭喜你,中奖了。更狠的是,有些版本在未授权状态下还能调用reset-all接口,把连接池里的所有连接全部重置。攻击者只需要发一个GET请求,就能让整个业务系统的数据库连接瞬间断开,服务直接雪崩。
有个细节很多人忽略——Druid监控页面泄露的信息量远不止SQL。页面上有个“Session监控”标签,点开能看到当前Web应用所有活跃Session的ID。攻击者拿到这些ID后,配合会话固定攻击,完全可以冒用管理员身份。我曾在一次授权测试中,通过Druid泄露的Session ID,直接进了一个后台管理界面,整个过程没绕过任何验证码,没爆破任何密码。
为什么这漏洞这么普遍?根本原因是Druid的默认配置太“方便”了。在web.xml里加一个servlet映射,就能开启监控页,但官方文档对安全配置的提示藏在很深的章节里。很多程序员照着教程配完就上线了,压根不知道还有loginUsername和loginPassword这两个参数能设置访问认证。等发现的时候,数据早就被人看光了。
修复方式倒是不复杂。要么在Druid的servlet配置里加上登录认证,要么用Nginx做IP白名单限制。但最稳妥的办法是,生产环境干脆别开监控页面。真要监控数据库状态,用独立的Prometheus+Grafana方案,别把内部工具暴露给未知网络。我见过太多公司,开发环境开了监控没关,测试环境开了没关,最后带着一身配置上了生产——这习惯不改,下次还得栽跟头。
说句难听的,Druid未授权访问这漏洞,压根不考验技术,纯粹考验运维的细心程度。扫描器一挂,全网IP扫一遍,开着这个口的系统一抓一大把。别指望攻击者会心慈手软,他们看到这种页面,第一反应肯定是先拖库,再考虑要不要搞破坏。你唯一能做的,就是别让自己成为那个连基础防护都不做的目标。
友情链接