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  小类行
   30   31   32   33   34   35   36   37   38   39   40