최근 문제가 되고 있는 libwebp 및 libvpx 취약점에 대한 가이드
배경
지난 몇 주 동안 Google은 CVE-2023-4863 및 CVE-2023-5217에대한 수정이 포함된 Google Chrome 업데이트를 배포했습니다. 두 취약점 모두 실제로 악용되는 제로데이 취약점으로 발견되었으며, CVE 항목이 업데이트되어 Google Chrome뿐만 아니라 기본 라이브러리인 libwebp 및 libvpx까지 범위가 확대되었습니다. 두 CVE는 모두 CISA의 잘 알려진 악용 취약점 카탈로그에 나와 있습니다.
이 블로그 게시물에서는 두 취약점에 대한 세부 정보를 공유하고 네트워크에서 취약한 애플리케이션을 탐지하는 방법에 대한 권장 사항을 제공합니다. 이러한 취약점은 리서치가 계속 진행되고 있으므로 향후 추가 인사이트와 가이드를 통해 게시물이 업데이트될 수 있습니다.
CVE-2023-4863 — libwebp
이 취약점은 Apple의 SEAR(Security Engineering and Architecture) 팀과 The Citizen Lab에서 보고했습니다. 이 보고서에서 연구원들은 이 취약점을 NSO Group의 iPhone용 제로 클릭 제로 데이 악용인 BLASTPASS 공격과 연관짓고 있습니다.
취약점 자체는 무손실 형식의 웹 이미지를 디코딩하는 과정에서 발생하는 libwebp의 힙 오버플로입니다. 벤 호크스(Ben Hawkes)는 이 취약점에 대해 매우 상세한 기술 분석을 작성했습니다.
libwebp는 WebP 형식(Google에서 개발)의 이미지를 인코딩하고 디코딩하기 위해 Google에서 개발한 라이브러리입니다. 이 취약점은 Huffman 테이블을사용하는 라이브러리가 무손실 압축으로 이미지를 구문 분석하는 데 있습니다. 기본적으로 공격자는 테이블을 조작해 라이브러리가 테이블에 실제 크기보다 적은 메모리를 할당하도록 만들 수 있으며, 이로 인해 힙 오버플로와 범위 외 쓰기가 발생합니다.
이러한 결과를 얻을 수 있는 방법과 구성은 다양하기 때문에 모든 것을 규정할 수 있는 PoC(Proof of Concept)는 없지만, 악용 구현의 예는 @mistymntncop의 PoC를 확인할 수 있습니다.
CVE-2023-5217 — libvpx
이 취약점은 Google 위협 분석 그룹의 클레멘트 르킨(Clément Lecigne)이 발견했습니다. 이 취약점은 방범 제품 벤더사에서도 사용되었습니다.
libvpx는 WebP 프로젝트의 일부이기도 합니다. 이 라이브러리는 특히 비디오 인코딩 및 디코딩을 위한 VP8 및 VP9 형식을 다룹니다. 이 취약점에 대한 세부 정보는 많지 않지만 힙 손상 취약점으로도 알려져 있습니다.
무엇이 취약한가요?
처음에는 취약점이 Chrome에 있었기 때문에 브라우저만 취약한 것으로 보고되었습니다. 하지만 취약점이 기본 라이브러리인 libwebp와 libvpx에 있기 때문에 영향 범위가 훨씬 더 광범위합니다. 0.5.0~1.3.1의 libwebp 버전을 사용하는 애플리케이션과 1.13.1 이전의 libvpx 버전을 사용하는 애플리케이션이 영향을 받습니다.
공개적으로 사용 가능한 보고서를 기반으로 두 라이브러리 중 하나에 의존하는 애플리케이션 목록을 작성했습니다. 또한 Insight 쿼리를통해 탐지된 라이브러리를 사용하는 프로그램도 포함했습니다. 하지만 반드시 취약해지는 것은 아닙니다.
프로그램이 취약하려면 libwebp의 WebP 무손실 기능이나 libvpx가 포함된 V8 또는 V9 코덱을 사용해야 합니다. 이러한 라이브러리는 완전히 다른 기능에 사용될 수 있기 때문에 이러한 라이브러리를 사용한다고 해서 항상 취약한 것은 아닙니다.
Akamai는 웹 브라우저에서 이러한 기능을 사용하는 것을 알고 있지만, 다른 프로그램에서 이러한 기능을 사용하는지 여부는 벤더사의 재량에 의존하고 있습니다. 영향받는 라이브러리를 사용하는 것으로 확인된 브라우저와 기타 애플리케이션은 다음과 같습니다.
- Fedora (37–39)
- Debian (10–12)
- Google Chrome
- Firefox
- Microsoft Edge
- Opera
- Tor
- Brave
- Vivaldi
- Telegram
- Discord
- 1Password에
- Electron
- GIMP
- Slack
- LibreOffice
- Skype
- Grafana
- KeePassXC
- VLC
또한 익명의 사용자가 Ubuntu의 패키지 리포지토리를 분석해 libvpx7에 의존하는 모든 패키지 목록을 업로드했습니다 .
취약점 노출 - OSquery
라이브러리는 다양한 곳에서 찾을 수 있고 제품을 업데이트하는 것은 소프트웨어 벤더사의 몫이므로 네트워크에 있는 머신의 취약점 범위와 노출 비율을 탐지하는 것이 중요합니다. 이를 지원하기 위해 몇 가지 OSquery 쿼리를 개발했습니다. Akamai Guardicore Segmentation 고객은 Insight 기능을 사용해 네트워크 전반에서 이러한 쿼리를 실행할 수 있습니다.
메모리에 로드된 libweb 및 libvpx
라이브러리는 모든 애플리케이션과 함께 제공될 수 있으므로 하드 드라이브에서 라이브러리를 찾는 것은 불가능합니다. 대신, 실행 중인 각 프로세스에서 로드된 모듈(DLL 또는 SO 파일)을 OS쿼리 테이블 process_memory_map을 을 사용해 확인하고 파일 테이블을 이용해 버전을 얻을 수 있습니다.
버전 메타데이터는 컴파일 과정 중에 추가되고, 버전 메타데이터가 없어도 라이브러리를 컴파일할 수 있으므로 반드시 사용할 수 있는 것은 아닙니다. 벤더사가 자체 소프트웨어 버전을 대신 첨부할 수 있기 때문에, 버전 메타데이터를 사용할 수 있는 경우에도 이것이 정확하지는 않을 수 있습니다. 오탐을 피하려면 사용자의 신중한 판단이 필요합니다.
SELECT DISTINCT
procs.name AS process_name,
pmm.path AS lib_path,
file.file_version,
CASE
WHEN file_version = '' THEN 'unknown version, potentially vulnerable'
WHEN pmm.path LIKE '%libwebp%' AND file_version < '1.3.2' THEN 'vulnerable version'
WHEN pmm.path LIKE '%libwebp%' AND file_version >= '1.3.2' THEN 'not vulnerable version'
WHEN pmm.path LIKE '%libvpx%' AND file_version <= '1.13.1' THEN 'vulnerable version'
WHEN pmm.path LIKE '%libvpx%' AND file_version > '1.13.1' THEN 'not vulnerable version'
ELSE 'unknown version, potentially vulnerable'
END is_vulnerable
FROM process_memory_map AS pmm
JOIN processes AS procs USING(pid)
JOIN FILE ON file.path = pmm.path
WHERE pmm.path LIKE '%libwebp%' OR pmm.path LIKE '%libvpx%'
웹 브라우저 찾기
CVE에 대한 초기 보고서와 사용 사례는 Chromium에서 나왔기 때문에 설치된 브라우저를 탐지하는 쿼리를 포함했습니다. 이 쿼리는 네트워크에서 브라우저를 실행하는 자산을 찾는 데 도움이 될 수 있으며 추가 조사가 필요할 수 있습니다. 그런 다음 설치된 버전을 NVD (National Vulnerability Database)의 취약한 브라우저 버전 목록과 비교할 수 있습니다.
SELECT name, version FROM programs
WHERE LOWER(name) LIKE "%chrome%"
OR LOWER(name) LIKE "%firefox%"
OR LOWER(name) LIKE "%microsoft edge%"
OR LOWER(name) LIKE "%thunderbird%"
OR LOWER(name) LIKE "%brave%"
OR LOWER(name) LIKE "%opera%"
설치된 프로그램 찾기
위 목록에 있는 프로그램 중 하나가 설치되어 있는지 확인하려면 다음 쿼리를 사용해 <program_name을실제 프로그램 이름으로 바꾸면 됩니다.
SELECT name, version FROM programs
WHERE name LIKE "%<program_name>%"
방어
취약한 애플리케이션 및 자산 매핑
이 블로그 게시물에 제공된 애플리케이션 목록과 Osquery 쿼리를 사용해 네트워크에서 잠재적으로 취약할 수 있는 애플리케이션을 매핑하고 잠재적으로 취약한 자산 목록을 도출할 수 있습니다.
Akamai Hunt 고객은 취약점에 대한 환경 노출을 자세히 설명하는 보고서를 받았습니다. Hunt 보고서는 이 블로그 게시물에 있는 것과 유사한 쿼리를 기반으로 작성되었으며, 사고 발생 후 몇 시간 이내에 전송되었습니다. 이 쿼리는 전 세계에서 수천 개의 취약한 자산을 탐지했습니다.
패치 적용
애플리케이션이 취약한지 평가할 때 고려하는 매개변수는 여러 가지입니다. 어떤 버전의 libwebp 또는 libvpx를 로드하는가? 애플리케이션이 WebP 무손실 압축 또는 VP8/VP9 코덱을 사용하는가? 다양한 조합이 가능하기 때문에 많은 애플리케이션이 악용에 취약하며, 그 영향은 엄청날 수 있습니다.
안타깝게도 이 취약점을 방어하는 패치는 아직 없습니다. 또한 패치는 소프트웨어 벤더사가 프로그램에 대한 관련 패치를 릴리스하는 데 의존하므로 시간이 걸릴 수 있습니다. 기업은 시간이 지남에 따라 어떤 워크로드가 취약하고 패치가 적용되지 않은 상태인지 평가해야 합니다.
위협 알림 민감도
영향을 받는 모든 프로그램에 대한 패치가 아직 제공되지 않을 수 있으므로 잠재적으로 취약하고 패치가 적용되지 않은 워크로드에 대한 알림 민감도를 높이는 것이 현명할 수 있습니다. 이렇게 하면 취약점이 악용되어 탐지되지 않더라도 그 후유증에 대해 어느 정도 인지할 수 있습니다.
그러나 이는 알림 피로를 증가시킬 수 있습니다. 따라서 영향을 받는 워크로드의 네트워크에 대한 중요도나 영향에 따라 알림 민감도를 조정하는 것이 좋습니다.
요약
이 블로그 게시물에서는 실제로 악용된 libwebp 및 libvpx의 치명적인 취약점에 대해 이용 가능한 정보를 검토했습니다.
보안팀 직원의 경우 네트워크에 있는 워크로드의 취약점을 파악해야 합니다. Akamai는 해당 라이브러리를 사용하는 프로그램을 탐지할 수 있는 OSquery 쿼리를 제공함으로써 도움을 드리고자 했습니다. 또한 패치를 사용할 수 없는 경우 일부 리스크를 방어하기 위해 해야 할 일(예: 위협 알림 민감도 조정)에 대해서도 논의했습니다.
본 블로그 게시물에서는 이용 가능한 정보를 바탕으로 현재 파악된 정보와 권장 사항을 대략적으로 살펴봤습니다. Akamai의 검토는 지속적으로 수행되므로 이곳의 모든 정보는 변경될 수 있습니다. 또한 Twitter 계정을 방문해 실시간 업데이트를 확인할 수 있습니다.