|
Swagger UI的授权绿色界面在浏览器里展开时,像一本摊开的漏洞API字典。攻击者不需要密码,授权不需要token,漏洞只需要知道这个路径——/swagger-ui.html或者/v2/api-docs。授权我见过太多开发者在代码里写死这个端点,漏洞然后忘在公网服务器上。授权他们以为“没人会猜到”,漏洞但扫描器每天都在全网爬这些路径,授权命中率比想象中高得多。漏洞 这个漏洞的授权本质是配置失误。Swagger本身是漏洞给开发人员调试用的,它把每个接口的授权参数、返回值、漏洞请求格式都列得清清楚楚。授权一旦暴露到生产环境,等于把系统的攻击面画成地图递给入侵者。有个真实案例:某金融科技公司的测试环境挂在公网,Swagger里显示了一个内部转账接口,参数只有账号和金额,连签名校验都没有。安全团队发现时,已经有人通过这个接口向自己账户转了十几笔小额资金——单笔不超过5000元,刚好绕过银行的风控阈值。 修复它其实不难。生产环境禁用Swagger,或者加一层基础认证,再或者限定内网IP访问。但麻烦在于,很多项目的历史包袱太重。老系统的接口文档早就没人维护,Swagger成了唯一的“活文档”。业务部门天天催着上线新功能,开发人员哪有时间给每个环境做权限隔离?于是Swagger就裸奔在公网上,像没锁门的保险库——门是透明的,里面金条码得整整齐齐。 更隐蔽的问题在于,Swagger泄露的不只是接口列表。有时候它还暴露了内部服务的命名规范、数据库表结构、甚至第三方服务的回调地址。这些信息本身不致命,但组合起来就能拼出一张完整的网络拓扑图。攻击者用这些细节去钓鱼,或者针对内部管理后台做定向爆破,成功率会翻好几倍。我见过最离谱的一次,某物流公司的Swagger里直接挂着运维后台的接口,参数里带着服务器IP和SSH端口——就差把root密码写进去了。 说白了,Swagger未授权漏洞不是技术难题,而是管理问题。它考验的是团队有没有把“安全”当作开发流程的一环,而不是事后补丁。有些公司会定期扫描暴露面,把Swagger列入黑名单;有些公司干脆在网关层统一拦截所有带swagger关键字的请求。但最根本的解法还是改变习惯:写代码的时候默认所有接口都是私密的,需要公开的才显式标注。就像你不会把自家房门钥匙挂在门口垫子下面——哪怕那个小区治安再好。 如果你现在就能访问某个网站的/swagger-ui.html,别急着高兴。先看看那些接口能不能调通,有没有鉴权参数。如果真调通了,赶紧走正规渠道报给厂商。别学那些黑产小子,拿这个漏洞去刷积分换礼品卡——被抓到是要坐牢的。技术本身无罪,但用它来撬锁,性质就变了。 |