Атака на ланцюг постачання Polyfill

Бібліотека 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 включають перевірки, щоб попереджати користувача, коли сайт не використовує Subresource Integrity (SRI) або якщо чинний хеш SRI неправильний.

Обидва продукти Acunetix та Invicti тепер включають спеціальні перевірки безпеки для ідентифікації будь-яких використань polyfill.io на просканованих вебсайтах та додатках. Вони доступні безпосередньо у всіх версіях Acunetix (крім Acunetix 360).

Підписатися на новини