Уязвимость MD5 на примере Gravatar

Много лет назад все сервисы использовали MD5 для хэширования паролей, адресов почт и прочих данных. Большинство из них тогда не использовали соль, потому что все считали, что MD5 довольно сложно взломать.

Сегодня у нас есть множество утёкших MD5-хэшей и соответствующих исходных строк, которые собраны в базы данных. Поэтому существуют сервисы, где можно просто вставить MD5-хэш в одно поле и получить исходную строку за считанные секунды.

Я разбирал страницы своих старых блогов, восстанавливая некоторые из них, и заметил, что раньше мой блог на WordPress использовал Gravatar для аватаров пользователей.

Gravatar — это сервис, где вы один раз регистрировались, указывали изображение профиля, и затем каждый раз, когда использовали ту же почту в комментариях других блогов, WordPress показывал всем выбранную вами картинку. Всё просто.

(Gravatar существует и сегодня, но я не знаю, используется ли он где-либо сейчас, поэтому говорю в прошедшем времени.)

Более того, вам даже не нужно было регистрироваться в Gravatar, чтобы получать одно и то же изображение на всех сайтах WordPress. Они генерировали изображение для любой почты, которую вы указывали. Так что если вы везде использовали один и тот же адрес, у вас было одинаковое изображение.

URL вашего аватара выглядел так:

http://1.gravatar.com/avatar/f9c6da5d3c13b99dff24b478540acbd0?s=39&d=identicon&r=G

Хэш в ссылке, — это просто MD5 от почты, для которой Gravatar возвращает изображение. В те времена это, вероятно, казалось «безопасным».

Раньше WordPress не показывал адрес почты автора комментария. Только имя и аватар — ради приватности и всего такого. Но сегодня мы можем легко обойти этот слой приватности из-за количества утечек и отсутствия соли в хэшах.

Поскольку базы данных с несолёными MD5-хэшами утекали множество раз, я легко расшифровал их и узнал почты всех пользователей. Хотя в архивных страницах моего блога они не отображались.

Таким образом, помимо того, что сегодня можно получить почту пользователя любого блога на WordPress, я ещё и убедился, что любой алгоритм хэширования может стать «слабым», если использовать его неправильно и не уделять достаточно внимания безопасности БД.