专栏名称: FreeBuf
国内关注度最高的全球互联网安全新媒体
目录
相关文章推荐
科技日报  ·  我国首条,升级扩建! ·  昨天  
科技日报  ·  我国首条,升级扩建! ·  昨天  
天天IC  ·  PC巨头,研发部门首次裁员! ·  4 天前  
天天IC  ·  PC巨头,研发部门首次裁员! ·  4 天前  
林小奇笔记  ·  市场已经找到切换的方向 ·  5 天前  
林小奇笔记  ·  市场已经找到切换的方向 ·  5 天前  
FreeBuf  ·  CUPS ... ·  1 周前  
沉默王二  ·  某大厂被爆明文存储密码,真离谱! ·  1 周前  
沉默王二  ·  某大厂被爆明文存储密码,真离谱! ·  1 周前  
51好读  ›  专栏  ›  FreeBuf

Apache Avro SDK曝关键漏洞,可在Java中执行任意代码

FreeBuf  · 公众号  · 互联网安全  · 2024-10-08 18:55

正文


Apache Avro Java软件开发工具包(SDK)中披露了一个关键安全漏洞,如果成功利用,可以在易受攻击的实例上执行任意代码。该漏洞编号为CVE-2024-47561,影响1.11.4之前版本的所有软件。Databricks安全团队的Kostya Kortchinsky被发现并报告了这个安全缺陷。


Apache Avro与谷歌的Protocol Buffers(protobuf)类似,是一个为大规模数据处理提供语言中立的数据序列化框架的开源项目,提供紧凑、快速且高效的数据格式。它在大数据处理、分布式系统和云计算中被广泛使用。项目维护者发布公告称,“Apache Avro 1.11.3及之前版本的Java SDK中的模式解析允许恶意行为者执行任意代码,建议用户升级到1.11.4或1.12.0版本,这些版本修复了此问题。”


Avro团队进一步指出,如果应用程序允许用户提供自己的Avro模式进行解析,则该漏洞会影响任何应用程序。


“CVE-2024-47561影响Apache Avro 1.11.3及之前版本,在通过avroAvro模式反序列化接收到的输入时。处理来自威胁行为者的此类输入会导致代码执行。根据我们的威胁情报报告,没有公开的PoC,但这个漏洞存在于通过ReflectData和SpecificData指令处理包时,也可以通过Kafka利用。


缓解措施


1. 更新 Apache Avro SDK


确保您使用的是最新版本的 Apache Avro SDK来解决此漏洞。
xml<dependency><groupId>org.apache.avrogroupId><artifactId>avroartifactId><version>1.10.2version> dependency>


2. 验证输入数据


在反序列化任何数据之前,请根据预定义的模式对其进行验证,或使用白名单方法确保只处理预期的数据格式。
javaimport org.apache.avro.Schema;import org.apache.avro.file.DataFileReader;import org.apache.avro.generic.GenericDatumReader;import org.apache.avro.generic.GenericRecord;import org.apache.avro.io.DatumReader;
import java.io.File;
public class AvroDeserializer {public static void main(String[] args) throws Exception {File file = new File("example.avro");Schema schema = new Schema.Parser().parse(new File("schema.avsc"));
DatumReader datumReader = new GenericDatumReader<>(schema);DataFileReader dataFileReader = new DataFileReader<>(file, datumReader);
for (GenericRecord record : dataFileReader) {// 验证记录是否符合模式if (isValid(record)) {// 处理记录} else {throw new SecurityException("数据格式无效");}}}
private static boolean isValid(GenericRecord record) {// 在此处实现您的验证逻辑return true;}}


3. 使用安全的反序列化库


考虑使用提供额外保护层以防止 RCE 攻击的安全反序列化库。例如,Jackson 库提供了 `@JsonTypeInfo` 和 `@JsonSubTypes` 等功能来控制反序列化。


4. 实施输入清理


在反序列化之前对输入数据进行清理,以删除潜在的恶意内容。这有助于防止执行未经授权的代码。


5. 监控和记录反序列化事件


实施日志记录和监控反序列化事件,以便及时发现任何可疑活动。


6. 使用安全扫描器


定期使用安全扫描器和工具来识别应用程序及其依赖项中的漏洞。

使用 Jackson 进行安全反序列化的示例
javaimport com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
public class SecureDeserializer {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().allowIfBaseType(Object.class).build();objectMapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL);
// 安全地反序列化数据MyObject obj = objectMapper.readValue(jsonString, MyObject.class);}}

通过遵循这些实践,可以降低使用 Apache Avro 的 Java 应用程序中远程代码执行漏洞的风险。

FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复「加群」,申请加入群聊