본문 바로가기
사이버 안전

R 프로그래밍 버그가 기업들을 거대한 공급망 위험에 노출시키다

by renesuno 2024. 5. 1.
반응형

R의 보안 취약점, CVE-2024-27322은 직렬화 프로세스에서의 취약점으로 특별히 제작된 파일을 통해 공격자가 대상 환경에서 임의의 코드를 실행할 수 있는 방법을 제공한다. 인기 있는 오픈 소스 언어를 사용하는 조직들을 소프트웨어 공급망을 통한 공격에 노출시킬 수 있는 높은 심각도의 취약점이다.

 

Credit: Flickr


CVE-2024-27322로 지정된 이 취약점은 CVSS 취약점 심각도 점수가 10점 만점에 8.8점으로 평가되며, JSON, XML 및 이진과 같은 형식으로 인코딩 된 객체를 다시 원래의 형태로 변환하여 응용 프로그램이나 프로그램에서 사용하기 위한 R의 데이터 직렬화 프로세스와 관련이 있다.


R은 통계 계산 및 그래픽 응용 프로그램에서 상대적으로 널리 사용되는 언어다. 금융 서비스, 의료, 연구, 정부 및 대용량 데이터셋이 포함된 환경과 같은 분야에서 개발자들 사이에서 인기가 있다. 가장 인기 있는 R 패키지 저장소인 Comprehensive R Archive Network (CRAN)은 현재 20,000개 이상의 패키지를 호스팅 하고 있으며, R 패키지 개발 도구를 제공하는 사이트인 R-Forge는 15,800명 이상의 등록된 회원과 2,146개 이상의 프로젝트를 호스팅 하고 있다.

 

Credit: Wikimedia Commons


직렬화 문제

HiddenLayer의 연구원들은 공격자가 특별히 제작된 R 데이터 직렬화 (RDS) 파일을 통해 피해 환경에서 임의의 코드를 실행할 수 있는 R의 프로세스에서 취약점을 발견했다. 프로그래머들은 RDS 파일을 통해 R에서 객체를 저장하거나 미래 사용을 위해 또는 다른 사람들과 공유하기 위해 일반적으로 사용한다.


"이 취약점은 개발자들과 데이터 과학자들 사이에서 공유되는 RDS 파일이나 R 패키지의 로딩을 통해 악용될 수 있습니다,"라고 HiddenLayer 연구원인 Kasimir Schulz와 Kieran Evans는 이번 주 보고서에서 말했다. "공격자는 특별히 제작된 악성 RDS 파일이나 임의의 R 코드가 포함된 R 패키지를 생성하여 상호 작용 시 피해자의 대상 장치에서 실행될 수 있습니다,"라고 보고서에는 명시되어 있다.


R의 lazy evaluation 및 promise 객체

HiddenLayer에서 발견한 R의 취약점은 "lazy evaluation" 및 "promise 객체"라는 두 가지 기본 개념과 관련이 있다. Lazy evaluation은 R 프로그램이 표현식이나 변수를 필요할 때까지 또는 직접 액세스될 때까지 평가하지 않는 프로그래밍 기술이다. 목표는 필요하지 않은 표현식에 대한 계산을 피함으로써 성능을 향상시키는 것이다. Promise 객체는 lazy evaluation과 밀접한 관련이 있으며 평가가 지연된 객체를 나타낸다.


HiddenLayer의 연구원들이 발견한 것은 promise 객체를 생성하고, 해당 객체가 RDS 파일 직렬화 중에 액세스될 때 선택한 코드를 실행할 수 있도록 페이로드를 설정하는 방법이다.


"R 패키지는 데이터를 저장하고 로드하기 위해 RDS 형식을 활용합니다,"라고 HiddenLayer는 설명한다. 이 과정을 돕는 두 파일은 패키지에 포함될 모든 직렬화된 객체를 포함하는 .rdb 파일과 각 객체에 대한 메타데이터를 포함하는 .rdx 파일이다.

"패키지가 로드될 때 .rdx 파일 내의 RDS 형식에 저장된 메타데이터를 사용하여 .rdb 파일 내의 객체를 찾습니다,"라고 분석했다. .rdb 파일 내의 객체는 그 후에 직렬화된다.

"공격자는 임의의 코드가 포함된 특수하게 제작된 promise 객체를 포함하는 RDS 파일을 생성하여 이를 악용할 수 있습니다," Schulz는 Dark Reading에 전했다. "R이 lazy evaluation을 어떻게 구현했는지에 따라, 포함된 임의의 코드는 사용자가 악성 파일이나 패키지를 로드한 후에 실행될 것이다." 공격자는 CRAN과 같은 R 저장소에 무장한 패키지를 상대적으로 쉽게 추가할 수 있으며, 그저 경각심이 부족한 사용자가 해당 패키지를 로드할 때까지 기다리면 된다고 한다.


잠재적으로 광범위한 공격 표면: 다중 감염 소스

R 개발자들이 패키지를 공유하고 다운로드하는 데에 사용하는 주요 허브가 많이 있다. Bioconductor와 같은 이러한 중요한 허브들은 개발자들에게 수천 개의 패키지에 대한 액세스를 제공할 뿐 아니라, Schulz에 따르면 42백만 회 이상 다운로드된 Bioconductor와 같은 몇몇 허브들이 정기적으로 사용된다. "누군가가 이 취약점을 이용하고 R 패키지의 거대한 오픈 소스 공간을 이용하기만 하면 수천 명의 하류 사용자에게 영향을 미칠 수 있는 잠재적으로 거대한 공급망 공격을 수행할 수 있습니다," 그는 말한다.

 

Schulz는 기업/기관이 위험을 완화하기 위해 최신 버전의 R로 이동할 것을 권장한다. 또한 기업/기관은 R 사용자들이 이러한 유형의 현재 및 잠재적 미래의 취약점을 인식하고 알려지지 않은 신뢰할 수 없는 파일 및 패키지를 사용하지 않도록 하는 정책을 시행해야 한다고 말했다. 

 

 

 

출처: Jai Vijayan | Dark Reading (2024년 4월 30일)

반응형