[보안뉴스 문가용 기자] 널리 사용되는 자바스크립트 샌드박스인 vm2에서 초고위험도 원격 코드 실행 취약점이 발견됐다. CVSS 기준 10점 만점을 받았을 정도로 심각한 취약점이라고 한다. 익스플로잇에 성공할 경우 공격자들은 샌드박스를 탈출해 호스팅 기계 상에서 셸 명령어를 실행시킬 수 있게 된다. 보안 업체 옥스아이(Oxeye)가 발견했으며, 이 취약점에 샌드브레이크(Sandbreak)라는 이름을 붙였다. 참고로 vm2는 매달 최소 1600만 회 다운로드 된다.

[이미지 = utoimage]
옥스아이의 수석 아키텍트인 유발 오스트로브스키(Yuval Ostrovsky)와 수석 연구원인 갈 골드슈타인(Gal Goldshtein)은 블로그를 통해 “CVSS 점수도 10점인데다가 vm2 샌드박스 자체의 인기가 매우 높다는 점 때문에라도 이 취약점은 그 자체로 비상사태”라고 썼다.
옥스아이가 이 취약점을 발견한 건 8월 16일, vm2 개발자에게 알린 건 그로부터 이틀 후의 일이었다. 8월 28일 이 취약점에는 CVE-2022-36067이라는 번호가 붙고, 10점 만점에 10점이라는 점수까지도 받았다. vm2 담당자들도 대응에 서둘렀다. 3.9.11 버전을 내놓으며 문제를 해결한 것이다. vm2를 사용하는 모든 사람들은 서둘러 3.9.11 버전으로 업그레이드 할 것이 권고되고 있다.
샌드박스 : 언제나 듬직한
모든 샌드박스 솔루션들이 그렇지만 vm2 역시 애플리케이션들이 안전하게 실행될 수 있는 가상의 환경을 만들어 준다. 여기서 애플리케이션이 실행되면 가상 환경이 호스팅된 실제 컴퓨터 시스템에는 아무런 영향을 미치지 않는다. 따라서 애플리케이션의 출처가 의심되거나 불분명할 때 확실히 안전을 도모할 수 있는 방법이 된다. 소프트웨어 개발자들은 샌드박스에서 자신들이 만든 프로그램을 실행시키면서 여러 가지 실험을 안전하게 진행한다.
보안 업계는 물론 개발자들 사이에서도 샌드박스는 널리 사용되며, 전폭적인 신뢰를 받는다. 그렇기 때문에 샌드브레이크와 같은 취약점은 특히나 치명적으로 작용할 수 있다. “샌드박스는 존재 자체가 안전이라는 말과 동급으로 취급됩니다. 일반적으로는 샌드박스 그 자체를 의심하지 않죠. 그러한 깊은 신뢰 자체를 파고들 때 보통은 큰 사고가 발생합니다.”
기술적 분석과 대처의 흔적
샌드브레이크는 vm2 버그 리포터 기능에 존재한다. 이를 통해 Node.js의 오류를 유발시킬 수 있게 되며, 이를 반복적으로 수행함으로써 오류의 호출 스택을 임의로 쌓을 수 있게 된다. 이러한 행위를 통해 샌드박스를 탈출할 수 있게 되는 것이라고 연구원들은 설명한다. “일련의 절차를 통해 샌드박스 바깥에 콜사이트(CallSite)라는 객체를 만드는 데 성공하면 노드의 글로벌 객체들에 접근하는 게 가능하게 되고, 이를 통해 임의의 시스템 명령들을 실행할 수 있게 됩니다.”
vm2의 관리 책임자들 역시 prepareStackTrace를 오버라이드 하면 샌드박스로부터 탈출할 수 있다는 사실을 알고 있었다고 한다. 그래서 에러(Error) 객체와 prepareStackTrace 메소드를 하나로 묶음으로써 탈출 경로를 제한하려 했다. 실제 이는 효과를 거두었고, 그래서 그 누구도 메소드 오버라이드에 성공하지 못했다고 vm2 관리 책임자들은 설명한다. 이번에 옥스아이 연구원들이 밝힌 것은 vm2 관리 책임자들이 해 둔 위험 완화책들을 무력화시키는 취약점이 존재한다는 내용이라고 볼 수 있다.
샌드박스 안전하게 활용하기
옥스아이는 “불안한 코드를 독립적인 환경에서 실행시켜준다는 점에서 샌드박스는 안전한 기술이 맞다”고 말한다. “하지만 샌드박스를 사용하는 측에서 ‘무조건 안전하다’고 믿는 것은 위험한 일입니다. 세상 모든 기술에는 한계가 있고, 무조건 안전한 것은 아무 데도 없습니다. 완전히 마음을 놓는다는 건 그 어떤 상황에서도 위험한 일입니다.”
그러면서 옥스아이는 애프릴케이션의 논리적인 부분과 민감한 부분을 샌드박스 코드를 실행시키는 마이크로서비스와 분리시키는 것이 안전하다고 추가적으로 조언한다. “이렇게 하면 공격자가 샌드박스에서 무사히 탈출한다고 해도 활용할 수 있는 공격 통로가 제한됩니다. 격리된 마이크로서비스 외에는 건드릴 수가 없는 것이죠. 탈출의 효용성이 크게 떨어진다는 겁니다.”
또한 자바스크립트와 같은 동적 프로그래밍 언어에 대한 의존도가 높은 샌드박스는 가급적 피하는 것이 좋다고 옥스아이는 추천한다. “언어 자체가 동적이기 때문에 그 자체로 잠재적 공격 표면이 넓어집니다. 불필요한 공격의 가능성을 공격자들에게 주는 결과를 낳을 수 있죠.”
3줄 요약
1. 수많은 개발자들에게 사랑받는 샌드박스 vm2에서 초고위험도 오류 발견됨.
2. 샌드박스를 탈출하여 임의의 명령을 실행시킬 수 있게 해 주는 취약점.
3. 샌드박스가 안전한 장치인 건 맞지만 무조건 믿는 건 금물.
[국제부 문가용 기자(globoan@boannews.com)]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>