본문 바로가기

POST/Tech

Cloudflare의 CDN 전체, 수백만개의 웹사이트가 npm 패키지 하나로 다운되는 사태 발생

This npm Package Could Have Brought Down Cloudflare’s Entire CDN and Millions of Websites
원문보기

클라우드플래어(Cloudflare)는 자사의 오픈소스 컨텐츠 전송 네트워크인 CDNJS에 대하여 심각한 취약성에 대한 패치작업을 하였습니다. 이 이슈는 광범위한 범위의 공급망에 보안, 무결성및 가용성을 위협하였습니다. 인터넷의 약 12.7%를 차지하는 수 백만개의 웹사이트가 CDNJS 서비스를 사용해서 많이 사용되는 자바스크립트와 CSS 라이브러리를 전송하고 있습니다.

 

오늘 작성한 보고서에서 보듯이, 보안 연구원 RyotaK는 임의로 생성한 npm 패키지를 Path Traversal 또는 “짚 슬립(ZipSlip)” 악용을 통해 클라우드플래어의 자바스크립트 컨텐츠 전송 네트워크에 코드를 원격으로심을 수 있다는 것을 발견하였습니다. 보안연구원은 CDNJS 가 제공하는 어떤 라이브러리라도 공격자가 변경하거나 공급망 공격을 통해 CDN인프라 전체를 다운시킬 수 있는 방법을 보여주었습니다. RyotaK 가 사용한 npm 패키지는 hey-sven 이라 불리며 소나타입(Sonatype)에서 sonatype-2021-0829 하에 추적되어왔습니다. 소나타입은 이미 2018년에 ZipSlip 취약성에 대해 이야기했었고, 올해에도 또 다시 보안 연구원 후안 아귀레 (Juan Aguirre) 의 분석에서 이 주제 다루었습니다. 이 취약성은 깃허브(GitHub)나 npm을 통해 CDNJS에 신규 라이브러리를 퍼블리싱 하려는 누구나 악용할 수 있습니다. ‍

Path Traversal 악용을 통해 CDN에 신규 라이브러리 추가하기

클라우드플래어의 CDNJS의 경우, 클라우드플래어의 깃허브 리포지토리에 패키지를 제출함으로써 누구나 CDN에 신규패키지 추가를 요청할 수 있습니다:

CDNJS검색 페이지에서 네트워크에 아직 존재하지 않는 신규 라이브러리를 추가하는 방법에 대한 결과

그러나, 새로 퍼블리싱된 이 라이브러리의 작성자는 npm 레지스트리에 다음 버전의 라이브러리를 릴리스 할 수 있도록 선택할 수 있습니다. 그리고 이것이 CDNJS의 봇들에 의해 자동으로 불러들어 오게 됩니다. 예를 들어, RyotaK는 먼저 CDN의 깃허브 리포에 라이브러리를 제출함으로써 CDNJS에 “hey-sven”테스트 라이브러리를 성공적으로 퍼블리싱할 수 있었고 해당 npm 계정에 이후 버전을 릴리스 할 수 있었습니다.

소나타입 보안 연구팀이 확인했듯이, “hey-sven”의 버전1.0.1 과 1.0.2 은 npm이 포함된 proof-of-concept Bash 공격에서 나타났습니다.

 

이 Bash 스크립트가 궁금하신 분들을 위해 소나타입 보안 연구원 세바스티안 카스트로가 살펴보았는데 다음과 같은 텍스트를 발견했습니다:

Bash 스크립트의 내용 (Sonatype)

‍이것은 RyotaK 가 알려준 바에 따르면, 이것은 PoC(Proof of Concept) 패키지로 그가 이미 클라우드플래어에 대비하도록 전달한 것이었습니다. 만약을 대비하여, 연구원은 CDN의 API 키가 공개된 기능적인 침해에 대해서는 아직 공개하지 않고 있습니다.

해당 취약성은 다음과 같이 실행됩니다:

CDNJS가 npm으로부터 신규 릴리스를 불러오는 즉시 자동 봇들이 신규 버전의 라이브러리를 압축풀기하여 npm패키지로 퍼블리싱합니다. 이는 npm패키지가 실제로는 TAR.GZ 아카이브이기 때문입니다. 결론적으로 서버에 Path Traversal 혹은 Zip Slip 취약점이 존재한다면 공격자는 기존 파일을 읽거나 덮어쓰기 할 수 있습니다. RyotaK의 PoC 패키지가 CDNJS의 자동봇에 의해 npm으로부터 호출 되자마자 CDN은 보안 API 키를 스크립트가 제공되어야 하는 URL에 누설해버렸습니다.

 

https://cdnjs.cloudflare.com/...(complete URL redacted). 

최초 PoC 결과는 secretkeys를 연구원에게 제공함 Source: BleepingComputer

 

1. 이 공격으로 얻은 GITHUB_REPO_API_KEY는 “쓰기” 권한이 함께 있는데, 공격자가 CDNJS 상의 모든 라이브러리나 CDN의 전체 웹사이트를 가상 침해하는데 사용 가능합니다.  

2. WORKERS_KV_API_TOKEN 시크릿을 얻게 되면 클라우드플래어 워커의 캐시에 있는 모든 라이브러리를 퍼지(Purge)하거나 변경할 수 있습니다.‍

연구원의 설명에 따르면 “이 권한을 조합하면 CDNJS의 핵심 영역, 예를 들면 CDNJS의 원천 데이터, KV 캐시 및 심지어 CDNJS 웹사이트까지도 완전히 침해 당할 수 있다” 고 했습니다.‍

잠재적 소프트웨어 공급망 공격 예방(차단)

RyotaK는 4월 클라우드플래어에 해당 취약점을 보고했고 몇주간 보안팀과 함께 작업을 했습니다.

이런 대비가 CDNJS의 생태계와 광범위한 소프트웨어 공급망의 안전을 지키는데 도움이 되었습니다.

그럼에도 불구하고, 수 백만 개의 웹사이트에서 사용되는 수 천개의 공용 라이브러리가 호스팅되고 있는 CDN은 여전히 매력적인 공격대상입니다. 단 한개의 많이 사용되는 라이브러리가 악성 공격에 당하게 된다면 공격자에게는 매우 큰 보상이 따르고 CDN사용자에게는 심각한 문제가 생기게 됩니다. 예를 들어, 2019년 볼루션(Volusion)의 CDN침해는 이 네트워크를 사용하는 수 천개의 이커머스 웹사이트가 메가카트 공급망 공격을 당하도록 하였습니다.

최근에 있었던 공격 역시 수십년 된 취약성이나 Path Traversal 혹은 ZipSlip 같은 악용이 다시 등장할 수 있다는 것을 잘 보여줍니다. 악의적인 공격자의 손을 통해 상상할 수 없는 결과를 초래할 수 있습니다. 오픈소스의 사용은 계속해서 증가하고 있습니다. 기업들이 오픈소스 소프트웨어를 자사의 제품과 널리 사용하는 컴포넌트에 더 많이 적용할 수록공격도 늘어날 것입니다.

 

Tags: vulnerabilities, featured, Industry commentary, Nexus IntelligenceInsights‍

‍작성자: Ax Sharma

영국 정부에 의해 기술분야의 돋보적인 탈랜트 (주목할 만한 리더)에 선정되었고, Sonatype의 보안 연구원이자 배움에 대한 열정을 가진 엔지니어입니다. Ax Sharma의 연구와전문 분석은 포춘, The Register, TechRepublic, CSO Online, Bleeping Computer 등 선도적인 미디어에서 자주 인용되고 있습니다. Ax Sharma는 보안취약성 연구와 리버스 엔지니어링, 소프트웨어개발 분야의 전문가입니다. 업무시간외에는 윤리적인 방법으로 취약성을 탐구하고 대중의 교육에 시간을 보내고 있습니다.‍‍