FlawOpen

flawopen.com/Incidents/polyfill-io-supply-chain-incident-june-2024

● Polyfill.io service · CWE-829 · June 2024 · Высокий
Исследования · FlawOpen

Атака Polyfill.io (2024)

Инцидент 2024 года: polyfill.io перенаправлял часть посетителей. Удалите ссылку на CDN; CVE не назначалась.

💡 Простыми словами (ELI5)

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

Ключевые понятия и термины

Dynamic User-Agent Polyfilling
Выдача разных наборов JavaScript в зависимости от заголовков браузера клиента, из-за чего хеши Subresource Integrity (SRI) использовать невозможно.
Conditional Payload Evasion
Анализ HTTP Referer, размера экрана, user-agent и наличия devtools, чтобы разработчикам отдавать чистые скрипты, а атаковать реальных мобильных пользователей.
Domain Ownership Transfer Risk
Неустранимый риск встраивания сторонних скриптов с доменов, которые могут быть куплены, просрочены или переданы без вашего согласия.
Subresource Integrity (SRI)
Механизм браузера, проверяющий криптографический хеш скрипта перед его выполнением.

Связи со стандартами

  • Ссылка CWE для слабого места, описанного в этом руководстве: CWE-829

Хронология инцидента

Февраль 2024

Sansec сообщила о смене владельца домена и аккаунта GitHub; Fastly предложила альтернативу в качестве меры предосторожности.

25 июня 2024

Sansec опубликовала анализ и оценила число затронутых сайтов более чем в 100 тысяч по собственным измерениям.

26–27 июня 2024

Cloudflare объявила о переписывании ссылок на своё зеркало; позднее домен приостановили. Удалите старые ссылки, не полагаясь на временное переписывание.

Пошаговый сценарий атаки

Шаг 1

Смена владельца

Sansec сообщила, что домен и аккаунт GitHub сменили владельца в феврале 2024 года. Fastly предложила альтернативу в качестве меры предосторожности до сообщений о вредоносных ответах. Позже Fastly сообщила, что узнала об атаке после публикации отчёта Sansec; предложенная в феврале альтернатива была мерой предосторожности и не доказывает, что Fastly тогда знала о вредоносной активности.

Шаг 2

Сайт загружает CDN

Ссылка на cdn.polyfill.io заставляет браузер запросить и выполнить полученный JavaScript в контексте страницы.

Шаг 3

Наблюдалось условное перенаправление

Исследованный Sansec образец при определённых условиях перенаправлял некоторых мобильных посетителей. Это описание образца, а не всех ответов CDN.

Шаг 4

Меры и реакция

Cloudflare настроила переписывание ссылок на своё зеркало, а Fastly предложила отдельную альтернативу. Sansec сообщила об отклонении Google Ads у некоторых магазинов, а не о всеобщем снижении органической выдачи.

Исходный код: Уязвимый vs Защищённый вариант

УЯЗВИМАЯ РЕАЛИЗАЦИЯ
<!-- VULNERABLE: Direct 3rd-party CDN script without integrity verification -->
<!DOCTYPE html>
<html>
<head>
  <title>Production Web App</title>
  <!-- Polyfill CDN serves arbitrary dynamic code controlled by third party -->
  <script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=default,Array.prototype.flat"></script>
</head>
<body>
  <h1>Welcome</h1>
</body>
</html>
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
<!-- Build this file from a reviewed, version-pinned dependency. -->
<script defer src="/assets/vendor/polyfills.min.js"></script>

Чек-лист по защите системы для инженеров

Источники