# 漏洞总结:允许跨站攻击的宽松 CORS 策略 (#949) ## 漏洞概述 `on_prepare` 处理器无条件地反射 `Origin` 请求头到 `Access-Control-Allow-Origin` 响应头中。同时,Socket.IO 配置为 `cors_allowed_origins='*'`。这导致任何网站都可以向所有 API 端点发起跨域请求,而无需经过身份验证。 ## 影响范围 攻击者可以利用此漏洞执行以下操作: * 强制服务器下载任意内容(`POST /add`) * 覆写 Cookie(`POST /upload-cookies`) * 删除下载文件(`POST /delete`) * 创建订阅(`POST /subscribe`) ## 修复方案 * 使用环境变量 `CORS_ALLOWED_ORIGINS` 替换 blanket 的 Origin 反射,改为显式的白名单机制。 * 默认情况下拒绝跨域请求。 * 需要跨域访问的用户(如浏览器扩展、外部客户端)可以将 `CORS_ALLOWED_ORIGINS` 设置为受信任来源的逗号分隔列表。 ## POC 代码 ```html fetch('http://localhost:8081/add', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ url: 'https://www.youtube.com/watch?v=Qw4w0wQwQw', quality: 'best', download_type: 'video', format: 'any', codec: 'auto' }) }).then(r => r.text()).then(console.log); ```