개요
올해 2월, 중국 기업인 “Funnull”이 polyfill.io 자바 스크립트를 호스팅하는 도메인인 cdn.polyfill.io 와 Github 계정을 인수했다. 이 인수 이후 cdn.polyfill.io에서 제공하는 스크립트를 수정하여 해당 도메인을 통해 모바일 기기에 악성 코드를 주입하는 공급망 공격 사례가 지속적으로 보고되고 있다. polyfill 자바스크립트 개발자는 X를 통해 최신 브라우저에는 polyfill이 필요하지 않으므로 사용하지 않을 것을 권고했다.
또한, Fastly와 Cloudflare는 polyfill.io 서비스를 대체할 수 있는 독자적인 인스턴스를 제공하기 시작했다. 6월 25일 기준으로 구글은 polyfill.io를 사용하는 전자 상거래 사이트의 구글 광고를 차단하기 시작했다.
Polyfill.io
polyfill.io(polyfill.js)는 앤드류 배츠(Andrew Betts)가 개발한 자바스크립트 라이브러리이다. 이를 사용하면, 구형 브라우저에서도 최신 브라우저에서 제공하는 기능을 사용할 수 있다. 개발 과정에서 웹 브라우저 버전 간 기능 차이로 인해 발생할 수 있는 문제점들을 해소할 수 있기에, 웹 애플리케이션의 접근성과 호환성을 크게 향상시킨다. 때문에 많은 웹 개발자들에 의해 사용되며, 현재 10만 개 이상의 사이트가 polyfill.js를 사용하는 것으로 파악된다.
악성 코드는 cdn.polyfill.io에서 제공하는 스크립트에 포함되어 있으며 사용자가 이 웹사이트를 방문하면 악성코드가 실행되어 데이터 도난 및 악성 사이트로의 리다이렉션과 같은 피해가 발생할 수 있다.
Polyfill 공급망 공격에 사용된 악성코드의 기능 및 목적
Polyfill 공급망 공격에 사용된 악성코드는 동적 페이로드 생성을 활용하여 HTTP 헤더를 기반으로 사용자 지정 악성 콘텐츠를 생성한다. 악성코드의 발견을 어렵게 하기위해 다음과 같은 회피 기술을 사용한다. 관리자나 웹 분석 서비스의 존재를 감지하면 실행하지 않고 지연 실행을 사용하여 즉각적인 보안 검사에 탐지될 가능성을 줄인다. 그리고 악성 페이로드 전체가 난독화되어 기능 분석을 어렵게 만들었다.
악성코드는 가짜 Google Analytics 스크립트가 도입되어 악성 링크가 포함된 변조된 자바스크립트 파일을 받으며, 변조된 스크립트에는 악성 사이트로 리다이렉션하는 기능이 있다.
현재까지 알려진 악성 코드의 동작은 주로 악성 사이트로 리다이렉션하는 것이지만 자바스크립트의 특성상 공격할 수 있는 기능은 언제든 진화할 수 있다. 잠재적인 위협으로는 온라인 양식의 데이터를 가로챌 수 있는 폼재킹, 사용자를 속여 위장된 요소를 클릭하게 하는 클릭재킹, 그리고 사용자 정보를 수집 및 유출하는 데이터 도난 등이 있다.
웹 속성에서 “cdn.polyfill.io” 제거하는 방법
1단계 : 사용 현황 파악
- 개발자는 코드 검색 도구 또는 IDE를 사용하여 조직 내 모든 프로젝트의 소스 코드에서 cdn.polyfill.io의 인스턴스를 검색하여 사용 현황을 파악한다.
2단계 : 안전한 버전으로 패치
- Fastly는 Funnull에 판매되기 전에 코드의 스냅샷을 찍어 "https://polyfill-fastly.io”에서 호스팅하고 있다. 로컬로 다운로드하여 직접 호스팅할 수 있을 때까지 이 원격 호스트 사용 권장한다.
- 개발자는 polyfill.js 파일을 로컬로 다운로드하여 취약점을 검사한 후 내부 시스템에서 호스팅해야 한다.
-