PyPI 存储库中 46% 的 Python 包包含潜在不安全代码

图尔库大学(芬兰)的一组研究人员发布了对 PyPI 存储库中的软件包进行分析的结果,以了解可能导致漏洞的潜在危险结构的使用情况。 在对 197 万个包裹的分析过程中,发现了 749 万个潜在的安全问题。 46% 的包裹至少存在一个这样的问题。 最常见的问题包括与异常处理和使用允许代码替换的功能相关的缺点。

在发现的 749 个问题中,442 个(41%)被标记为轻微问题,227 个(30%)被标记为中度问题,80 个(11%)被标记为危险问题。 有些软件包脱颖而出,包含数千个问题:例如,PyGGI 软件包发现了 2589 个问题,主要与“try- except-pass”结构的使用有关,appengine-sdk 软件包发现了 2356 个问题。 genie.libs.ops、pbcore 和 genie.libs.parser 包中也存在大量问题。

应该指出的是,结果是基于自动静态分析获得的,没有考虑某些结构的应用背景。 用于扫描代码的bandit工具包的开发者表示,由于误报数量相当高,如果不对每个问题进行额外的人工审核,扫描结果不能直接视为漏洞。

例如,分析器认为使用不可靠的随机数生成器和散列算法(例如MD5)是一个安全问题,而在代码中此类算法可能用于不影响安全的目的。 分析器还认为pickle、yaml.load、subprocess和eval等不安全函数中对外部数据的任何处理都是问题,但这种使用并不一定涉及漏洞,事实上这些函数的使用可以在没有安全威胁的情况下实现。

研究中使用的测试包括:

  • 使用潜在不安全的函数 exec、mktemp、eval、mark_safe 等。
  • 文件访问权限设置不安全。
  • 将网络套接字连接到所有网络接口。
  • 使用代码中严格指定的密码和密钥。
  • 使用预定义的临时目录。
  • 在 catch-all 风格的异常处理程序中使用 pass 和 continue;
  • 启动基于 Flask Web 框架并启用调试模式的 Web 应用程序。
  • 使用不安全的数据反序列化方法。
  • 使用 MD2、MD4、MD5 和 SHA1 哈希函数。
  • 使用不安全的 DES 密码和加密模式。
  • 在某些版本的 Python 中使用不安全的 HTTPSConnection 实现。
  • 在 urlopen 中指定 file:// 方案。
  • 执行加密任务时使用伪随机数生成器。
  • 使用 Telnet 协议。
  • 使用不安全的 XML 解析器。

此外,还可以注意到,在 PyPI 目录中检测到了 8 个恶意软件包。 在删除之前,有问题的软件包被下载了超过 30 万次。 为了隐藏恶意活动并绕过包中简单静态分析器的警告,代码块使用 Base64 进行编码,并在使用 eval 调用解码后执行。

Nobelsse、genesisbot、are、employment、noblesse2 和 noblessev2 软件包包含拦截 Chrome 和 Edge 浏览器中存储的信用卡号码和密码的代码,以及从 Discord 应用程序转移帐户令牌并发送系统数据,包括屏幕内容的屏幕截图。 pytagora 和 pytagora2 软件包包含加载和执行第三方可执行代码的功能。

来源: opennet.ru

添加评论