Случайное письмо от хедхантера Google выявило уязвимость в ключах DKIM

Случайное письмо от хедхантера Google выявило уязвимость в ключах DKIM

Отправляя электронное письмо математику, будьте осторожны. Мало ли что он обнаружит в байтах служебной информации. Именно это произошло в случае с американским математиком Захари Харрисом (Zachary Harris), которого хедхантер Google хотел пригласить на собеседование.

Вместо того, чтобы вдумчиво вчитаться в текст предложения, Зак обратил внимание на размер ключа DKIM в подписи сообщения. DKIM (DomainKeys Identified Mail) — метод аутентификации отправителя путём проверки цифровой подписи почтового сервера. DomainKeys использует существующую систему DNS для передачи открытых ключей шифрования от каждого домена. Сервер получателя сверяет цифровую подпись отправителя с именем домена, указанного в обратном адресе, сообщает xakep.ru.

Харрис полез проверять DKIM, потому что письмо показалось ему странным. Математик хотел убедиться, что сообщение оригинальное, а не отправлено от какого-то мошенника. И вот здесь он обнаружил, что ключ шифрования, который использовался для генерации цифровой подписи для домена google.com, имеет размер всего лишь 512 бит, что по нынешним меркам маловато. Стандарт вводили в начале 2000-х, когда вычислительные мощности были в десятки раз слабее. Было предусмотрено, что подпись DKIM может быть сгенерирована ключом не только 1024+ бита, но и 384, 512 или 768 бит. Сейчас есть облачные хостинги, где можно недорого купить время вычислительного кластера, что и сделал Харрис. В течение нескольких дней он подобрал оригинальный ключ шифрования, это обошлось ему в $75.

Обладая хорошим чувством юмора, Харрис использовал сгенерированный ключ для отправки письма Ларри Пейджу с адреса электронной почты Сергея Брина, подписал письмо настоящей подписью почтового сервера google.com и добавил свой собственный адрес электронной почты в поле Reply-To.

Харрис знал, что Google часто задаёт хитрые задачи на собеседованиях, чтобы проверить логику кандидата. Например, «Сколько теннисных шариков поместится в школьный автобус?» или «В какую сторону должен поворачиваться ключ в замке, запирающем дверцу автомобиля, когда замок открывают?». В общем, Харрис подумал, что это может быть скрытый тест, справится ли он со взломом ключа. Он справился.

Через пару дней Харрис проверил цифровые подписи google.com и обнаружил, что они увеличились до 1024 бит. Но письма от хедхантера с уведомлением об успешном прохождении теста всё не было. Тогда математик подумал, а может быть, это и не тест вовсе? Он посмотрел на цифровые подписи DKIM, которые используются для других доменов в интернете, и увидел, что Paypal, eBay, Apple, Amazon, Twitter и многие другие сайты, включая несколько банков, используют ключи шифрования 384, 512 или 768 бит, так что потенциальный злоумышленник может подделать обратный адрес письма, используя аутентичную цифровую подпись Apple или Paypal. Открываются богатые возможности для фишинга.

В августе Зак Харрис отправил информацию об уязвимости в CERT, она будет официально опубликована в течение ближайших дней.

Новая атака на кеш Nginx позволяет красть данные и ломать сайты

Исследователь YesWeHack Алекс Брумен описал вектор кибератаки Cache Key Injection. В случае её эксплуатации последствия для потенциальной жертвы опасные: обход контроля доступа, раскрытие закрытых страниц, отказ в обслуживании и при определённых условиях.

Как объясняет исследователь YesWeHack, проблема возникает не в Nginx по умолчанию, а в конфигурациях, где администраторы просто склеивают несколько значений переменной длины без разделителей. Например:

$scheme$host$request_uri$http_accept

Разных запроса два, а итоговая строка может получиться одна. Так, запрос к /h с заголовком Accept: ome*/* создаёт тот же ключ, что и обычное обращение к /home с Accept: */*.

Если атакующий успеет первым положить в кеш ответ 404, пользователи вместо главной страницы будут получать ошибку до очистки записи. Получается CPDoS — отказ в обслуживании с доставкой прямо из кеша.

 

Ещё веселее становится с закрытыми разделами. В лабораторном примере страница /admin была доступна только с localhost, но злоумышленник мог обратиться к /ad и перенести оставшуюся часть имени в соседний компонент ключа. Nginx видел разрешённый путь, однако доставал из кеша содержимое админ-панели.

При совпадении нескольких условий техника позволяет столкнуть HTTP- и HTTPS-запросы и записать в кеш страницу со ссылкой на атакующий JavaScript, превратив ошибку конфигурации в stored XSS. Даже Cloudflare не всегда спасёт: заголовок Authorization может провести запрос мимо его кеша прямо к уязвимому кешу Nginx.

 

Защита выглядит до смешного просто: не склеивать значения вслепую. Между элементами ключа нужны разделители или структурное кодирование, например:

$scheme|$host|$request_uri|$http_accept

Также следует проверять Host, перенаправлять HTTP на HTTPS и не кешировать аутентифицированные запросы.

RSS: Новости на портале Anti-Malware.ru