понедельник, 22 мая 2023 г.

Уязвимость в KeePass... Шо?.. Опять?!

Оказывается, я проспал, как в прессе уже несколько дней (а на форуме и все двадцать) обсуждается новая «страшная уязвимость». Как ни странно, некоторая проблема здесь действительно имеет место. Но и традиционные курьезы и фейспалмы никто не отменял.

Суть дела: дамп памяти содержит информацию о мастер-пароле.

Вообще-то мы давно знаем, что все, с чем мы работали после запуска KeePass'а, остается в его памяти даже после блокировки. И ничего с этим поделать невозможно из-за неизменяемости .NET строк.

Однако нам, пусть и с оговорками, все-таки обещано отсутствие «чувствительных данных» в памяти процесса. По крайней мере, считалось, что противник, завладевший дампом памяти, не сможет восстановить мастер-пароль, если мы вводили его обычным способом и без раскрытия звездочек. Выяснилось, что сможет. В этом и состоит уязвимость.

Насколько она серьезна? — Настолько же, насколько существенны все оговорки, сделанные и упомянутые выше. Пойдем с конца.

Во-первых, когда мастер-пароль виден, он неизбежно попадает в память. Многие ли пользователи задумываются об утечке дампа, когда раскрывают звездочки, набирая пароль?

Во-вторых, мастер-пароль защищается от попадания в память, когда он вводится с клавиатуры, но не когда он передается через командную строку (в т.ч. зашифрованно) или через StdIn, или когда базы открываются друг из друга триггерами.

В-третьих, данные неизбежно остаются в памяти, если мы ими пользуемся (а если нет, то для чего мы их храним?..) Т.е. как бы мы ни пеклись о безопасном вводе мастер-пароля, сама наша защищаемая ценность — наши записи — оказываются в уязвимом положении.

Из всего этого напрашивается вывод, что все плохо мы все умрем обнаруженная уязвимость не так уж сильно меняет расклад: утечка дампа всегда представлялась опасной. Так что лучше нам позаботиться о том, чтобы его вообще не с чего было снимать, а не о том, какие данные туда попадут. Например, автооткрытие флешкой палит мастер-пароль в памяти KeePass'а, но смысл этого приема как раз в повышении безопасности: легкость открытия позволяет закрывать приложение после каждого использования, а не держать его запущенным днями и месяцами.

Сама же уязвимость скоро будет устранена: разработчик быстро нашел, как это сделать, и выкатил тестовую сборку.

Но я ведь обещал фейспалм? Встречайте: представитель KeePassXC гордо отрапортавал, что их продукт не подвержен этой уязвимости. Об этом же заявлено (что меня удивило более всего) на гитхабе у автора PoC, и, разумеется, это повторили «глянцевые» издания. Таки не подвержен?

В каком-то смысле они даже правы: «Eсли у вас нету дома, пожары ему не страшны...» Ну вы поняли. KeePassXC вообще не предотвращает попадание мастер-пароля в свою память. И конечно, не удаляет его оттуда после блокировки. Чтобы в этом убедиться, не нужен хитрый трюк, который автор PoC проворачивал с собиранием обрывочных строк. Просто снимите дамп и найдите там свой мастер-пароль голым текстом.

Что, впрочем, само по себе не является намного большей проблемой, чем все, сказанное выше про KeePass.