Но просматривая код своего старого проекта, которому уже почти 2 года (ASP.Net на котором держится мой сайт)
Там есть restAPI функционал для лаунчера игры. И да, я использую аутентификацию лаунчера по API ключу (Для того, что бы кидди скрипты не смогли заддосить мой API загрузками файлов)
Так как код старый, я допустил там как раз ту самую уязвимость! Хаха, кто бы мог подумать =)
if (expectedSignature != receivedSignature) <-- Вот она
{
context.Result = new UnauthorizedResult();
return;
}
работает это по тому же самому принципу, как только не совпадает один байт, он прерывается, что дает разное время.
Но фиксится это просто
byte[] expectedBytes = Convert.FromBase64String(expectedSignature);
byte[] receivedBytes = Convert.FromBase64String(receivedSignature);
if (!CryptographicOperations.FixedTimeEquals(expectedBytes, receivedBytes))
{
context.Result = new UnauthorizedResult();
return;
}
Не забудьте добавить библиотеку
using System.Security.Cryptography;
Так что перепроверьте свои API приложения что бы там небыло таких приколов. Исправление занимает БУКВАЛЬНО 1 минуту, но проактивно вас защищает.
#CyberSecurity #DotNet #TimingAttack #SecureCoding #APISecurity #FoxHardSoftness