AWS - Abusing Lambda Extensions

支持 HackTricks

Lambda Extensions

Lambda 扩展通过与各种 监控、可观察性、安全和治理工具 集成来增强功能。这些扩展通过 .zip 压缩包使用 Lambda 层 添加,或包含在 容器镜像部署 中,以两种模式运行:内部外部

  • 内部扩展 与运行时进程合并,使用 特定语言的环境变量包装脚本 操作其启动。此自定义适用于多种运行时,包括 Java Correto 8 和 11、Node.js 10 和 12,以及 .NET Core 3.1

  • 外部扩展 作为单独的进程运行,与 Lambda 函数的生命周期保持操作一致。它们与多种运行时兼容,如 Node.js 10 和 12、Python 3.7 和 3.8、Ruby 2.5 和 2.7、Java Corretto 8 和 11、.NET Core 3.1,以及 自定义运行时

有关 Lambda 扩展如何工作的更多信息,请查看文档

外部扩展用于持久性、窃取请求和修改请求

这是本文提出的技术摘要:https://www.clearvector.com/blog/lambda-spy/

发现 Lambda 运行时环境中的默认 Linux 内核是使用 “process_vm_readv” 和 “process_vm_writev” 系统调用编译的。所有进程都以相同的用户 ID 运行,即使是为外部扩展创建的新进程。这意味着外部扩展可以完全读取和写入 Rapid 的堆内存,这是设计使然。

此外,虽然 Lambda 扩展有能力 订阅调用事件,但 AWS 不会向这些扩展透露原始数据。这确保了 扩展无法访问通过 HTTP 请求传输的敏感信息

Init (Rapid) 进程在 http://127.0.0.1:9001 监控所有 API 请求,而 Lambda 扩展在执行任何运行时代码之前初始化并运行,但在 Rapid 之后。

变量 AWS_LAMBDA_RUNTIME_API 指示 IP 地址和 端口 号,以便 子运行时进程 和其他扩展使用。

通过将 AWS_LAMBDA_RUNTIME_API 环境变量更改为我们可以访问的 port,可以拦截 Lambda 运行时中的所有操作(中间人攻击)。这是可能的,因为扩展与 Rapid Init 具有相同的权限,并且系统内核允许 修改进程内存,从而能够更改端口号。

因为 扩展在任何运行时代码之前运行,修改环境变量将影响运行时进程(例如,Python、Java、Node、Ruby)在启动时的行为。此外,在我们之后加载的扩展,依赖于此变量的扩展,也将通过我们的扩展进行路由。此设置可能使恶意软件完全绕过安全措施或直接在运行时环境中记录扩展。

工具 lambda-spy 被创建用于执行 内存写入窃取 Lambda 请求中的敏感信息,其他 扩展 请求 甚至 修改它们

References

支持 HackTricks

Last updated