Hono JWT授权漏洞分析与修复指南

本文详细分析了Hono框架中的JWT授权漏洞CVE-2025-62610,该漏洞由于缺乏默认的受众验证可能导致跨服务访问风险,并提供了完整的技术修复方案和配置示例。

Hono JWT授权漏洞分析

漏洞概述

CVE ID: CVE-2025-62610
严重程度: 高危 (CVSS 8.1)
影响版本: Hono >= 1.1.0, < 4.10.2
修复版本: 4.10.2

技术细节

漏洞描述

Hono的JWT认证中间件默认未验证aud(受众)声明。这导致在使用中间件时未显式进行受众检查的应用程序可能接受针对其他受众的令牌,从而引发潜在的跨服务访问(令牌混淆)风险。

根本原因

  • JWT中间件的verifyOptions仅包含issnbfiatexp验证选项
  • 缺少aud选项支持,不符合RFC 7519标准要求
  • 当存在aud声明时,处理方必须在该声明中标识自己,否则必须拒绝JWT

安全影响

影响类型: 通过令牌混淆导致的身份验证/授权弱点

受影响用户:

  • 跨多个服务共享颁发者/密钥的用户(常见于单一IdP/JWKS场景)
  • 使用aud区分令牌预期接收者的用户

潜在后果:

  • 跨服务访问:Service B的令牌可能被Service A接受
  • 边界侵蚀:ID令牌和访问令牌或单独的API受众可能无意中混合

修复方案

技术修复

Hono通过添加新的verification.aud配置选项来解决此问题,允许进行符合RFC 7519标准的受众验证。

安全配置示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import { Hono } from 'hono'
import { jwt } from 'hono/jwt'

const app = new Hono()

app.use(
  '/api/*',
  jwt({
    secret: 'my-secret',
    verification: {
      // 要求此API仅接受aud = 'service-a'的令牌
      aud: 'service-a',
    },
  })
)

标准要求

根据RFC 7519 §4.1.3:

  • 每个预期处理JWT的主体必须使用aud声明中的值来标识自己
  • 如果主体未在aud声明中标识,当aud存在时必须拒绝JWT

现实世界影响

在具有单一IdP/JWKS并在多个服务间共享密钥的部署中:

  • 为一个受众铸造的令牌可能被另一个受众错误接受
  • 攻击者可以托管支持"使用Google登录"的单独服务
  • 获取受害用户的有效ID令牌(JWT)
  • 如果API不验证aud,攻击者可以使用该令牌以受害者权限访问API

相关参考

CVSS评分详情

基础指标: AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
攻击向量: 网络
攻击复杂度: 低
所需权限: 无
用户交互: 需要
影响范围: 未改变
机密性影响: 高
完整性影响: 高
可用性影响: 无

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计