Проблемы безопасности Яндекс.Почты (а еще ПДД и Коннект)

    image Привет, GT! Я прочитал пост MikhailNsk, и мой мозг перенес меня в 2016 год, где я случайно наткнулся на проблему с подменой адресов у Яндекс.Почты. Сама угроза заключается в том, что письма, с точки зрения, DMARC и SPF являются полностью валидными. Этому подвержены не только пользователи Почты, но и организации, которые используют в качестве почтовика со своим доменом Яндекс.ПДД и Яндекс.Коннект (для примера, это всем известный и везде рекламируемый «майловский» GeekBrains), а это уже куда серьезнее. Уязвимость на данный момент работает, письмо проходит все проверки и доставляется куда-угодно (включая GMAIL). Реализация и реакция Яндекса под катом.

    Внимание! Приведенный ниже алгоритм воспроизведения уязвимости предоставлен исключительно в образовательных целях!

    Реализация уязвимости


    Сама суть очень проста, Яндекс позволяет авторизоваться под одним адресом, а отправлять с любого другого, где прописаны DMARC и SPF правила Яндекса, а еще письмо подписывается валидной DKIM подписью yandex.ru.

    Для реализации нам потребуется почтовый ящик на Яндексе и сторонний почтовый клиент (мой выбор пал на открытый и функциональный Thunderbird).

    К последнему мы прикручиваем свой почтовый ящик от Яндекса, открываем окно отправки письма



    Меняем адрес отправителя на нужный нам (в нашем случае на i@yandex.ru)



    И отправляем письмо куда-нибудь



    На гуглопочту (как и на любую другую) письмо пришло нормально. Гугл показывает карточку, что все гуд:



    Исходник письма
    Delivered-To: @gmail.com
    Received: by 10.31.164.6 with SMTP id n6csp2248696vke;
    Thu, 10 Aug 2017 09:17:13 -0700 (PDT)
    X-Received: by 10.46.33.9 with SMTP id h9mr3821349ljh.52.1502381833140;
    Thu, 10 Aug 2017 09:17:13 -0700 (PDT)
    ARC-Seal: i=1; a=rsa-sha256; t=1502381833; cv=none;
    d=google.com; s=arc-20160816;
    b=CM0dF4giYDl9jToC/17FjHIeiQNsfFaDUxcYErv/RAHKrX+8PIdx0QabF/kUMVelug
    ESNfNVYYv09sIrZsYSgqnmKlVdPbQYkmr0mSE+oZ2cjIhebKQcfQjKARk+6LLFOrtNSb
    M1O014IAXh+y+ykx2EEyhyWir1y+SWItjS2ukNN19t9GwY91hjFtd+0T2OQDvC44qjpW
    ztHKTCTNne0+NhMRYg2iSL0uQZkkpeUNNKgkRavCJRKgnjtMOuLqtx0uNLfZex34XcBl
    vtZTfThoUeuzBPmHVVnnE+W8lcLoqTG2/jr4C4E4VNDHrjUCsDecNNfGYf5/BajX45n0
    BdsQ==
    ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
    h=content-language:content-transfer-encoding:mime-version:user-agent
    :date:message-id:subject:from:to:dkim-signature:dkim-signature
    :arc-authentication-results;
    bh=AOjHaT+yDXpmJsW3LSDugt7u95YQzsSxsGi10r66W3Y=;
    b=Edjq07PU+c0nie1ia60SrVoI219rb8q/OnUJMtf0tJrFPktG29Pqs4fx7E3DsNvH6l
    PPdsJVsvHDl3nIWqVSASAXaTPELSAXYETQ/zuluD+wrR2n7MXNt8QQ8cUqt7Zae8Wkq2
    Yr3cW+9Ty3VZEi2TzqRzOU3UNNhds+UHa8o6/LK3N7NN91INYevsNnrfMBSUvqm6HmMi
    AJ7dHkkwqqKX7XNkIvKNVjyq8FhnVfMiow8N/PCsVqtTly+q825p5kOl3hxqbLMsi3ix
    AL3MGC84U/m8+dvivNege5yDby/Dfp6uY6jHJL/hOVmmUwT1/y2F+5SD/ifuS4EX2gI7
    geLg==
    ARC-Authentication-Results: i=1; mx.google.com;
    dkim=pass header.i=@yandex.ru header.s=mail header.b=T2n/cJmZ;
    dkim=pass header.i=@yandex.ru header.s=mail header.b=T2n/cJmZ;
    spf=pass (google.com: domain of 42@yandex.ru designates 37.140.190.181 as permitted sender) smtp.mailfrom=42@yandex.ru;
    dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=yandex.ru
    Return-Path: <42@yandex.ru>
    Received: from forward101o.mail.yandex.net (forward101o.mail.yandex.net. [37.140.190.181])
    by mx.google.com with ESMTPS id 128si582786lfz.671.2017.08.10.09.17.12
    for <@gmail.com>
    (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
    Thu, 10 Aug 2017 09:17:13 -0700 (PDT)
    Received-SPF: pass (google.com: domain of 42@yandex.ru designates 37.140.190.181 as permitted sender) client-ip=37.140.190.181;
    Authentication-Results: mx.google.com;
    dkim=pass header.i=@yandex.ru header.s=mail header.b=T2n/cJmZ;
    dkim=pass header.i=@yandex.ru header.s=mail header.b=T2n/cJmZ;
    spf=pass (google.com: domain of 42@yandex.ru designates 37.140.190.181 as permitted sender) smtp.mailfrom=42@yandex.ru;
    dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=yandex.ru
    Received: from mxback1o.mail.yandex.net (mxback1o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::1b])
    by forward101o.mail.yandex.net (Yandex) with ESMTP id 919D813416EA
    for <@gmail.com>; Thu, 10 Aug 2017 19:17:12 +0300 (MSK)
    Received: from smtp1o.mail.yandex.net (smtp1o.mail.yandex.net [2a02:6b8:0:1a2d::25])
    by mxback1o.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 3IjaA941Wl-HCe4hwWw;
    Thu, 10 Aug 2017 19:17:12 +0300
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1502381832;
    bh=AOjHaT+yDXpmJsW3LSDugt7u95YQzsSxsGi10r66W3Y=;
    h=To:From:Subject:Message-ID:Date;
    b=T2n/cJmZ2jEcX5rX5exetDc2VfT1lhVgPkMXfbIFAmw8PE6iLFkdddO7f67IRKfrb
    KNV7U5whs9PUhGRd0S2x5OULF8VC3QXMSEvXJiM5gSxZdbNNNq2GRDpTkxbJiDASDT
    A2DYgoRtpFzN64wX4EnSEmya/D24mP43VOi2TlAc=
    Received: by smtp1o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id i5ALruo2pE-HC4WKA0l;
    Thu, 10 Aug 2017 19:17:12 +0300
    (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
    (Client certificate not present)
    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1502381832;
    bh=AOjHaT+yDXpmJsW3LSDugt7u95YQzsSxsGi10r66W3Y=;
    h=To:From:Subject:Message-ID:Date;
    b=T2n/cJmZ2jEcX5rX5exetDc2VfT1lhVgPkMXfbIFAmw8PE6iLFkdddO7f67IRKfrb
    KNV7U5whs9PUhGRd0S2x5OULF8VC3QXMSEvXJiM5gSxZdbNNNq2GRDpTkxbJiDASDT
    A2DYgoRtpFzN64wX4EnSEmya/D24mP43VOi2TlAc=
    Authentication-Results: smtp1o.mail.yandex.net; dkim=pass header.i=@yandex.ru
    To: @gmail.com
    From: Habratest <i@yandex.ru>
    Subject: Test fot Habr
    Message-ID: <48942373-b6c4-d019-a15f-6aeaeeda39df@yandex.ru>
    Date: Thu, 10 Aug 2017 21:17:10 +0500
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101
    Thunderbird/52.2.1
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 7bit
    Content-Language: en-US

    Hbrahabrahabrahabrahabrahabrahabrahabrahabrahabrahabrahabrahabra

    Адрес получателя был заменен на @gmail.com, настоящий адрес на 42@yandex.ru

    Мораль и ответ Яндекса


    Данная уязвимость создает огромные возможности для соц.инжиниринга. Таким образом можно использовать адреса, например, GeekBrains, который использует для почты ПДД (или Коннект).
    DKIM проверка отдает pass, но домен указывается Яндекса (даже использовать другой почтовый домен).

    Естественно, я сразу же отписал об этом в багхантер Яндекса еше летом прошлого года и
    получил ответ:



    До меня уязвимость им отправили 27 июня 2016 года. Т.е. Яндекс за год не смог исправить достаточно серьезную (по моему мнению) уязвимость, которая может затронуть безопасность партнеров Яндекса, которые используют их почтовик.

    UPD: есть способ замаскировать адрес отправителя. Для этого достаточно купить более или менее похожий домен, прикрутить к нему ПДД и отправлять письма с него. Адрес подменяется так же, все проверки валидны, а DKIM подпись и адрес отправителя будет от нового домена.

    Кстати, mail.ru и gmail этому не подвержены. GeekBrains, простите, но я знаю лишь вас, среди тех кто использует сервисы Яндекс, ведь вы спалились аватаркой.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      –3
      — Не волнуйтесь! Утонуть в нашем бассейне практически невозможно. А потому что каждые полчаса мы обшариваем дно баграми!
      • НЛО прилетело и опубликовало эту надпись здесь
          +2
          Если смотреть исходник письма, то там несколько раз фигурирует настоящий адрес отправителя. То есть он так или иначе попадает в заголовки. Почему тогда почта получателя (в данном случае gmail) на это полностью забивает и просто смотрит на From?
            0
            У Exim точно такое же поведение. Очень часто встречаются письма с доверенными доменами в поле From, но с левым ящиком в заголовках. Пытался сделать фильтрацию типа: если From из тела не совпадает с from из заголовка отбрасывать. Но тогда пользователи жаловались на невозможность получать рассылки.
              +1
              Потому что это From. Вопрос в другом: почему сервер Яндекса на это забивает? Если же такую штуку провернуть с gmail, то вот оно как раз и подставляет во From принудительно адрес, под которым ты авторизовался.
                0
                Так, ещё раз. Почему за правильный адрес отправителя должен отвечать сервер отправителя, а не получателя? При том что и у того, и у другого есть техническая возможность.
                  +1
                  Само по себе это иногда необходимо. Например, у меня есть почтовый сервер и приличное кол-во адресов. Мне удобнее авторизоваться под одним и отправлять письма с нескольких. И я не хочу, чтобы именно принимающая сторона решала, нужно ли отклонять или нет. А вот в случае Яндекса — это публичный сервис. Здесь каждому человеку/организации дается один или несколько адресов, и тут уже критично, отправил ли он сообщения со своих или чужих адресов. И решать это нужно, естественно, отправляющей стороне.
                +1
                Например есть внутренний почтовый сервер в виде кластера, распределенный на несколько локаций (может даже в разных странах). И внешний почтовый сервер, через который идет коммуникация с миром.

                Внутри все адреса что-то типа user1@office.example.com, или даже user1@officeUA.example.com
                Наружу оно проксируется через внешний сервер и может уходить как user1@example.com, имея в reference заголовках оригинальный «внутренний» сервер.

                Казалось бы, зачем так? Но так могут жить крупные компании (десятки тысяч сотрудников), на Lotus Notes или Exchange. Смена всей инфраструктуры — вещь затратная, и никаких конкретных предпосылок нет.

                Кроме того, крайне удобны варианты, когда Vasily Pupkin from support team отправляет от имени support_team@example.com, а не с личного емайла.

                Таким образом это не только не бага, но и фича, которая активно используется.
                –1
                Скорее всего, не чинят потому что в этом случае отвалится очень много писем с таким несоответствием в заголовках — уведомления о заказах на сайтах, легальные рассылки и т.п. Да, виноваты в этом владельцы сайтов, а не яндекс, но крайним в любом случае окажется яндекс.
                  +1
                  Если правильно сделать — не отвалится. У Яндекса есть все ресурсы, чтобы грамотно реализовать изоляцию между каждой организацией (кабинетом ПДД или Коннекта) и обычной Почтой.
                  0
                  Это я так понимаю ответка за mail.ru https://geektimes.ru/post/291929/
                  кто следующий? давайте за gmail
                    +1
                    скорее слишком расширенный комментарий.
                    Про Gmail, увы. написать не могу. Но есть баг из Яндекс.Денег. Он не критичен, но способен создать юридичиские трудности. Ибо связан с идентификацией несовершеннолетних.
                    –1
                    Либо уже фикс, либо автор подключается к Яндексу через особый SMTP шлюз.

                    image
                      0
                      Не фикс. Перепроверил.
                    • НЛО прилетело и опубликовало эту надпись здесь

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое