Хакер #305. Многошаговые SQL-инъекции
Разработчики Let's Encrypt предупредили, что сегодня, 4 марта 2020 года, они будут вынуждены отзывать 3 048 289 сертификатов. Все дело в ошибке в управляющем ПО Boulder, которое используется для проверки пользователей и их доменов перед выдачей сертификатов.
Чтобы разобраться в возникшей проблеме, нужно понимать, что такое стандарт CAA (Certificate Authority Authorization). Он был утвержден еще в 2017 году и позволяет владельцам доменов запретить удостоверяющим центрам выпуск сертификатов для своих доменов. По сути, владельцы доменов могут добавить специальное поле CAA (CAA field) в DNS своего домена, и только удостоверяющий центр, указанный в этом поле, может выдать домену сертификат. Все удостоверяющие центры (включая Let's Encrypt) обязаны следовать CAA, в соответствии с буквой закона, а в противном случае им грозят серьезные штрафы.
29 февраля 2020 года стало известно, что ошибка в коде Boulder, связанная с имплементацией CAA, появилась еще летом 2019 года и порой заставляла его игнорировать проверку CAA.
«Если запрос сертификата содержал N доменных имен, для которых требовалась повторная проверка CAA, Boulder выбирал одно доменное имя и проверял его N раз. Фактически если подписчик осуществлял валидацию доменного имения на время X, запись CAA для этого домена позволяла выдать сертификат Let's Encrypt во время X. Но подписчик имел возможность получить сертификат, содержащий это доменное имя, на период X+30 дней, даже если позже на это доменное имя была установлена запись CAA, запрещая выдачу сертификатов Let's Encrypt», — объясняют разработчики Let's Encrypt.
В минувшие выходные баг был исправлен, и теперь Boulder проверяет поле CAA корректно. Инженеры Let's Encrypt пишут, что, по их данным, проблемой никто не успел злоупотребить. Однако удостоверяющий центр вынужден аннулировать все сертификаты, которые были выданы с нарушением проверок CAA, в соответствии с отраслевыми правилами.
По сути, из всех 116 000 000 активных в настоящее время сертификатов только 2,6% были подвержены этой проблеме. Как уже было сказано выше, это 3 048 289 сертификатов. Около миллиона из них являются дубликатами для одних и тех же доменов и поддоменов, то есть фактическое количество затронутых проблемой сертификатов равняется примерено 2 000 000.
Let's Encrypt уже уведомляет всех пострадавших по электронной почте. Кроме того, проверить свои сертификаты можно при помощи специального сервиса или опираясь на серийные номера проблемных сертификатов (подробности опубликованы на этой специальной странице).