연구원들은 현재 패치된 Apache Cassandra 오픈 소스 NoSQL 분산 데이터베이스 의 심각도가 높은 보안 버그에 대한 세부 정보를 공유했습니다. 이 버그는 악용하기 쉽고 패치가 적용되지 않은 경우 공격자가 원격 코드 실행(RCE)을 얻을 수 있습니다.
Cassandra가 사용자 정의 데이터 처리를 수행하기 위해 사용자 정의 함수(UDF)를 생성하는 방법과 관련된 버그는 CVE-2021-44521 로 추적되며 높은 심각도 등급은 8.4입니다.
취약점은 JFrog의 보안 연구 팀에 의해 발견되었습니다. 화요일 글 에서 JFrog 보안 연구원 Omer Kaspi는 단점에 대해 단점에 취약한 유일한 Cassandra 시스템은 특정, 비표준, 특히 권장되지 않는 구성을 가진 시스템이라고 말했습니다.
단점은 악용하기 쉽다는 것입니다. JFrog는 이미 개념 증명(PoC) 악용을 만들었습니다. 또 다른 단점: 이 데이터베이스는 어디에나 있습니다.
Kaspi는 자신의 글에서 "이 Apache 보안 취약점은 악용하기 쉽고 시스템에 큰 피해를 줄 수 있지만 운 좋게도 기본이 아닌 Cassandra 구성에서만 나타납니다.
카산드라는 정확히 무엇이며 어디에 있습니까?
Cassandra는 이러한 데이터베이스에 단일 실패 지점이 없다는 점을 감안할 때 효율적이고 가용성이 높은 것으로 알려진 확장성이 뛰어나고 널리 사용되는 분산 데이터베이스입니다. 데이터를 손실하거나 시스템 다운타임을 견딜 수 없는 기업에 큰 장점입니다. 또한 읽기 효율성을 저하시키지 않으면서 엄청난 양의 데이터를 빠르게 쓰기와 함께 여러 서버에서 방대한 양의 데이터를 처리할 수 있는 것으로도 알려져 있습니다.
Kaspi는 "Cassandra는 확장성이 뛰어난 분산 NoSQL 데이터베이스로, 분산 특성의 이점으로 인해 매우 인기가 있습니다."라고 말했습니다.
따라서 Netflix, Twitter, Urban Airship, Constant Contact, Reddit, Cisco, OpenX, Digg, CloudKick, Ooyala 등을 포함하여 크고 유명한 기업에서 사용하고 있다고 Kaspi는 말했습니다. 연구원은 Cassandra가 " CNCF [클라우드 네이티브 컴퓨팅 재단] 프로젝트(예: Jaeger ) 의 지원에서 알 수 있듯이" DevOps 및 클라우드 네이티브 개발 서클에서도 매우 인기가 있다고 덧붙였습니다.
(Jaeger는 복잡한 분산 시스템에서 트랜잭션을 모니터링하고 문제를 해결하도록 설계된 오픈 소스, 종단 간 분산 추적 플랫폼입니다.)
Kaspi는 "일부 회사는 DataStax (서버리스, 다중 클라우드 DBaaS) 와 같이 Cassandra 기반의 클라우드 기반 턴키 솔루션을 제공하기까지 합니다 ."라고 지적했습니다.
위험을 파헤치는 것은 왕의 고통이 될 것입니다.
카산드라의 인기를 감안할 때 이 결함을 악용하려면 기본이 아닌 사용자 구성 설정이 필요하다는 사실이 그다지 위안이 되지 않을 수 있다고 보안 전문가들이 Threatpost에 말했습니다.
디지털 IT 및 보안 운영 회사인 Netenrich의 수석 위협 헌터인 John Bambinek은 수요일 Threatpost에 기본 설정이 아닌 설정이 "전 세계의 많은 애플리케이션에서 일반적"이라고 의심한다고 말했습니다.
상황은 Log4j 만큼 나빠 보이지는 않지만 여전히 잠재적으로 널리 퍼질 수 있으며 취약한 설치를 파헤치는 일이 일이 될 것이라고 Bambinek이 이메일을 통해 말했습니다. "불행히도 얼마나 많은 설치가 취약한지 정확히 알 수 있는 방법이 없으며 자동화된 취약성 스캐너가 놓칠 수 있는 일종의 취약성일 것입니다."라고 그는 말했습니다. "기업은 모든 Cassandra 인스턴스의 구성 파일로 이동하여 위험이 무엇인지 결정해야 합니다."
코드 보안 솔루션 제공업체 BluBracket의 제품 및 개발자 관계 책임자인 Casey Bisson은 Threatpost에 이 문제는 "매우 심각한 결과를 초래할 수 있는 광범위한 영향"이 있을 수 있다고 말했습니다. 취약한 구성."
Bisson은 또 다른 잠재적 위험을 제안했습니다. 위협 행위자가 데이터베이스 인스턴스의 구성에 대한 쓰기 액세스 권한을 얻으면 운영자가 알지 못하는 사이에 취약점을 활성화할 수 있습니다.
문제의 핵심: JavaScript의 Nashorn 엔진 사용
사용자 지정 데이터 처리를 위한 UDF 생성과 관련하여 Cassandra는 기본적으로 Java 및 JavaScript로 UDF를 작성할 수 있습니다. JavaScript로 작성될 때 Cassandra는 JRE(Java Runtime Environment)에서 Nashorn 엔진을 사용합니다. 이 엔진은 JVM(Java Virtual Machine) 위에서 실행되는 JavaScript 엔진입니다.
여기에 문제가 있습니다. “Nashorn은 신뢰할 수 없는 코드를 수락할 때 보안이 보장되지 않습니다. 따라서 이러한 동작을 허용하는 모든 서비스는 항상 샌드박스에서 Nashorn 실행을 래핑해야 합니다. "예를 들어 다음 Nashorn JavaScript 코드를 실행하면 임의의 쉘 명령인 java.lang.Runtime.getRuntime().exec("touch hacked")를 실행할 수 있습니다.
NashornEscape와 같은 일부 프로젝트는 Nashorn 코드 실행을 보호하기 위해 샌드박스를 구현한다고 Kaspi는 설명했습니다.
“Nashorn 엔진은 Java.type을 사용하여 임의의 Java 클래스에 대한 액세스를 제공합니다. 예를 들면 다음과 같습니다. var System = Java.type("java.lang.System")을 사용하면 System 변수를 사용하여 java.lang.System 패키지에 액세스할 수 있습니다."라고 그는 말했습니다.
충분한 권한이 있는 사용자는 함수 생성 쿼리를 사용하여 임의의 함수를 생성할 수 있습니다.
Cassandra UDF 샌드박스 구현을 연구하는 동안 연구원들은 특정(기본값이 아닌) 구성 옵션을 혼합하여 Nashorn 엔진을 남용하고 샌드박스를 탈출하여 RCE(CVE-2021-44521로 보고된 취약점)를 달성할 수 있다는 것을 깨달았습니다.
완화 및 수정
JFrog는 모든 Apache Cassandra 사용자 가 버그를 해결하는 다음 버전 중 하나로 업그레이드 할 것을 적극 권장합니다.
- 3.0.x 사용자는 3.0.26으로 업그레이드해야 합니다.
- 3.11.x 사용자는 3.11.12로 업그레이드해야 합니다.
- 4.0.x 사용자는 4.0.2로 업그레이드해야 합니다.
인스턴스를 업데이트할 수 없는 사용자를 위해 JFrog는 다음과 같은 완화 방법을 권장합니다.
- UDF가 활발히 사용되지 않는 경우 enable_user_defined_functions를 false(기본값)로 설정하여 완전히 비활성화할 수 있습니다.
- UDF가 필요한 경우 enable_user_defined_functions_threads를 true(기본값)로 설정합니다.
- ALL FUNCTIONS, ALL FUNCTIONS IN KEYSPACE 및 FUNCTION for CREATE, ALTER 및 EXECUTE 쿼리 권한을 제거하여 신뢰할 수 없는 사용자에 대한 기능 생성, 변경 및 실행 권한을 제거합니다.