深入解析 AWS Lambda:权限管理与提权技巧全揭秘
1341025112991831 WEB安全 180浏览 · 2025-03-07 16:59



深入解析 AWS Lambda:权限管理与提权技巧全揭秘



主要是从逻辑层面来理解为什么可以权限提升,细节可能有所不足,因为真实环境可能千奇百怪,但是本质还是一样的



lambda:CreateFunction & iam:PassRole



iam:PassRole iam:PassRole 是 AWS IAM 权限中的一个重要权限,它允许某个 IAM 用户或角色将特定的 IAM 角色传递(“pass”)给 AWS 服务,以便这些服务可以使用该角色来执行任务或访问资源。



简单来讲就是可以把自己的权限加到自己创造的东西上



这个角色通常有相关权限,可以让服务执行其预定的任务(如访问 S3 存储、写入 CloudWatch 日志、访问其他 AWS 资源等)。



具有 iam:PassRole 权限的用户可以将一个角色传递给其他 AWS 服务,但用户自己并不会直接拥有该角色的权限。







iam:PassRole 权限仅仅是传递角色,而不是授予角色的权限



CreateFunction 就是可以创建匿名函数,这里默认有执行权限,因为正常逻辑来讲能够创建就是能够执行的



原理



我们可以思考一下漏洞该如何利用,其实原理非常简单,我们有 PassRole 权限,我们给匿名函数赋予管理员的权限,然后通过控制匿名函数,比如获取当前函数的 env,就可以得到高权限的 key 了



利用



我们来尝试一波,首先第一个需要解决的问题就是匿名函数的形式



反弹 shell? https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc#iam-passrole-lambda-createfunction-lambda-invokefunction-or-lambda-invokefunctionurl 中有演示



我们可以先自己在本地尝试一下



运行后



能够连上,但是秒断开了



然后又去网上找了很多反弹 shell 的 python 代码,都失败了



这里尝试直接读取 env 文件











这里我们先在环境上尝试一下,是否可以



图片加载失败
设置匿名函数的源代码如上,然后触发一波







可以看到是成功了的



我们首先查询当前的 IAM 角色







这里我就使用 Test 角色作为演示







--zip-file fileb://rev.zip:



这个参数指定了 Lambda 函数的代码包,即将要上传的压缩文件。fileb://rev.zip 表示使用本地的 rev.zip 文件,该文件需要是一个包含 Python 代码及其所有依赖的压缩包,AWS Lambda 会解压并执行其中的内容。







--role 这个参数也是我们的关键,指定了 Lambda 函数的执行角色(IAM Role)



我们查看创建成功没有



图片加载失败








图片加载失败
可以看见是成功的传上去了



然后我们执行这个匿名函数



之后可能会报错,只需要修改文件名为 rev.py



主要和--handler rev.lambda_handler 参数有关



--handler rev.lambda_handler 这个参数用于指定 Lambda 函数的入口点,它告诉 AWS Lambda 从哪里开始执行代码。



rev: 这是 Python 脚本文件的名称(不带 .py 扩展名)。在你的例子中,它指向一个名为 rev.py 的 Python 文件。



lambda_handler: 这是在 rev.py 文件中定义的函数名称。AWS Lambda 会查找这个函数,并且在触发 Lambda 函数时调用它作为程序的入口。



执行函数



图片加载失败








得到了数据成功



lambda:AddPermission



lambda:AddPermission 是 AWS Lambda 的 API 操作,用于向 Lambda 函数添加权限,允许其他 AWS 服务或用户调用该函数。通过 AddPermission,可以控制哪些实体(如 IAM 用户、IAM 角色或 AWS 服务)能够执行 Lambda 函数的某些操作。



原理



其实原理还是很简单的,就是用户可以随意给某 IAM 角色赋予 lambda 函数的任意权限,比如 a 用户只有列出用户的权限,但是我们可以通过 lambda 函数给他其他的权限



而且可以更改 lambda 函数的代码,把原本正常的更能改为有漏洞的代码



分析



查看函数



以 aaa 为例子



首先我们给当前角色赋予我们的权限



--action 我这里使用* 代表的是所有的权限



然后准备我们的文件







然后压缩



之后我们更新函数



然后执行这个函数



图片加载失败
之后收到请求



lambda:UpdateFunctionConfiguration



lambda:UpdateFunctionConfiguration 是 AWS IAM(Identity and Access Management)中的一个权限,它允许用户或角色修改现有 AWS Lambda 函数的配置设置。具体来说,这个权限允许用户对 Lambda 函数的以下内容进行更改



这里说两个重要的



环境变量(Environment Variables):



用户可以设置、修改或删除 Lambda 函数的环境变量。环境变量可以包含各种配置信息,比如 API 密钥、数据库连接信息等,甚至可以用于注入恶意代码(例如通过 Python 的 PYTHONWARNINGS 或 Bash 的 BROWSER 环境变量进行命令注入)。



角色(Role):



用户可以为 Lambda 函数分配 IAM 角色,授予它执行特定操作所需的权限。若用户拥有足够权限,还可以将具有更高权限的角色赋予 Lambda 函数,进而通过 Lambda 获得更高的访问权限。这是权限提升的一种常见方式。



参考 https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc#lambda-addpermission



使用此权限,可以添加将导致 Lambda 执行任意代码的环境变量。例如,在 python 中,可以滥用环境变量 PYTHONWARNING 和 BROWSER 来使 python 进程执行任意命令:



也就是执行函数的时候会导入环节变量,然后执行命令



参考www.ms08067.com



0 条评论
某人
表情
可输入 255

没有评论