多媒体服务器安全审计:90%漏洞源于3个被忽视配置
|
文章配图,仅供参考 去年一月份,我蹲在IDC机房门口啃冷掉的煎饼,手里捏着刚导出的审计报告PDF——不是那种带水印的正式版,是测试环境里直接curl -o 下来的原始扫描结果,第三页有个红色高亮框:“RTMP over HTTP 明文回传 Session ID”,旁边批注写着“低危?建议忽略”。我当场把煎饼卷儿折成四段,塞进工位抽屉第二格,跟三块没拆封的机械键盘轴体并排。我原以为是推流模块的JWT签名校验逻辑漏了时间窗校验,结果翻了七个小时源码,发现连JWT都没用——整个流注册流程走的是硬编码的十六进制密钥字符串,base64之后拼在URL里。后端老张蹲在我旁边盯屏幕,手指一直悬在ESC键上方没按下去,就那么悬着,像在等某个永远不响的中断信号。他后来去倒水,玻璃杯底磕在饮水机按钮上发出“咔哒”一声,我把Chrome DevTools切到了Network tab,清了三次缓存才敢点那个“/api/v2/live/start”按钮。 90%漏洞源于3个被忽视配置——这话不是我拍的。是去年一月十七号凌晨两点零三分,在甲方现场复现完第七次RCE后,PM林薇往我笔记本贴了张便签,上面用红笔写:“你列的那三个点,我们扫了三百七十二个节点,全中。”她没说“漏洞”,只说“全中”。当时我工位双屏左屏壁纸还是去年十一月抓的K8s调度图局部放大,右屏是张纯黑,因为主显卡驱动崩过三次,再不敢设壁纸了。 第一个:FFmpeg参数注入没做白名单,只拦了分号和反引号,漏了$()、$(())、甚至$(< /etc/passwd)这种shell语法糖。测试妹子小陈提的Bug单标题叫《播放器偶尔卡顿》,附图是控制台报错截图,第17行堆栈里赫然写着“ffmpeg: unrecognized option '-vf scale=1280:720,setpts=PTS-STARTPTS; $(id)'”。我就问她:“这玩意儿是谁点的?”她说:“用户自己填的‘自定义画质’字段啊,你们文档里写了支持滤镜表达式。”我盯着那行报错看了十八毫秒,没说话。这个我敢打包票——所有声称“已禁用危险参数”的配置,最后都活在Dockerfile的RUN指令里,而非启动时传入的env变量里。 键盘F12键有点卡,得往下压半毫米才触发,今天上午已经连续按歪三次,误触了F11全屏。旁边同事阿哲忽然抬头问我:“你那个HLS加密KEY轮转脚本,为啥要用date +%s%N取纳秒?”我说:“因为上个月他们用date +%s搞KEY碰撞,同一个秒级时间戳生成了两个不同流的解密密钥。”他说:“哦……那上次线上解密失败,是不是也是这个原因?”我没答。这个我说不准。 第二个:WebRTC信令服务器开了跨域,但没设allowedOrigins,只配了Access-Control-Allow-Origin: ——这本身不致命,要命的是它和SCTP over HTTP共用一个HTTP端口,而SCTP握手阶段根本没走CORS预检,请求头里带着原始Origin就被转发给了底层STUN/TURN代理。PM林薇昨天又来找我,说运营想加个“观众弹幕埋点跳转”,问我能不能在SDP offer里塞一段JS执行片段。我没拦,只回了一句:“你让前端先把WebSocket的subprotocol校验关了,再碰offer。”她点头走了,工牌在脖子上晃了一下,反射出我屏幕上正跑着的Wireshark过滤语句:sip and ip.dst == 10.22.16.88。 外卖汤洒了一滴,在键盘右下角空格键和Alt键之间。我拿纸巾按了一下,没擦干,只是把油渍匀开了。空格键现在按下去有轻微粘滞感。 第三个最荒诞:HLS分片索引m3u8文件默认开启了X-Accel-Redirect响应头,Nginx那边配了alias /var/www/hls/,结果攻击者只要构造一个../..//etc/shadow的URI路径,就能绕过所有鉴权中间件直取系统文件——因为alias规则不校验上级目录跳转,而m3u8解析器在生成#EXT-X-KEY URI时又不做路径规范化。我查到这儿的时候,测试小陈正往我桌上放一杯冰美式,杯子底下压着张A4纸,手写:“林薇说这个不算安全问题,因为‘用户无法主动访问m3u8地址’。”我拿马克笔在纸背面画了个箭头,指向“用户”俩字,打了个叉。旁边空白处还留着我上周写的CSS class命名草稿:“.live__stream--active-state-verified-legacy-v2”。 PR review是我昨天拒的。后端提交了一个patch,号称“修复HLS秘钥泄露”,实际只是把AES-128密钥从响应体移到了HTTP Header里。我comment写:“Header会被CDN缓存,且nginx log_format里默认记录$upstream_http_x_encryption_key。”他回复:“那我改成X-Enc-Key-Obfuscated。”我没回。有些事不必吵清楚,就像我不问为什么DevOps组还在用Ansible 2.9部署FFmpeg服务,也不问为什么测试环境数据库密码明文存在config.toml里还Git commit过三次。 工资条上有个“多媒体专项津贴”条目,金额是两千一百六十元,每月自动到账。我没查过这钱怎么算的,反正发了三年。上个月HR发邮件问要不要签补充协议,绑定两年服务期,我点了“暂不签署”,窗口关掉前顺手清了浏览器历史——包括昨天搜“rtmp nginx secure proxy configuration”的全部记录。 别指望我把这三个点做成自动化检测脚本。第一个得跑真实FFmpeg进程捕获参数解析树,第二个得模拟STUN Binding Request并劫持UDP payload,第三个……算了,第三个我今天下午要去改Nginx配置注释,把“# alias /var/www/hls/ — don't touch”改成“# DO NOT MODIFY. SEE JIRA #MMS-882 FOR CONTEXT (or don't, honestly)”。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Windows多媒体站点搭建:5年运维总结的权限配置速成法
90%服务器漏洞源于这3类配置疏漏
Windows数据科学环境搭建:9年避坑与高效配置实战
小程序安全配置:端口管控与数据防护实战
Linux下H5开发环境与数据库一键配置