【问题标题】:Phil Strugeon REST server - is there really security vulnarability in Digest Auth or I misunderstood something?Phil Sturgeon REST 服务器 - Digest Auth 中真的存在安全漏洞还是我误解了什么?
【发布时间】:2013-05-07 07:49:54
【问题描述】:

最近我为 CodeIgniter 下载了Phil Strugeon REST server。 我查看了源代码,当我进行摘要身份验证时,我看到了以下代码:

if ($this->input->server('PHP_AUTH_DIGEST'))
{
    $digest_string = $this->input->server('PHP_AUTH_DIGEST');
}
elseif ($this->input->server('HTTP_AUTHORIZATION'))
{
    $digest_string = $this->input->server('HTTP_AUTHORIZATION');
}
else
{
    $digest_string = "";
}
    

稍后在检查是否存在 $digest_string 和存在用户名之后:

// This is the valid response expected
$A1 = md5($digest['username'].':'.$this->config->item('rest_realm').':'.$valid_pass);
$A2 = md5(strtoupper($this->request->method).':'.$digest['uri']);
$valid_response = md5($A1.':'.$digest['nonce'].':'.$digest['nc'].':'.$digest['cnonce'].':'.$digest['qop'].':'.$A2);

if ($digest['response'] != $valid_response)
{
    header('HTTP/1.0 401 Unauthorized');
    header('HTTP/1.1 401 Unauthorized');
    exit;
}
    

Wikipedia 我看到以下关于 HTTP Digest Auth 的文字:

对于后续请求,十六进制请求计数器 (nc) 必须大于它使用的最后一个值 - 否则攻击者可以简单地“重放”具有相同凭据的旧请求。由服务器确保计数器针对它发出的每个 nonce 值增加,从而适当地拒绝任何错误的请求。

服务器应该记住它最近生成的 nonce 值。它还可以记住每个 nonce 值的发布时间,并在一定时间后过期。如果使用了过期的值,服务器应该以“401”状态码进行响应,并将 stale=TRUE 添加到身份验证头中,指示客户端应该使用提供的新随机数重新发送,而不提示用户输入另一个用户名和密码。

但是我在源代码中看不到任何关于检查 cnonce、nc 或 nonce 的内容。 这是否意味着记录了从客户端到服务器的请求并通过身份验证的人将来可能只是“重放”它并获得新的资源价值?

真的是脆弱吗?还是我误会了什么?

【问题讨论】:

    标签: codeigniter rest


    【解决方案1】:

    我在查看 codeigniter-restserver 时也注意到了这一点。它很容易受到重放攻击,因为正如你所说,它不强制执行随机数。

    摘要式身份验证需要握手:

    1. 客户端通过授权发出请求。它将失败,因为客户端还不知道 nonce
    2. 服务器使用 WWW-Authenticate 标头进行响应,其中包含要使用的正确随机数
    3. 客户端使用服务器响应中提供的随机数发出相同的请求
    4. 服务器检查随机数是否匹配并提供请求的 url。

    要完成此操作,您需要在 REST 服务器上启动会话以记住 nonce。确保 nonce 始终唯一的一个简单方案是使用诸如 uniqid() 之类的函数将它基于当前时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2021-12-19
      • 2011-03-22
      • 2020-06-04
      相关资源
      最近更新 更多