Files
netdisk-fast-download/parser/doc/security/SECURITY_URGENT_FIX.md
2025-11-29 03:41:51 +08:00

6.2 KiB
Raw Blame History

🚨 紧急安全修复通知

⚠️ 严重漏洞已修复 - 请立即部署

漏洞编号: RCE-2025-001
发现日期: 2025-11-28
修复状态: 已完成
危险等级: 🔴🔴🔴 极高(远程代码执行)


🔥 漏洞影响

如果您的服务器正在运行未修复的版本,攻击者可以:

  • 执行任意系统命令
  • 读取服务器上的所有文件(包括数据库、配置文件、密钥)
  • 删除或修改文件
  • 窃取环境变量和系统信息
  • 攻击内网其他服务器
  • 完全控制服务器

这是一个可被远程利用的代码执行漏洞!


🎯 快速修复步骤

1. 立即停止服务(如果正在生产环境)

./bin/stop.sh

2. 拉取最新代码

git pull
# 或者手动应用补丁

3. 重新编译

mvn clean install

4. 验证修复(重要!)

cd parser
mvn test -Dtest=SecurityTest

确认所有测试显示"安全"而不是"危险"

5. 重启服务

./bin/run.sh

6. 监控日志

检查是否有安全拦截日志:

tail -f logs/*/run.log | grep "安全拦截"

📋 修复内容摘要

新增的安全防护

  1. ClassFilter - 阻止JavaScript访问危险Java类
  2. Java对象禁用 - 移除 Java.type() 等全局对象
  3. SSRF防护 - 阻止访问内网地址和云服务元数据
  4. URL白名单 - HTTP请求仅允许公网地址

修复的文件

  • JsPlaygroundExecutor.java - 使用安全引擎
  • JsParserExecutor.java - 使用安全引擎
  • JsHttpClient.java - 添加SSRF防护
  • SecurityClassFilter.java - 新文件:类过滤器

🧪 验证修复是否生效

测试1: 验证系统命令执行已被阻止

访问演练场,执行以下测试代码:

// ==UserScript==
// @name         安全验证测试
// @type         test
// @match        https://test.com/*
// ==/UserScript==

function parse(shareLinkInfo, http, logger) {
    try {
        var Runtime = Java.type('java.lang.Runtime');
        logger.error('【严重问题】Java.type仍然可用');
        return '失败:未修复';
    } catch (e) {
        logger.info('✅ 安全:' + e.message);
        return '成功:已修复';
    }
}

期望结果:

✅ 安全ReferenceError: "Java" is not defined
成功:已修复

如果看到"失败:未修复",说明修复未生效,请检查编译是否成功!

测试2: 验证SSRF防护

function parse(shareLinkInfo, http, logger) {
    try {
        var response = http.get('http://127.0.0.1:8080/admin');
        logger.error('【严重问题】可以访问内网!');
        return '失败SSRF未修复';
    } catch (e) {
        logger.info('✅ 安全:' + e);
        return '成功SSRF已修复';
    }
}

期望结果:

✅ 安全SecurityException: 🔒 安全拦截: 禁止访问内网地址
成功SSRF已修复

📊 安全评级

修复前

  • 评级: 🔴 F级完全不安全
  • 风险: 服务器可被完全控制
  • 建议: 🚨 立即下线服务

修复后

  • 评级: 🟢 A级安全
  • 风险: 低(已实施多层防护)
  • 建议: 可安全使用

🔍 如何检查您是否受影响

检查版本

查看修改时间:

# 检查关键文件是否包含安全修复
grep -n "SecurityClassFilter" parser/src/main/java/cn/qaiu/parser/customjs/JsPlaygroundExecutor.java

# 如果输出为空,说明未修复
# 如果有输出,说明已修复

检查日志

查看是否有攻击尝试:

# 搜索可疑的系统调用
grep -r "Runtime\|ProcessBuilder\|System\.exec" logs/

# 如果发现大量此类日志,可能已被攻击

🆘 紧急联系

如果发现以下情况,请立即采取行动:

已被攻击的迹象

  1. 服务器上出现陌生文件
  2. 系统负载异常高
  3. 发现陌生进程
  4. 配置文件被修改
  5. 日志中有大量异常请求

应对措施

  1. 立即下线服务

    ./bin/stop.sh
    
  2. 隔离服务器

    • 断开网络连接(如果可能)
    • 保存日志证据
  3. 检查受损范围

    # 检查最近修改的文件
    find / -type f -mtime -1 -ls 2>/dev/null
    
    # 检查可疑进程
    ps aux | grep -E "nc|bash|sh|python|perl"
    
    # 检查网络连接
    netstat -antp | grep ESTABLISHED
    
  4. 备份日志

    tar -czf logs-backup-$(date +%Y%m%d).tar.gz logs/
    
  5. 应用安全补丁并重新部署

  6. 修改所有密码和密钥


📚 详细文档

  • 完整修复说明: parser/SECURITY_FIX_SUMMARY.md
  • 安全测试指南: parser/doc/SECURITY_TESTING_GUIDE.md
  • 快速测试: parser/SECURITY_TEST_README.md

修复确认清单

部署后请确认:

  • 代码已更新到最新版本
  • Maven重新编译成功
  • SecurityTest所有测试通过
  • 演练场测试显示"安全"
  • 日志中有"🔒 安全的JavaScript引擎初始化成功"
  • 尝试访问危险类时出现"安全拦截"日志
  • HTTP请求内网地址被阻止
  • 服务运行正常

🎓 经验教训

问题根源

  1. 过度信任用户输入 - 允许执行任意JavaScript
  2. 缺少沙箱隔离 - Nashorn默认允许访问所有Java类
  3. 没有安全审计 - 上线前未进行安全测试

预防措施

  1. 永远不要信任用户输入
  2. 使用沙箱隔离执行不可信代码
  3. 实施最小权限原则
  4. 定期安全审计
  5. 关注依赖库的安全更新

长期计划

考虑迁移到 GraalVM JavaScript

  • 默认沙箱隔离
  • 更好的安全性
  • 更好的性能
  • 活跃维护

📞 支持

如有问题,请查看:

  • 详细文档: parser/SECURITY_FIX_SUMMARY.md
  • 测试指南: parser/doc/SECURITY_TESTING_GUIDE.md

重要提醒:

  • ⚠️ 这是一个严重的安全漏洞
  • ⚠️ 必须立即修复
  • ⚠️ 修复后必须验证
  • ⚠️ 如已被攻击,请遵循应急响应流程

修复优先级: 🔴🔴🔴 最高 - 立即处理


最后更新: 2025-11-28
状态: 修复完成,等待部署验证