尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Dapr 1.13.3 安全与稳定性修复深度解析:Token 泄露、Placement 分发中断与指标回归

Dapr 1.13.3 安全与稳定性修复深度解析:Token 泄露、Placement 分发中断与指标回归 Dapr 1.13.3 安全与稳定性修复深度解析Token 泄露、Placement 分发中断与指标回归【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/daprDapr 1.13.3 是一个以缺陷修复为主的补丁版本集中解决了四个影响生产环境的关键问题App API Token 跨 sidecar 泄露的安全漏洞、Go 构建版本的安全升级CVE-2023-45288、Placement Server 在分发放置表时因单点错误导致全部传播失败的问题以及dapr_http_server_response_countHTTP 指标被无公告移除引发的监控回归。本文基于 v1.13.3 发布说明 展开并结合本仓库源码逐项还原问题成因、修复思路与可验证依据帮助读者理解补丁背后的机制并据此制定升级与回归测试策略。版本概览本次更新共包含四项修复App API token 从调用方泄漏到接收方应用安全漏洞将构建 Dapr 的 Go 版本升级至 1.21.9安全修复Placement Server 分发放置表placement table失败时中断其余实例的传播稳定性修复恢复被移除的dapr_http_server_response_countHTTP 指标可观测性回归修复安全修复一App API Token 从调用方泄漏至接收方问题现象调用方 sidecarcaller sidecar在向目标服务发起egress出站请求时错误地附加了本地应用的 API Token从而把用于保护本地应用的 Token 暴露给了对端 sidecar。影响范围由于 Token 被附带在 egress 请求中接收方应用可以拿到调用方应用的 API Token。如果调用方应用监听在0.0.0.0或任意可达的 IP 地址上接收方即可利用该 Token 绕过认证直接对发起方应用发起未授权调用形成典型的横向越权风险。根因与修复发布说明指出该变更由一个 Pull Request 意外引入。修复方式为撤销该误加行为并补充集成测试以防止回归。从本仓库源码可以还原该 Token 机制的正确工作方式帮助理解“意外引入”的改动点Token 来源与命名APP_API_TOKEN环境变量在 pkg/security/consts/consts.go 中被定义为AppAPITokenEnvVar同时定义了请求头dapr-api-tokenAPITokenHeader。应用 Token 通过 security.GetAppToken() 读取而 sidecar 自身的 API TokenDAPR_API_TOKEN则由GetAPIToken()读取两者是相互独立的不同凭证。Token 的正确用途本地应用 Token 只应出现在调用方 sidecar 与被调用的本地应用之间的请求上。在 pkg/channel/http/http_channel.go 中sidecar 向应用转发 HTTP 请求时会判断appHeaderToken由ChannelConfiguration.AppAPIToken注入见 同文件非空再设置dapr-api-token请求头——这一步是合法的“入站”保护。Token 的校验方式在 gRPC 侧pkg/api/grpc/auth.go 的checkAPITokenInContext从请求元数据中读取 token 并与期望值比对校验失败返回401 Unauthorized校验成功后还会将该 header 从元数据中删除避免向下游继续传递。问题在于调用方 sidecar 在构造去往另一个 sidecar/应用的 egress 请求时错误地把自己的appHeaderToken塞进了请求头。修复后该 Token 只会按设计出现在调用方 sidecar → 本地应用这一段链路上任何外部服务都不应看到它。升级与验证建议升级到 1.13.3 后建议在测试环境中模拟“服务 A 调用服务 B”的调用链抓取 B 收到的请求头确认其中不包含A 的APP_API_TOKEN值。由于修复附带集成测试可在 CI 中回归验证跨服务调用场景下 Token 不泄漏。安全修复二Go 构建版本升级至 1.21.9问题现象Dapr 此前使用 Go 1.21.8 或更早版本构建这些版本受 CVE-2023-45288 影响该漏洞涉及 HTTP/2 流处理攻击者可借此导致未受控的资源消耗。修复方案将构建 Dapr 所用的 Go 版本升级至 1.21.9。该漏洞由上游 Go 团队修复Dapr 通过跟进 Go 工具链版本予以规避。需要说明的是当前仓库的 go.mod 中声明的是go 1.26.6这反映了仓库后续持续升级工具链的现状1.13.3 作为历史补丁版本其修复基线是升级至 1.21.9。对于部署方而言这意味着使用官方发布的 1.13.3 二进制即可获得已修复 CVE-2023-45288 的运行时若自行基于源码构建请确认本地 Go 工具链版本不低于 1.21.9或直接使用与目标发布版本一致的工具链版本。稳定性修复Placement Server 分发放置表中断问题现象Placement Server 负责维护 Actor 的放置表placement table并持续向各 sidecar 实例传播最新表信息。在 1.13.3 之前的版本中当向某一个sidecar 实例分发放置表出错时对其余所有实例的分发会一并中断对应上游 issue #7031。影响范围分发中断会导致部分 sidecar 继续持有旧版本的放置表从而在 Actor 路由上把请求发给错误的 Dapr sidecar表现为 Actor 调用落到非归属实例、状态不一致等诡异问题。根因分析发布说明给出的根因是在关闭shutdown过程中所有向应用发起的 publish 调用都被取消。结合 Placement 的传播流程来看该取消行为波及了正在进行中的表分发操作使分发循环在第一次错误后直接退出而不是跳过失败实例继续处理剩余连接。修复方案修复方式为检查performTableDissemination的返回值对错误进行显式判断与处理确保单个实例的分发失败不会阻断整体传播。从当前仓库源码结构看该机制位于 pkg/placement/internal/loops/disseminator/核心逻辑包括disseminator.go 定义了分发器状态机其中streamsInTargetState记录已进入目标状态的连接数currentOperation标识当前所处阶段如HostOperation_REPORT见 同文件用于判断一轮分发是否完成closeconn.go 处理连接关闭事件确保断连的流不会阻塞当前分发轮次并通过advancePhase在目标状态计数满足条件时推进到下一阶段见 同文件传播超时与合并窗口disseminateTimeout、disseminateCoalesceWindow在 pkg/placement/internal/server/server.go 中作为服务配置项存在。1.13.3 的修复要点正是在分发循环中对performTableDissemination的返回错误做检查错误仅影响当前失败实例后续实例继续分发最终保证放置表能完整扩散到所有存活 sidecar。升级与验证建议升级后可在多副本 Actor 环境中强制断开一个 sidecar 连接观察其余实例是否仍能收到最新放置表。关注 Placement 日志中是否存在“跳过失败实例继续分发”的日志并核对各 sidecar 的放置表版本号保持一致。可观测性回归修复恢复dapr_http_server_response_count指标问题现象此前的某个版本在未发布弃用公告的情况下直接移除了dapr_http_server_response_count这个 HTTP 指标对应上游 issue #7642导致依赖该指标的告警与监控面板静默失效。影响范围依赖该指标的用户无法再观测 HTTP 服务端响应计数可能造成监控盲区与告警漏报。修复方案将该指标加回。在当前仓库的 pkg/diagnostics/http_monitoring.go 中可以看到该指标的实现依然存在底层 OpenCensus 统计量serverResponseCount的名称为http/server/response_count见 同文件通过 Prometheus 导出后的指标名即为dapr_http_server_response_count在 同文件 中每次 HTTP 服务端响应都会以1的测量值记录并携带app_id、http_path、http_method、http_status_code等标签对应的视图View以Count()聚合方式注册见 同文件确保指标可被 Prometheus 抓取。这一修复也给出了一个工程启示对于被用户实际依赖的指标移除前必须遵循弃用流程deprecation notice而不是静默删除。升级与验证建议升级到 1.13.3 后可在 Prometheus 中确认dapr_http_server_response_count重新出现并持续递增。建议将dapr_http_server_response_count纳入发布前的指标黄金信号检查清单防止未来再次出现同类回归。升级路径与回归要点综合来看v1.13.3 的四个修复覆盖了安全、稳定性与可观测性三个维度升级建议与回归验证清单如下维度修复项验证方式安全App API Token 不再随 egress 请求泄漏抓取跨服务调用链路上的请求头确认不含调用方的APP_API_TOKEN安全Go 构建版本 ≥ 1.21.9规避 CVE-2023-45288检查二进制构建信息中的 Go 版本稳定性Placement 分发单点失败不阻断全局模拟单 sidecar 断连核对其余 sidecar 放置表版本一致可观测性dapr_http_server_response_count恢复在 Prometheus 中确认指标存在且持续增长对于自行从源码构建的用户请以官方发布的 1.13.3 标签或更新的稳定版本为准并保证构建环境 Go 工具链不低于对应发布基线同时可将上述验证项固化为集成测试防止 Token 泄漏与指标缺失等回归再次出现。【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表