【问题标题】:Unpickling hazard解酸危险
【发布时间】:2013-03-21 01:33:30
【问题描述】:

在 python3 pickle 模块的文档中它说:

" pickle 模块并非旨在防止错误或恶意构造的数据。永远不要解开从不受信任或未经身份验证的来源收到的数据。”

从不受信任的来源提取数据有什么风险?对不受信任的数据进行分解本身是否危险?或者使用未腌制的物体只是危险吗?那么解开不受信任的数据然后(在对结果对象进行任何操作之前)证明它是否是保存对象是否安全?

【问题讨论】:

    标签: python pickle


    【解决方案1】:

    Unpickle 相当于执行任意代码。攻击者可以创建一个pickle,它将在unpickling期间执行系统命令。

    这是来自a good blog post on the topic的示例:

    这清楚地表明泡菜是不安全的。许多人认为这是因为它可以加载与您预期不同的类,并且可能会欺骗您运行它们的功能。但实际的安全风险要危险得多。 可以利用 Unpickling 在您的机器上执行任意命令!

    【讨论】:

    • @nadiaAlramli 那个帖子还在某个地方吗?博客文章很棒,但链接会直接跳到您的链接页面
    【解决方案2】:

    Pickle 通过查找可调用对象(通常是类,但实际上是任何可调用对象)并使用固定参数调用它们来重新创建对象。这意味着 unpickling 可以运行 any 可调用的 anywhere,并带有 any 参数。即使尚未导入相关模块,pickle 也会很乐意导入它。例如,execute os.system 只需要几十个字符。因此,在你拿回一个对象之前,你就完蛋了。

    【讨论】:

      【解决方案3】:

      pickle 格式使用成熟的虚拟机。如果输入机器的代码由攻击者控制,它可以做的事情远远超出对象序列化(包括执行任意操作系统命令)。

      有关讨论,请参阅Why Python Pickle is Insecure。

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 2018-09-04
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 2021-08-24
        • 2017-11-05
        • 2010-12-10
        相关资源
        最近更新 更多