# Lua过滤器任意代码执行漏洞
## 概述
Skipper 是一个用于服务编排的 HTTP 路由器和反向代理。在版本 0.23.0 之前,默认配置 `-lua-sources=inline,file` 允许内联 Lua 脚本执行,导致存在安全风险。
## 影响版本
Skipper 版本早于 0.23.0。
## 细节
默认配置 `-lua-sources=inline,file` 启用了 `inline` 模式,允许通过 Kubernetes Ingress 等途径创建 Lua 过滤器。若不受信任的用户可创建此类过滤器,可利用该功能执行任意 Lua 脚本,读取 Skipper 进程可访问的文件系统内容。
## 影响
攻击者若可创建 Lua 过滤器并访问 Skipper 日志,可读取 Skipper 进程权限范围内的文件,包括敏感信息和 secrets,导致信息泄露。该问题已在 0.23.0 版本中修复。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Release v0.23.0 · zalando/skipper · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中,我们可以提取到的关于漏洞的关键信息如下:
- **漏洞描述:**
- **影响版本:** < v0.23
- **漏洞类型:** 安全性,与disable lua scripting默认开启有关。攻击者可以利用默认安装的skipper读取任意文件。
- **详细说明:** 存在弱点,允许默认的skipper安装被滥用使得skipper进程可以读取任意文件。其可被利用程度取决于定制安装和环境,特别是是否能被不可信用户利用。
- **相关报告:** GHSA-cc8m-98fm-rc9g 提供了漏洞的详细报告。
- **漏洞修复措施:**
- **修复版本:** v0.23.0
- **修复措施:** 默认禁用Lua脚本功能。
- **配置指南:** 自2022年起提供详细的Lua配置指南,让操作员在不太受信任的环境中也能选择如何使用Lua,例如只允许某些操作员在skipper可以访问的文件中引用lua源码并运行提供的脚本。
- **报告贡献者:** b0b0haha 和 moyushui 两位用户提供了关于如何利用此漏洞的详细报告。
- **解决方式:**
- 作为库用户: 可通过配置选项 Enlightenment:true 启用旧默认值。
- 作为二进制或容器用户: 可通过命令行选项 --enable-lua 启用旧默认值。
- ** Workaround for <v0.23:**
- 对于库用户,可通过配置 LuaSources 为 "file"。
- 对于二进制或容器用户,可通过 --lua-sources=file 选项。
Markdown格式的内容如下:
```markdown
## 关键漏洞信息
### 漏洞描述
- **影响版本:** < v0.23
- **漏洞类型:** 安全性,与disable lua scripting默认开启有关。
- **详细说明:** 存在弱点,攻击者可能利用默认安装的skipper读取任意文件。
- **相关报告:** [GHSA-cc8m-98fm-rc9g](https://github.com/b0b0haha)
### 修复措施
- **修复版本:** v0.23.0
- **修复内容:** 默认禁用Lua脚本功能。
### 配置指南
自2022年起提供详细的Lua配置指南,让操作员在不太受信任的环境中也能选择如何使用Lua。
### 报告贡献者
- b0b0haha
- moyushui
### 解决方式
- **库用户:**
```yaml
skipper.options {
EnableLua:true,
}
```
- **二进制或容器用户:**
```bash
skipper --enable-lua
```
```
标题: skipper arbitrary code execution through lua filters · Advisory · zalando/skipper · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
# 漏洞关键信息
## 概述
- **漏洞标题**: skipper arbitrary code execution through lua filters
- **CVE ID**: CVE-2026-23742
- **发布日期**: 3天前
- **严重程度**: High (CVSS v3 base score: 8.8/10)
## 影响
- **受影响版本**: <v0.23
- **修补版本**: v0.23
- **影响描述**: 通过lua filters实现任意代码执行。默认配置中,如果未经验证的用户可以创建Lua过滤器,可能会引起问题,特别是通过Kubernetes Ingress资源。配置`-lua-sources=inline`允许这些用户读取skipper进程的文件系统,如果用户能访问日志,他们可以读取skipper密钥。
## 例子
```lua
function request(ctx, params)
local file = io.open('/var/run/secrets/kubernetes.io/serviceaccount/token', 'r')
if file then
local token = file:read('*all')
file:close()
error('[EXFIL] ' .. token) -- 通过错误日志进行数据泄露
end
end
```
## 修复
- v0.23.0版本默认禁用了Lua。
## 权宜之计
- 通过`-lua-sources=inline`配置来减少对Lua过滤器的支持,该配置仅在攻击者在目标系统上创建Lua脚本文件时才会被利用。
## 弱点
- CWE-94: 缺乏对动态代码生成和评估的控制
- CWE-250: 允许未经授权的控制流程影响
- CWE-522: 不适当的构造控制流管理
标题: security: disable lua scripting by default (#3830) · zalando/skipper@0b52894 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
- **漏洞描述**:
- 在默认的 Skipper 安装中存在一个弱点,允许读取任意文件作为 Skipper 进程的一部分。
- 这取决于特定的安装和环境,是否能被非受信任的人利用。
- **修复措施**:
- 从 2022 年开始,提供详细的 Lua 配置指南,让操作员可以选择如何在受信任程度较低的环境中使用 Lua。
- 提供 `-lua-sources-file` 选项,只有能够提供 Skipper 进程可访问文件的操作员才能引用 Lua 脚本并执行提供的脚本。
- **影响版本**:
- 默认情况下,漏洞存在于 Skipper 版本 `< v0.23` 中。
- **变更点**:
- 添加了 `EnableLua`、`LuaModules` 和 `LuaSources` 配置项,控制 Lua 脚本的启用、模块和来源。
- 在 `skipper.go` 中增加了对 `EnableLua` 配置项的检查,若未启用则不加载 Lua 脚本过滤器。
暂无评论