Skip to content

ApiKey comparison has timing attack vulnerability #1

@MikaKarjunen

Description

@MikaKarjunen

The current implementation of apiKey comparison has timing attack vulnerability.

The file ApiKeyMiddleware.cs current implementation is as follows:

if (!apiKey.Equals(extractedApiKey))
{
  context.Response.StatusCode = 401;
  await context.Response.WriteAsync("Unauthorized client");
  return;
}

Should be something like:

var equals = CryptographicOperations.FixedTimeEquals(
  System.Text.Encoding.UTF8.GetBytes( apiKey ),
  System.Text.Encoding.UTF8.GetBytes( extractedApiKey ) );

if( !equals )
{
  context.Response.StatusCode = 401;
  await context.Response.WriteAsync( "Unauthorized client" );
  return;
}

See:
https://en.wikipedia.org/wiki/Timing_attack
https://vcsjones.dev/fixed-time-equals-dotnet-core
https://michaelhowardsecure.blog/2019/02/22/the-dangers-of-string-comparing-passwords

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions