Ключ к базе клиентов подбирался за выходные
Пришёл делать обычный аудит сайта — а нашёл дыру, через которую можно было вытащить платёжные данные всех клиентов компании. Дыре было 12 лет.
Заказчик — сервис, который принимает и хранит платёжные реквизиты клиентов малого бизнеса. Данные перед сохранением шифровались, разработчики были уверены: всё надёжно, взломать нереально.
При проверке кода выяснилось: для генерации ключей шифрования использовалась старая открытая библиотека, скачанная когда-то из интернета и с тех пор ни разу не обновлённая. Формально ключ должен был иметь астрономическое число вариантов. На деле — из-за ошибки в генераторе случайных значений — реальных вариантов было в триллионы раз меньше.
Ключ подбирался перебором на обычном ноутбуке за пару дней. Не в теории — я проверил это сам на тестовом стенде.
Если бы дыру нашли раньше злоумышленники, компанию ждали: утечка платёжных данных нескольких тысяч клиентов, штрафы по закону о персональных данных, репутационный удар и, скорее всего, потеря половины клиентской базы. Это счёт на миллионы рублей — против стоимости работы, которая была несопоставима с этими рисками.
Закрыли за неделю: заменили генерацию ключей на современный проверенный модуль, перешифровали старые данные, настроили руководителю уведомление в мессенджер о любых изменениях в криптографических настройках сервиса.
Вывод: старый, но «работающий» код — не значит безопасный код. Если библиотеку никто не проверял годами, там может быть заложена мина замедленного действия.