2개의 다른 "VMware Spring" 버그 - 우리가 그 혼란스러움을 정리해보았다.
안녕하세요, 에디터 푸린입니다.
3월 29일 발견된 VMWare의 Spring 관련 버그가 총 2종류가 발견이 되면서 이름도, 버그에 대해서도 헷갈리는 부분이 많은 듯 해, 관련해서 정리해놓은 기사를 가져와 번역해봤습니다!
원문 왜곡을 최대한 피하기 위해 가능하면 직역하였으나, 일부 문장의 완성도를 위해 의역을 한 부분이 있습니다. 오타나 오역은 알려주시면 확인하여 수정하겠습니다.
(하이퍼링크와 이탤릭체 일일이 다 반영한다고 막노동했다는 슬픈 이야기....★)
Two different “VMware Spring” bugs at large – we cut through the confusion
어제, 우리는 VMware Spring 제품에 대한 버그에 대해서 기고했다: "클라우드 기반의 앱들을 포함해 강력한 Java 앱을 만들기 위한 오픈소스 Java 툴킷으로, 사용자가 '서버'파트와 관련해서는 쓰기나 관리, 걱정하거나 이해할 필요조차 없는 프로세스"라고 기술한 프로젝트 말이다.
하지만 Spring은 방대한 숫자의 요소를 가진 프로젝트기에, "Spring의 취약점"은 "내 생각에 Windows에 버그가 있는 것 같아" 또는 "내가 질병에 안걸리면 좋겠어" 라고 말하는 것과 유사하다.
그래서 좀 더 명확하게 하자면, 어제 우리가 확인한 버그는 공식적으로 CVE-2022-22963으로 지정되었고, 반공식적인 긴 이름은 악성 Spring 표현식에 의한 Spring Cloud Function 내 원격 코드 실행 이다.
이 버그는 Spring 표현식 리소스 접근 취약점으로 불리며 "SPEL 취약점(SPEL, 혹은 SpEL은 "Spring Expression Language"의 약어로, 이 버그가 익스플로잇 되었을때 악용된 기술이다)"으로 표현되기도 한다.
CVE-2022-22963 버그는 Spring Cloud Function이라 불리는 Spring 요소에 존재하며, (Spring Cloud Function은) Spring 생태계 내에서 데이터 프로세싱에 필요한 코드를 최소한으로 제거하는 기능적 스타일로 알려진 Spring 코드를 작성하는데 사용할 수 있는 선택적 모듈이다.
예를 들어, 만약 SKU를 제품 이름으로 변환하는 웹 서비스를 원한다면, 기능적 접근방식으로는 SKU를 입력하면 제품명이 출력되는 간단한 기능을 프로그래밍하게 하여 입력은 어떻게 받고 호출자에게 어떻게 결과를 반환할지에 대한 주변 세부 사항들에 대해 걱정할 필요가 없었다.
불행히도, Spring Cloud Fucntion 모듈에 요청을 보낼 때 특별한 HTTP 헤더를 더함으로써(요청을 프로세스하기 위해 코드를 작성하는 것에서 구해준 바로 그 코드말이다!), 공격자는 원하는 프로그램을 실행시키도록 서버를 속일 수 있다.
이런 류의 취약점은 원격 코드 실행(RCE, Remote Code Execution)으로 알려져 있는데, 말 그대로를 의미하는 전문 용어이다: 외부, 심지어 지구 반대편에서 누군가가 네트워크 내에 신뢰되지 않는 코드를 초대할 때 예상되는 일반적인 경고나 팝업 없이 그들 마음대로 컴퓨터가 프로그램을 실행할 수 있도록 속일 수 있는 것이다.
RCE는 익스플로잇이 힘들거나 공격 대상 서비스가 디폴트 구성이 아니라고 하더라도 항상 심각한 이슈이다. 어찌되었건, 누군가 스스로 선택하지 않은 코드를 실행하게끔 강제하는 능력은 공격자가 조용히 로그인을 먼저할 수 있는 방법을 찾아낼 필요 없이 멀웨어를 심을 수 잇다는 것을 종종 의미한다.
여전히 최악인 것은, CVE-2022-22963을 악용하는 방법을 보여주는 PoC 익스플로잇은 이미 온라인에서 찾을 수 있고, 잠재적 사이버 범죄자들은 간단히 이미 존재하는 코드를 복사-붙여넣기 하여 공격을 시작할 수 있다는 것이다.
다행히, CVE-2022-20963 버그를 패치하는 것은 간단하다: Spring Cloud Function 모듈을 Spring 기반 생태계 어디에서든 사용하고 있다면 갖고 있는 Spring Cloud Function의 어떤 종류를 지원하느냐에 따라 버전 3.1.7 혹은 3.2.3으로 업그레이드 하면 된다.
공식적인 정보로는, Spring 팀의 CVE 리포트 와 자체적인 취약점 진단을 확인하라.
버그는 하나가 아니라.....두 개가 있다
안타깝게도, Spring 기반의 취약점에 대한 소식이 동시에 하나 더 있다.
두번째 버그 역시 원격 코드 실행을 초래할 수 있어 패치되지 않은 서버에 공격자가 멀웨어를 심을 수 있는 또 하나의 벡터가 될 수 있지만, 이 버그는 Spring 코드의 다른 부분이며 Spring Cloud Function의 취약점을 패치하더라도 해결되지 않는 문제이다.
이 버그는 공식적으로 CVE-2022-22965이며, 일부 사이버보안 관련자들이 혼란스럽게(우리의 의견으로는 유감스럽게도) 이것을 "Spring4Shell"이라고도 불렀다. 아마 작년 말 악명이 높았던 Log4Shell 취약점과 연관지음으로써 이야기를 과장하려고 했던 것으로 예상된다.
이 아티클 위에서 말한 버그의 이름이 이미 여러 개 있고, 이 두개의 버그가 동시에 관심사로 떠올랐다는 것을 감안하면, 얘기할 버그가 두 개나 있다는 것 만으로도 이미 많은 혼란이 있고…
...그리고 이 혼란에 "Spring4Shell"이라는 이름은 전혀 도움이 되지 않았다. (Spring4Shell이라는 이름은) Log4J와 Spring이 서로 완전히 다르며 관련성이 없는 소프트웨어 프로젝트임에도 불구하고, Log4Shell이란 이름이 입혀진 비슷한 자바 제품 Log4J와 기술적인 연결이 있는 것처럼 보이게 했다.
또한 전문용어로 RCE 익스플로잇 중 의도적으로 삽입된 모든 악성(rogue) 코드를 일반적으로 "쉘코드"라고 한다.
이와 유사하게, 다른 누군가의 컴퓨터에 임의의 프로그램이 실행되도록 RCE를 사용하는 것을 일반적으로 "쉘 가져오기"라고 하는데, 이는 셸이 Unix 용어로 원하는 다른 프로그램을 실행하고 자체 프로그램인 스크립트나 배치 파일을 생성하는 데 돕기 위해 특별히 디자인된 일반 목적의 명령어 프로그램이기 때문이다.
한마디로, 어느 취약점이든 "Shell"이라는 이름이 더해지는 것은 - 당연하게도, Log4Shell 서사에서 우리가 보았듯이- 불필요한 혼란을 야기할 수 있다.
어쨌든 CVE-2022-22965 취약점은 Spring 프레임워크 제품에서 발견되었고, 다행인 점은 이것 역시 패치가 되었다는 것이다.
이 취약점을 패치한다는 것은 Spring 프레임워크 5.2.20 또는 5.3.18로 업그레이드한다는 것이다. (이 제품은 5.2 그리고 5.3의 두가지 트랙이 존재하는데, 사용하고 있는 버전의 최신 버전으로 업데이트하면 된다.)
Spring 팀에 의하면, Spring Boot라는 Spring 프레임워크 요소를 포함한 제품군이 있는데 이 역시 업데이트된 Spring 프레임워크 패치를 포함한 업데이트된 Spring Boot 버전인 2.5.16과 2.6.6 버전을 배포했다.
무엇을 해야 하는가?
아래는 사이버보안과 명료성 모두를 위해 우리가 권고하는 바이다:
- 개별적이든 함께이든 이 버그들에 대해서 언급할 때 항상 CVE 버그 넘버를 포함하기. CVE 버그 식별자 자체가 그들이 유일하고 반-무작위로 지어진 숫자들의 나열인 것이 버그에 대해 논의할 때 혼선을 가중시키지 않는다.
- 이 버그들에 대해 언급할 때, 필요에 따라 Spring Cloud Function 혹은 Spring 프레임워크에 대해 명시적으로 언급하기. 이들은 업데이트 되어야하는 구성 요소들의 이름이고 VMWare Spring의 자체 보안 권고에서도 찾을 수 있는 이름이기에 추가 혼란보다는 평이한 영어로서의 명확성을 더해준다.
- "Spring4Shell"이라는 이름을 가능하면 사용하지 않기. 우리가 여기서 해야 했듯이, 만약 그 이름을 반드시 명시해야 한다면, 정보성의 목적으로만 포함하고 버그 자체의 이름 참조성으로 사용하지 말라. 우리는 이미 두가지 버그 모두 그 자체로 이미 혼란스러운 이름으로 언급이 된 경우를 보았다. 이 이름이 기억하기 쉽긴 하나 필요없는 잘못된 정보를 초래한다.
- 패치를 빠르게, 그리고 자주할 것! 사용중인 Spring setup에 대한 이 버그들의 위험성이 낮다고 생각하더라고, 이 버그에 대한 관심도가 현재 높은데 왜 앞서나갈 수 있을 때 뒤쳐지려고 하는가?
요약해서 Spring팀의 최종 업데이트 정보에 대해 도움을 주자면:
- CVE-2022-22963: 악성 Spring 표현식에의한 Spring Cloud Function에서의원격코드실행. Spring Cloud Function을 3.1.6 혹은 3.2.2 버전으로 업그레이드할 것.
- CVE-2022-22965: JDK 9 이상에서의 데이터바인딩을 통한 Spring 프레임워크 RCE. Spring 프레임워크 5.2.20 혹은 5.3.18 버전으로 업그레이드할 것.
- Spring Boot 패키지. Spring Boot 버전 2.5.12 또는 2.6.6으로 업그레이드하는 것이 최신 Spring Boot 패키지에 번들로 제공되는 가장 최신 Spring Framework 모듈을 얻는 편리한 방법이다.