На протяжении последних девяти лет Mozilla использовала в своей функции "мастер-пароль" недостаточно надежное шифрование.
В Firefox и Thunderbird предусмотрена функция, позволяющая пользователям устанавливать мастер-пароль, играющий роль криптографического ключа для шифрования каждого пароля, сохраненного в браузере или почтовом клиенте. Данная функция получила хорошие отзывы ИБ-экспертов, поскольку без нее браузеры сохраняют пароли локально в незашифрованном виде, оставляя их уязвимыми для вредоносного ПО или хакеров с физическим доступом к компьютерам жертв. Однако по словам создателя AdBlock Plus Владимира Паланта (Wladimir Palant), используемый функцией механизм шифрования ненадежен и может быть легко взломан с помощью брутфорса.
В ходе анализа исходного кода Палант обнаружил функцию sftkdb_passwordToKey(), преобразовывающую пароли в ключи шифрования, применяя хеширование SHA-1 к строке, состоящей из самого мастер-пароля и произвольных символов (соли). По словам исследователя, здесь и кроется проблема.
Счетчик цикла функции SHA-1 равен единице. Это значит, что она применяется только один раз, тогда как рекомендованным значением является 10000 (к примеру, в LastPass счетчик цикла равен 100000). Столь низкое значение существенно облегчает работу хакерам, которые могут осуществить брутфорс-атаку, расшифровать мастер-пароль, а затем и все зашифрованные с его помощью пароли.
Палант – не первый исследователь, обнаруживший данную проблему. Еще девять лет назад о ней сообщил Джастин Долске (Justin Dolske) сразу же после появления функции "мастер-пароль". Тем не менее, Mozilla не исправляла уязвимость до тех пор, пока недавно о ней снова не напомнил Палант. Как сообщили в компании, проблема будет исправлена с выходом нового компонента для функции "мастер-пароль" под кодовым названием Lockbox.
Счетчик цикла – термин, часто использующийся для обозначения переменной, контролирующей повторы выполнения циклов (конструкции языков программирования). Свое название термин получил благодаря тому, что в большинстве случаев использования этой конструкции ее результат записывается в некоторую переменную, принимающую в качестве значения набор целых чисел в определенной последовательности (например, начиная с 0 и заканчивая 10 с шагом приращения 1). Счетчики циклов изменяют свое значение при каждом прохождении цикла, подставляя уникальное значение для каждой отдельной итерации.