Page 35 - 《软件学报》2026年第7期
P. 35
2720 软件学报 2026 年第 37 卷第 7 期
By analyzing official documentation for interoperability and relevant methods and tools for interoperability program analysis, a bug
benchmark suite for Python-C/C++ interoperability programs is established. This suite includes benchmark test programs for 15 bug
patterns across nine categories, covering five language features of the memory, type, exception, concurrency, and numerical issues, as well
as interoperability program bugs in the 16 most installed PyPI software packages that involve C/C++ foreign calls. By evaluating the
existing state-of-the-art Python-C/C++ interoperability bug checkers on the bug benchmark suite, a comparative analysis of the reliability,
completeness, and scalability of existing research and tools is conducted, with the current status and limitations of Python-C/C++
interoperability safety analysis analyzed and summarized. By analyzing more than 700 bug warnings, 21 new real-world bugs across three
bug patterns are found in six PyPI repositories.
Key words: software supply chain analysis; cross-language interoperability; bug detection; program analysis; bug benchmark
Python 凭借高效的开发效率、对领域应用的生态支持、编译辅助的安全机制等优势吸引了越来越多的开发
者, 其官方软件包库 PyPI 包含超过 63 万个项目, 日平均安装数超过 6 亿项目次 (2025 年 5 月 PyPI Stats 数据). 保
障 Python 软件包库的安全性对于软件供应链安全至关重要. 研究揭示 PyPI 库存在安全和隐私问题 [1,2] , 已有的检
查方法仅针对 PyPI 库中的 Python 语言程序 [3−5] .
然而, 除了 Python 宿主语言程序外, PyPI 库还允许包含 C/C++外部语言程序, 以及桥接 Python-C/C++的跨语
言互操作程序. 外部语言 C/C++包含大量经过测试和优化的存量代码, 能够避免重复的开发劳动并提供更优的时
空性能. Python-C/C++互操作的软件架构被应用于诸多流行 Python 软件包如深度学习框架 TensorFlow 和
PyTorch、科学计算库 NumPy、图像处理库 Pillow 等. 相对于单语言软件, 跨语言互操作可能引入更多的程序漏
洞且更加难以分析 [6] , 其中 Python-C/C++互操作由于语言特性差异更大而更加易错 [7] , 并且互操作程序中 C/C++
外部调用的安全问题难以被单语言检查工具有效分析 [8,9] . 分析 Python 软件包库中 C/C++外部语言调用的安全性
是对 Python 软件供应链安全的重要补足.
现有的 Python-C/C++互操作程序的安全性分析研究一方面扩展分析 Java-C/C++互操作程序的漏洞模式分类
在 Python-C/C++上的行为, 一方面针对具体的 Python-C/C++互操作程序漏洞设计实现检查工具. Hu 等人 [10] 扩展
研究了 Java-C/C++互操作程序的漏洞模式分类 [8] , 分析了相关漏洞模式在 Python-C/C++互操作程序中的表现形
式. 针对引用计数错误的漏洞检查, Pungi [11] 利用仿射变换与分析来检查内存泄漏、悬空指针等漏洞, RID [12] 基于不
一致路径对检查提升了 Pungi 的精度. PyRefcon [13] 提出基于生命周期建模的检测方法, 结合符号执行引擎对对象
状态进行路径敏感追踪, 以准确检查包括引用泄漏与释放后使用在内的漏洞. Li 等人 [14,15] 先后提出 PolyCruise 和
PolyFuzz, 通过轻量级静态分析结合动态的选择性插桩、信息流分析与灰盒模糊测试, 检查诸如缓冲区溢出、整
数溢出、除零错误等漏洞. Mopsa [16] 构建共享抽象域的联合抽象解释框架以检查类型一致性错误、整数溢出、异
常处理错误等漏洞. PyCType [17] 基于跨语言的类型推断对外部函数的声明与实现进行一致性检查. CPyChecker 基
于 GCC 构建数据流分析插件, 检测 Python/C API 及其使用, 识别引用计数错误、异常处理错误、格式化字符串
不匹配等漏洞.
然而, 这些研究普遍存在漏洞模式归纳不系统、漏洞检查能力评估不全面的问题. 首先, 由于 Java 和 Python
作为宿主语言在内存管理、类型系统、并发控制等语言特性上有较大的差异, 扩展的漏洞模式分类 [10] 和针对特
定漏洞的测试集 [14] 仍有较多缺漏, 不能系统地分类总结 Python-C/C++互操作程序的漏洞模式. 其次, Python 语言
社区活跃且迭代迅速, 特定语言版本的测试用例不能反映漏洞模式的变化, 例如 Python 3.7 在外部函数声明时引
入新的调用约定标志 METH_FASTCALL、Python 3.12 引入引用计数不会改变的永生对象等, 这些变更影响
Python-C/C++互操作程序的行为, 导致现有工具在类型一致性、引用计数等漏洞检查时存在误报、漏报等问题.
最后, 已有研究缺乏针对真实软件供应链的全面评估, 无法多维度地反映现行语言版本下不同先进工具的漏洞检
查能力, 例如 PyRefcon 的实验评估中与 Pungi 和 RID 对比时使用的包大多过于老旧且规模较小, 而与 CPyChecker
对比使用的包则存在 CPyChecker 无法完全编译的问题.
针对上述问题, 本文基于 Python 最新稳定版本 Python 3.13 的互操作官方文档和先进 Python-C/C++互操作程
序分析方法和工具的对比分析, 设计实现涵盖内存、类型、异常、并发和数值这 5 大类语言特性, 包括 9 小类行

