Skip to main content
版本:2.7.1

Apache ShenYu 安全模型

本文档定义了 Apache ShenYu 的安全模型和信任边界,适用于:

  • 运维人员:了解所需的部署控制措施和安全假设。
  • 安全研究人员:判断某个报告的行为是否在 ShenYu 的预期信任边界内。
  • ASF 安全团队:根据本模型对收到的漏洞报告进行分诊。

违反本模型的行为报告属于有效范围。假设了本模型明确排除的边界的行为报告则不在范围内。


1. 部署边界

Admin 服务(shenyu-admin)设计用于在受信任的内部网络中运行。

Admin 端口(默认:9095不得暴露到公共互联网。Admin 服务默认绑定到 0.0.0.0,是为了方便容器化和内部网络部署;这并不意味着它对外部暴露是安全的。

运维人员负责:

  • 将 Admin 服务放置于防火墙或私有 VPC 之后。
  • 使用网络级访问控制(安全组、入站规则、VPN)限制对 Admin 端口的访问。
  • 在生产环境中,可选择将 Admin 服务器绑定到特定的内部地址。

将 Admin 端口暴露到公共互联网是部署配置错误,而非 ShenYu 的漏洞。

2. 认证边界

所有已认证的 Admin 用户都是完全受信任的。账号管理是安全边界。

Admin 服务使用 Apache Shiro 进行认证。一旦用户通过认证(通过用户名/密码、LDAP 或其他配置的机制),他们就被视为 ShenYu 部署的受信任操作者。

安全边界在于:

  • 账号创建和凭证管理 — 只有授权人员才能创建 Admin 账号。
  • 凭证存储 — ShenYu 存储的密码和密钥(例如在数据库中)必须受到保护。

已认证的 Admin 用户(包括任何拥有有效登录凭据的用户)执行的操作不属于安全漏洞。如果攻击者能够认证,则部署已经被攻破。

3. RBAC 模型

@RequiresPermissions 控制的是 UI 功能的可见性,而非已认证 Admin 用户之间的安全隔离。

ShenYu 使用 Apache Shiro 注解(@RequiresPermissions)实现了基于角色的访问控制(RBAC)系统。该系统的设计目标是:

  • 简化 Admin 界面,仅向每个用户展示与其角色相关的功能。
  • 通过限制哪些用户可以修改特定资源(插件、规则、选择器等),防止意外误配置。

ShenYu 中的 RBAC 不是硬安全边界。它不能防护:

  • 恶意的已认证用户故意提升权限。
  • 用户通过 Admin UI 以外的方式发现或调用未被分配的 API 端点。
  • 同一部署的 Admin 用户之间的跨租户隔离。

所有已认证的 Admin 用户共享同一信任域。 如果需要操作者之间的严格隔离,请部署独立的 ShenYu Admin 实例。

4. WebSocket 同步通道

/websocket 端点是有意不进行认证的,必须通过网络级访问控制来保护。

Admin 服务在 /websocket 暴露一个 WebSocket 端点,供 Gateway(bootstrap)实例接收实时配置更新。该端点被明确排除在 Shiro 认证之外(参见 application.yml 中的 shenyu.shiro.white-list)。

由于 Gateway 必须连接到此端点以同步插件、选择器和规则数据,WebSocket 通道在应用层没有认证机制。此通道的安全性完全取决于:

  • 网络隔离/websocket 端点只能被受信任内部网络中的 Gateway 实例访问。
  • 防火墙规则:阻止外部访问 Admin 端口,同时也就保护了 WebSocket 端点。

任何能够访问 /websocket 端点的人都可以接收 Gateway 的完整配置状态,包括插件规则、上游服务地址和认证密钥。这是有意为之:在受信任网络内,Gateway 是这些数据的合法消费者。

5. 控制面与数据面

Admin(控制面)和 Gateway(数据面)属于不同的信任域。

组件角色信任级别
shenyu-admin控制面 — 管理配置、插件、规则、元数据仅限受信任的内部网络
shenyu-bootstrap数据面 — 处理实时流量路由、限流、认证对流量暴露(面向互联网或 DMZ)

关键含义:

  • Gateway 不会隐式信任 Admin 来做运行时的流量决策。Gateway 会针对入站请求执行自己的认证、限流和路由规则。
  • Admin 被攻破不会直接危及流经 Gateway 的流量,但会允许攻击者修改 Gateway 的配置(添加/删除插件、修改路由规则等)。
  • Gateway 被攻破不会授予对 Admin 或其数据库的访问权限。
  • WebSocket 同步通道(/websocket)是这两个信任域之间的桥梁,必须按照第 4 节所述进行保护。

6. 数据库安全

数据库是受信任的基础设施。数据库被攻破是一个独立的安全事件,不在 ShenYu 的软件威胁模型范围内。

ShenYu 将配置、用户凭证、插件数据和元数据存储在数据库中(开发环境使用 H2,生产环境使用 MySQL/PostgreSQL)。

ShenYu 假设:

  • 数据库部署在安全环境中,具有独立于 ShenYu 的访问控制。
  • ShenYu 使用的数据库凭证受到保护且不对外暴露。
  • 数据库网络端口不暴露给不受信任的网络。

如果攻击者获得对数据库的直接访问权限(例如通过其他应用程序的 SQL 注入、凭证泄露或网络配置错误),他们可以读取或修改所有 ShenYu 状态。这是基础设施层面的安全事件,而非 ShenYu 应用程序逻辑中的漏洞。

7. 范围总结

在范围内(请报告至 security@apache.org):

  • 未经认证的远程代码执行。
  • 允许无需有效凭证即可访问的认证绕过。
  • Gateway(bootstrap)请求处理漏洞,可通过构造的 HTTP 流量利用。
  • 允许绕过 Gateway 强制执行的认证或限流的插件级漏洞。
  • 通过未经认证的 Gateway 请求路径可到达的注入攻击(SQL、命令、模板)。

不在范围内(部署或基础设施问题):

  • 已认证的 Admin 用户执行的操作。
  • 已认证的 Admin 用户对功能的误用(例如,Admin 用户修改了通过 RBAC 他们"不应该"访问的规则)。
  • Admin 端口或 WebSocket 端点暴露给不受信任的网络。
  • 拥有数据库凭证的攻击者直接访问数据库。
  • 与 ShenYu 一起使用的第三方基础设施(LDAP 服务器、数据库、Kubernetes 集群)中的漏洞。

参考资料