Библиотека Polyfill является одной из многих полузабытых основ, на которые полагается мир веб-приложений. Когда её домен сменил владельца, CDN, обслуживающий библиотеку, начал вводить вредоносное ПО в код, что в конечном итоге поставило под угрозу посетителей более чем 100 000 сайтов, использующих Polyfill. Далее более подробно о том, как разворачивалась атака, почему это стало возможным и как предотвратить подобные инциденты.
Что важно знать:
- 25 июня 2024 года домен cdn.polyfill.io начал внедрять вредоносное ПО в популярную библиотеку polyfill.js, которую, по оценкам, используют более 100 000 сайтов.
- 26 июня Cloudflare начала автоматически переписывать запросы на cdn.polyfill.io и обслуживать их безопасной дублированной копией библиотеки.
- По состоянию на 27 июня продукты Invicti включают специальные проверки безопасности, чтобы выявлять любое использование polyfill.io в приложениях.
Домен polyfill.io был удалён (хотя он всё ещё может быть в кеше), и непосредственного риска компрометации нет, но все сайты и приложения, которые загружали скрипты с polyfill.io, должны удалить их в качестве меры предосторожности, поскольку домен теперь рассматривается как вредоносный. Лучшей практикой для защиты от подобных атак в будущем является использование функции Subresource Integrity (SRI) при загрузке внешних зависимостей.
История polyfill.io
Проект Polyfill с открытым исходным кодом был создан десять лет назад как удобная сборка полифилов для разработки вебсайтов и веб-приложений. В феврале 2024 года домен polyfill.io был куплен компанией под названием Funnull, вероятно китайского происхождения. В дальнейшем поступали некоторые сообщения о том, что cdn.polyfill.io внедряет вредоносное ПО при загрузке на мобильных устройствах, но любые жалобы быстро удалялись из репозитория GitHub.
Полномасштабная атака на цепочку поставок была зафиксирована 25 июня, когда cdn.polyfill.io начал внедрять вредоносный код на вебсайты, загружавшие скрипты с этого домена. Было обнаружено, что более 100 000 сайтов загружали заражённые полифилы, которые доставляли разнообразное вредоносное ПО в браузеры. Крупные поставщики, такие как Google и Cloudflare, быстро отреагировали на угрозу. В частности, Cloudflare давно подозревала новых владельцев polyfill.io и создала собственную копию репозитория Polyfill. Когда атаки начались, Cloudflare начала переписывать запросы на cdn.polyfill.io, указывая на свою безопасную зеркальную копию репозитория. И Cloudflare, и Fastly предоставляли безопасную зеркальную копию Polyfill с февраля.
На момент написания этого текста домен polyfill.io был полностью отключён его оператором, что устраняет немедленную угрозу атаки и даёт время для удаления любых ссылок на cdn.polyfill.io из приложений, которые загружали скрипты с этого домена.
Полифилы – это вспомогательные скрипты (обычно JavaScript, загружаемый из веб-источника), которые обеспечивают современную функциональность для старых версий браузеров, которые могут не поддерживать определённую функцию. Они были популярным инструментом в эпоху ограниченной совместимости между браузерами, но сейчас они гораздо менее полезны с современными браузерами, которые реализуют спецификации более стандартизировано. Оригинальный создатель проекта Polyfill несколько лет назад перестал рекомендовать использование полифилов, заявив, что они ненужны и потенциально рискованны.
Ещё одно звено в цепочке поставок веб-приложений
“Инцидент с Polyfill является ещё одной иллюстрацией того, насколько сложной и уязвимой стала цепочка поставок безопасности веб-приложений, особенно в экосистеме JavaScript на стороне клиента”, – сказал Ден Мёрфи из Invicti Security. “Разница по сравнению с подобными известными атаками заключается в том, что злоумышленники просто взяли под контроль широко используемый проект, вместо того чтобы просто использовать уязвимость где-то в структуре веб-зависимостей”, – объясняет он.
Многие скрипты сейчас загружаются через сети доставки контента (CDN) для улучшения производительности, что делает CDN ещё одним звеном в цепочке поставок и, таким образом, потенциальной целью. Без проверки, изменялась ли зависимость, владелец фактически доверяет оператору CDN безопасность приложения.
Предотвращение следующей атаки типа Polyfill
К счастью, существует разумная функция браузера, которая может спасти в случае захвата CDN одной из зависимостей – проверка целостности подресурсов (SRI). Большинство современных вебсайтов работают с очень конкретным набором версий библиотек. Как только версия импортирована, это та, которую владелец использует, если не появится новая версия и не будет принято решение обновить её. Это работает и наоборот: как только версия опубликована, её обычно не изменяют. Если нужно что-то изменить, это обычно делается в новой версии, которую можно использовать или игнорировать. Другими словами, как только файл включён в приложение, он никогда не должен изменяться. Если он изменяется, это означает, что что-то идёт не так.
Что такое SRI?
Функция целостности подресурсов в браузере позволяет убедиться, что ресурс не изменился с момента его включения в приложение. Чтобы использовать SRI, нужно создать хеш (sha256, sha384 или sha512) файла, который загружают, и для этого существуют онлайн-инструменты, которые делают это автоматически. Затем просто добавляют хеш в атрибут integrity тега script или link, как в этом примере с sha384 для jQuery:
<script src="https://code.jquery.com/jquery-2.1.4.min.js" integrity="sha384-R4/ztc4ZlRqWjqIuvf6RX5yb/v90qNGx6fS48N0tRxiGkqveZETq72KgDVJCp2TC" crossorigin="anonymous"></script>
После этого ресурс загрузится как обычно. Если что-то изменяется на стороне сервера, например, если добавляется вредоносный код, сохранённый хеш больше не будет совпадать с хешем входного скрипта или таблицы стилей, и браузеры откажутся загружать ресурс. Это защищает не только от вредоносных изменений, но и от проблем на стороне CDN, таких как неправильные конфигурации или изменения, которые трудно отладить, влияющие на функциональность вебсайта.
Проверки безопасности в продуктах Invicti для верификации SRI и обнаружения использования Polyfill
Продукты Invicti включают проверки, чтобы предупреждать пользователя, когда сайт не использует целостность подресурсов или если текущий хеш SRI неправильный.
Оба продукта Acunetix и Invicti теперь включают специальные проверки безопасности для идентификации любых использований polyfill.io на просканированных вебсайтах и приложениях. Они доступны непосредственно во всех версиях Acunetix (кроме Acunetix 360).







