OpenFaaS 开源 Serverless 框架未授权访问漏洞复现
OpenFaaS 开源 Serverless 框架未授权访问漏洞复现
0x00 漏洞概述
OpenFaaS(Open Functions as a Service)是一个开源的 Serverless 框架,借助 Docker 容器技术,使用者可以在任意硬件或云端环境中把任何进程或容器包装成一个 Serverless 函数来运行。它由 API Gateway(网关)、函数运行时以及配套的命令行工具组成,用户既可以通过命令行工具管理函数,也可以通过网关自带的 Web UI 完成函数的部署、查看与调用。
本篇所分析的问题在于:当 OpenFaaS 的网关服务未配置合理的认证措施并直接暴露在互联网上时,攻击者无需任何凭证即可访问 OpenFaaS 的全部功能,包括查看已部署的函数列表,乃至部署新的函数。该问题属于典型的未授权访问类型漏洞,CVSS 评分为 6.5。一旦网关被未授权访问,攻击者可以进一步部署恶意函数,借助 Serverless 函数的执行能力为后续攻击行为提供落脚点,危害不容忽视。
0x01 影响范围
受影响对象为 OpenFaaS 开源框架部署的 API Gateway 服务,具体来说:
- 部署后未启用认证保护、且网关端口直接对公网开放的 OpenFaaS 实例;
- 官方来源未提供明确的具体受影响版本区间,判断依据应以实际部署配置中网关是否启用认证为准。
从产品架构上看,OpenFaaS 的函数经由网关的 /function/ 与 /async-function/ 两条路由对外提供服务,而管理界面则挂在网关的 Web UI 路径之下。官方文档中说明,网关采用 HTTP Basic 认证作为管理面的保护手段,Pro 版本还提供 OIDC 集成。也就是说,认证能力本身是产品具备的,出现未授权访问的直接原因是部署者在安装时未启用或未正确配置这层认证,致使网关的管理功能完全裸露。判断目标是否受影响,可以在浏览器中访问网关的 /ui/ 路径,若未弹出任何认证对话框而直接呈现函数管理界面,即可判定处于无保护状态。
0x02 漏洞分析
OpenFaaS 的整体交互流程是:用户通过 Web UI 或命令行工具向 API Gateway 提交请求,网关负责函数的路由、调用以及与底层容器编排系统的对接。Web UI 是一个单页应用,页面中承载了函数列表展示、函数详情查看以及新函数部署等管理入口。
正常加固情况下,网关会启用 Basic 认证,未携带有效凭证的请求会被要求提供用户名与密码。但在不少实际部署中,使用者为了图方便跳过了认证组件的配置,或者将网关端口直接映射到了公网边界而未做任何访问控制。此时网关进程对请求不做任何身份甄别,/ui/ 路径返回完整的函数管理界面,管理类 API 同样照单全收。
从该漏洞的验证程序逻辑来看,检测思路非常直接:向目标网关的 /ui/ 路径发起 GET 请求并跟随重定向,若响应状态码为 200,且响应体中同时包含特征字符串 Deploy New Function 与 showFunction(function),即可确认目标暴露了未经认证保护的 OpenFaaS 管理界面。这两个字符串分别对应 UI 页面中的部署函数入口和页面脚本中的函数展示逻辑,只有在管理界面完整返回时才会同时出现,因而可以作为有效的未授权访问判定特征。
需要指出的是,这一问题的根因是「功能默认可用而认证依赖部署者主动启用」的设计取舍,叠加运维侧的疏忽。换言之,它并非某个具体版本代码中的注入或溢出缺陷,而是部署形态直接决定了风险是否成立。推断来看,凡是网关未启用认证且端口可达的实例,无论其函数数量多少、运行时长多久,均处于可被任意访问的状态。
0x03 利用链与请求包
利用过程只有一个关键步骤:直接访问网关的 UI 路径并确认页面特征。整个链条不依赖任何前置漏洞,也不需要构造特殊参数。
第一步,确定目标网关地址。假设目标部署在 192.0.2.10 主机上,网关服务端口为 8080(本地复现时可将目标替换为 127.0.0.1 的对应端口)。
第二步,向 /ui/ 路径发起 GET 请求,验证程序逻辑中要求跟随重定向。完整请求包如下:
GET /ui/ HTTP/1.1
Host: 192.0.2.10:8080对应命令行复现方式:
curl -i -L http://192.0.2.10:8080/ui/第三步,判定结果。若网关处于无保护状态,响应状态码为 200,响应体是 OpenFaaS 门户页面的 HTML 内容,其中会同时出现 Deploy New Function 字样(页面上的函数部署入口)以及 showFunction(function) 字样(页面脚本中用于展示函数详情的函数调用)。两个特征同时命中,即说明管理界面完全可被匿名访问。
在此基础上,攻击者已经可以查看目标实例上已部署的全部函数,并能够通过页面上传或调用管理 API 的方式部署新的函数。部署新函数意味着攻击者可以在目标环境中运行自己构造的代码,获取函数运行时所在容器环境的网络位置与执行能力,为横向移动、内网探测等后续动作创造条件。
补充说明:验证程序仅包含上述检测请求,未内置更进一步的利用步骤,本节对「部署新函数」后果的描述依据的是漏洞说明中给出的影响定性,具体利用方式因部署环境而异,此处不作展开。
0x04 检测与修复建议
检测方面:
1. 排查公网、办公网边界及第三方托管环境中的 OpenFaaS 部署,确认网关相关接口的暴露范围和运行版本;
2. 对疑似目标访问 /ui/ 路径,依据本篇 0x03 节的请求包与页面特征(状态码 200,响应体含 Deploy New Function 与 showFunction(function))判定是否存在未授权访问;
3. 检查网关的访问日志与操作审计记录,关注是否存在来自陌生来源的匿名访问及函数变更操作。
修复方面:
1. 核对厂商公告中的受影响范围,升级至官方修复版本或更高版本,升级前备份配置和数据;
2. 为网关启用认证保护:按官方文档配置 Basic 认证,确保管理面不再接受匿名请求,有条件的环境可评估 Pro 版本提供的 OIDC 集成等更强的身份管理方案;
3. 暂时无法升级的环境,通过防火墙或安全组限制网关端口的访问来源,只允许可信地址段访问,补齐服务端的认证授权校验,并失效现存的相关会话和凭据;
4. 依据验证程序备注中的加固建议,认证口令应包含大小写字母、数字和特殊字符且长度大于 8 位,同时以白名单方式限定可登录 IP;
5. 发现未授权访问痕迹后,及时失效相关会话、复核权限配置,并对已部署函数清单进行核查,确认是否存在被恶意植入的函数。
0x05 参考资料
1. OpenFaaS 官方文档:https://docs.openfaas.com/
2. OpenFaaS 官方文档 Authentication 章节:https://docs.openfaas.com/reference/authentication/

Wayyt 1小时前
最新评论