跳转到: 导航, 搜索

OSSN/1237989

已认证的用户无需提供当前密码即可更新密码

总结

已认证的用户无需提供当前密码即可更改其密码。这允许被盗用的身份验证令牌被用于永久破坏用户帐户。

受影响的服务 / 软件

Horizon, Keystone, Identity, Grizzly

讨论

Horizon 允许用户更改自己的密码,该密码更改使用 Identity API 执行。用户需要提供其当前密码才能成功更改密码。此要求可防止恶意用户窃取用户的身份验证令牌并更改该用户的密码,从而永久破坏其帐户。通过此额外的密码检查,被盗用的身份验证令牌仅在令牌因过期或撤销而失效之前破坏用户帐户。

在使用 Identity v3 API 时,用户无需提供正确的当前密码即可成功更改其密码。如果用户的身份验证令牌被盗用,这会导致用户容易受到永久破坏帐户的影响。Identity v2 API 不易受到此问题的影响,因为它具有一个单独的 API 调用,用于更新用户密码,该密码可以正确验证当前密码。

建议的操作

在 OpenStack Grizzly 版本中,默认情况下允许用户更新其自身条目中的属性。建议您限制用户更新,仅允许管理员用户进行更新。这可以通过在 Keystone 的 policy.json 文件中将“update_user”策略设置为“admin_required”来完成。以下是正确配置的 policy.json 文件的示例片段


"identity:get_user": [["rule:admin_required"]],
"identity:list_users": [["rule:admin_required"]],
"identity:create_user": [["rule:admin_required"]],
"identity:update_user": [["rule:admin_required"]],
"identity:delete_user": [["rule:admin_required"]],

此更改的副作用是限制用户更新其自身的任何属性,而不仅仅是密码。

在 OpenStack Havana 版本中,默认策略是仅允许管理员用户更新用户条目中的属性。此外,如果 Horizon 使用 Identity v3 API,即使 Keystone 配置为允许用户更新其自身条目,Horizon 也不会允许用户更改自己的密码。尽管 Horizon 有此限制,但建议将默认“update_user”策略设置保持不变,因为攻击者可以直接针对 Keystone,而无需使用 Horizon 来启动密码更改。

联系方式 / 参考文献