Serverpod提升存储密码哈希安全性:从脆弱算法升级至Argon2Id

Serverpod提升存储密码哈希安全性·CVE-2024-29886

漏洞详情

:pub/serverpod_auth_server
受影响版本:< 1.2.6
修复版本:1.2.6

描述

Serverpod现在使用OWASP推荐的Argon2Id密码哈希算法来存储电子邮件身份验证模块的密码哈希。从Serverpod 1.2.6开始,所有创建账户或通过服务器进行身份验证的用户都将使用更安全的算法存储密码。开发者无需进行任何更改即可开始使用更安全的算法存储密码。

为什么改变密码存储方式?

旧密码哈希算法存在一个问题,如果数据库被入侵,容易受到彩虹表攻击。强烈建议迁移现有的密码哈希。

迁移现有密码哈希

电子邮件身份验证模块提供了一个辅助方法来迁移数据库中所有现有的旧密码哈希。只需使用会话实例作为参数调用Emails.migrateLegacyPasswordHashes(...)即可迁移密码哈希。

该方法是幂等操作,无论调用多少次都会产生相同的结果。我们建议实现一个可以远程调用的Web服务器路由,或在启动服务器时调用该方法。

以下是实现Web服务器路由的示例代码:

import 'dart:io';
import 'package:serverpod/serverpod.dart';
import 'package:serverpod_auth_server/module.dart' as auth;

class MigratePasswordsRoute extends Route {
  @override
  Future<bool> handleCall(Session session, HttpRequest request) async {
    request.response.writeln(
      'Migrating legacy passwords, check the server logs for progress updates.',
    );
    _migratePasswords(session);
    return true;
  }
}

Future<void> _migratePasswords(Session session) async {
  session.log('Starting to migrate passwords.');

  var totalMigratedPasswords = 0;
  while (true) {
    try {
      var entriesMigrated = await auth.Emails.migrateLegacyPasswordHashes(
        session,
        // 每次处理100个数据库条目
        batchSize: 100,
        // 迁移500个条目后停止
        maxMigratedEntries: 500,
      );

      totalMigratedPasswords += entriesMigrated;
      session.log(
        'Migrated $entriesMigrated password entries, total $totalMigratedPasswords.',
      );

      if (entriesMigrated == 0) break;

      // 延迟以避免数据库过载
      await Future.delayed(Duration(seconds: 1));
    } catch (e) {
      session.log('Error migrating passwords: $e');
    }
  }

  session.log('Finished migrating passwords.');
}

如何迁移现有密码哈希

由于在不知道明文密码的情况下无法重新计算密码哈希,电子邮件身份验证模块中的方法将新算法应用于已存储的密码哈希。

当受影响的用户稍后进行身份验证时,他们的密码哈希将同时使用两种算法进行计算。如果身份验证被接受,存储的密码哈希将更新为仅使用新算法,以便后续身份验证只需运行新算法。

影响

所有serverpod_auth_server 1.2.6之前的版本

补丁

升级到1.2.6版本可解决此问题。

参考

安全评分

严重程度:中等
CVSS总体评分:5.3/10

CVSS v3基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:无
  • 用户交互:无
  • 范围:未改变
  • 机密性:低
  • 完整性:无
  • 可用性:无

弱点

弱点:CWE-916
使用计算强度不足的密码哈希 - 产品为密码生成哈希,但使用的方案未提供足够的计算强度,使得密码破解攻击变得可行或成本不高。

CVE ID:CVE-2024-29886
GHSA ID:GHSA-r75m-26cq-mjxc
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2025-10-24 22:22  qife  阅读(7)  评论(0)    收藏  举报