一个 psql 脚本,用于在 Keycloak PostgreSQL 数据库中搜索
CVE-2026-18963 的利用痕迹(通过重置凭据流程进行的未认证账户接管)。
由 KYOS 发布。我们在修补所运营的 Keycloak 部署时编写了该脚本,用于核实在暴露窗口期内是否有人被接管。
CVE-2026-18963 是 keycloak-services 重置凭据流程中的一个缺陷
(keycloak#51833)。
未认证攻击者无需点击邮件验证链接即可完成任意用户的密码重置流程,
然后在该账户上设置新密码。整个过程无需用户交互。
严重级别:严重(Critical),CVSS v3.1 9.1(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N),
依据 Red Hat 和
NVD。根本原因是
认证流程中的状态验证不当,已在
keycloak#51844 中修复。
| 版本流 | 修复版本 |
|---|
| 26.7.x | 26.7.2(发布说明) |
| 26.6.x | 26.6.6 |
| 26.4.x(LTS) | 26.4.15 |
| 26.8 | 26.8.0 |
受支持版本流中低于上述版本的所有版本均存在漏洞。不受支持的版本 (26.5.x、26.3 及更早版本)不会有修复:应视为已暴露,并升级到 已修复的版本流。Red Hat 将旧版 RH-SSO 7 列为不受影响;Red Hat Build of Keycloak 26.4/26.6 已在 26.4.15-1 / 26.6.6-1 中修复。
禁用自助密码重置可移除易受攻击的入口点:在每个 realm 的管理控制台 >
Realm 设置 > 登录 中关闭"忘记密码"。通过管理 API:
PUT /admin/realms/{realm} 并携带 {"resetPasswordAllowed": false}。
这会阻断 login-actions/reset-credentials 端点,但也会阻止合法用户
重置自己的密码,因此请仅将其作为升级前的临时措施。请注意,Red Hat
并未为此 CVE 列出官方认可的缓解方案;修补才是唯一真正的修复方式。
cve-2026-18963-keycloak-hunt.sql 运行四个只读查询:
| 查询 | 作用 |
|---|---|
| Q0 | realm 是否存储登录/管理事件及其 TTL。如果事件记录已关闭或已过期,Q2/Q3 中的空结果不能证明任何问题。 |
| Q1 | 暴露窗口期内设置的所有密码凭据(credential.created_date)。这即是接管行为本身,即使事件日志已关闭也能生效。 |
| Q2 | 重置/凭据登录事件,标记此前 24 小时内没有 SEND_RESET_PASSWORD 的已完成重置(no_email_before = t)。该标记即为 CVE 特征:攻击者从未触发邮件。 |
| Q3 | 管理 API 凭据重置和 execute-actions 操作,用于排除管理员操作的途径。 |
# defaults: realm 'master', window since 2026-06-01
psql -U keycloak -d keycloak -f cve-2026-18963-keycloak-hunt.sql
# explicit realm and window (run once per realm, quote values exactly like this)
psql -U keycloak -d keycloak \
-v realm="'myrealm'" -v since="'2026-05-01'" \
-f cve-2026-18963-keycloak-hunt.sql
将 since 设置为您的易受攻击版本上线之前的时间点。在 Kubernetes 上:
kubectl exec -it my-postgres-pod -- \
psql -U keycloak -d keycloak -v realm="'myrealm'" -v since="'2026-05-01'" \
-f - < cve-2026-18963-keycloak-hunt.sql
Q1 中的行并不自动意味着账户被入侵。请将每一行与已知的合法原因 (自助重置、服务台操作、新注册)进行比对,并将任何无法解释的记录 视为接管候选。
Q2 中 RESET_PASSWORD、UPDATE_CREDENTIAL 或 UPDATE_PASSWORD
带有 no_email_before = t 的行是该 CVE 被利用的最强指示。
请将 ip_address 列与您的访问日志进行关联分析。
先检查 Q0:登录事件会过期(events_expiration),并且可能被完全禁用。
Q1 不会过期,因此是最可靠的检查项。
MIT,参见 LICENSE。按现状提供,不附带任何担保。