首页 网络安全 正文
  • 本文约2016字,阅读需10分钟
  • 10
  • 0

Open Babel 工具中的漏洞CVE-2025-10999

摘要

栋科技漏洞库关注到在Open Babel的3.1.1版本中发现了一个漏洞,该漏洞现已经被追踪为CVE-2025-10999,漏洞的CVSS3.X评分为 3.3。

Open Babel 是一款开源、跨平台的化学信息学工具,实现不同化学数据格式的转换,同时提供分子结构分析、处理等基础化学计算能力。

一、基本情况

Open Babel 开源化学工具箱主要用于处理和转换不同格式的化学数据,支持超过150种分子文件格式的互转及分子操作、化学计算等功能。

Open Babel 支持超过100种化学文件格式(SMILES、MOL2、PDB、XYZ)互转,通过命令行、Python/Java 等脚本接口或图形界面使用。

Open Babel 工具中的漏洞CVE-2025-10999

Open Babel 广泛用于药物研发、材料科学、化学数据分析场景,帮研究者处理分子结构数据、对接其他化学软件(如 AutoDock Vina)。

栋科技漏洞库关注到在Open Babel的3.1.1版本中发现了一个漏洞,该漏洞现已经被追踪为CVE-2025-10999,漏洞的CVSS3.X评分为 3.3。

二、漏洞分析

CVE-2025-10999漏洞是存在于Open Babel的3.1.1版本中的安全漏洞,由于操作不当导致空指针引用,但漏洞导致的攻击仅限于本地访问。

具体而言,该漏洞受影响的部分是文件/src/formats/cacaoformat.cpp中的CacaoFormat::SetHilderpandt函数。

三、POC概念验证

1、环境

操作系统:Ubuntu 22.04

编译器:clang 13.0.1

Sanitizers:AddressSanitizer (ASan) + UndefinedBehaviorSanitizer (UBSan)

2、构建说明

管理员已设置登录后刷新可查看

3、繁殖

使用精心编制的输入文件运行模糊器:

./fuzz_convert poc

4、观察行为

ASan/UBSan报告程序崩溃:

==1072920==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000030 (pc 0x00000083677a bp 0x7ffc68ded350 sp 0x7ffc68decfe0 T0)
==1072920==The signal is caused by a READ memory access.
==1072920==Hint: address points to the zero page.
    #0 0x83677a in OpenBabel::OBAtom::GetIdx() const /root/openbabel/include/openbabel/atom.h:245:59
    #1 0x83677a in OpenBabel::CacaoFormat::SetHilderpandt(OpenBabel::OBMol&, std::vector<OpenBabel::OBInternalCoord*, std::allocator<OpenBabel::OBInternalCoord*> >&) /root/openbabel/src/formats/cacaoformat.cpp:254:36
    #2 0x837512 in OpenBabel::CacaoInternalFormat::WriteMolecule(OpenBabel::OBBase*, OpenBabel::OBConversion*) /root/openbabel/src/formats/cacaoformat.cpp:343:5
    #3 0xea3d0f in OpenBabel::OBMoleculeFormat::WriteChemObjectImpl(OpenBabel::OBConversion*, OpenBabel::OBFormat*) /root/openbabel/src/obmolecformat.cpp:173:26
    #4 0x5b28d1 in OpenBabel::OBConversion::Convert() /root/openbabel/src/obconversion.cpp:604:40
    #5 0x5b140c in OpenBabel::OBConversion::Convert(std::istream*, std::ostream*) /root/openbabel/src/obconversion.cpp:478:17
    #6 0x5a5c18 in LLVMFuzzerTestOneInput /root/openbabel/test/fuzz/fuzz_convert.cpp:35:14
    #7 0x4d93b3 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/root/openbabel/build/bin/fuzz_convert+0x4d93b3)
...

5、根本原因分析

发生崩溃是因为SetHilderpandt假设其内部坐标列表中的所有OBAtom*指针都是有效的。

在这种情况下,传递了一个空指针或损坏的指针,导致地址0x30处的解引用。

6、POC文件下载

管理员已设置登录后刷新可查看

四、影响范围

Open Babel <= 3.1.1

五、修复建议

Open Babel > 3.1.1

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接