Akamai 블로그 | Wild에서 악용된 Spring Cloud Function SpEL 인젝션(CVE-2022-22963)
개요
2022년 3월 24일 Pivotal은 잠재적으로 시스템 손상을 일으킬 수 있는 Spring Cloud Function에 심각한 서버 측 코드 인젝션 취약점(Spring Expression Language injection)을 패치하였습니다. Spring은 인기 있는 오픈 소스 Java 프레임워크입니다. Spring 및 또 다른 원격 코드 실행(RCE) 취약점(Spring Core 또는 “Spring4Shell”)은 Akamai 적응형 보안 엔진(ASE) Kona Site Defender(KSD) 룰세트를 통해 완화됩니다. 이 글은 Spring Cloud 취약점에 초점을 맞추고 있습니다. Spring Core 취약점에 대해 알아보려면 여기를클릭하세요.
Spring Cloud Function은 특정 런타임으로부터 비즈니스 로직을 분리할 수 있는 기술입니다. SpEL(Spring Expression Language)은 Spring 포트폴리오 전체에서 사용되는 강력한 표현 언어로서 런타임에 개체 그래프를 쿼리하고 조작할 수 있도록 지원합니다. 애플리케이션이 신뢰할 수 없는 사용자 입력 코드 표현을 안전하지 않은 방식으로 평가할 때 과거에는 SpEL 인젝션에 대해 많은 원격 코드 실행 CVE(Common Vulnerabilities and Exposures)가 보고되었습니다(그림 1 참조).
며칠 후 3월 26일 GitHub 사용자 “cckuailong”은 이 취약점의 성공적인 악용을 보여 주는 개념 증명 악용을 발표했습니다(그림 2 참조).
하루도 채 지나기 전에 Akamai는 인터넷 전반의 악용 시도를 관측하기 시작했습니다.
Log4j와 마찬가지로, 전부는 아니지만 대부분 현재 시도는 “ping back” 조사로서, 공격자들은 악용이 성공한 경우 비콘을 전송하기 위해 애플리케이션에 지시를 내립니다.
Akamai는 전 세계 수천 개의 IP 주소가 공격 페이로드를 전송하는 것을 목격했습니다. 그중 대다수는 공용 클라우드에서 호스팅 되는 가상 프리이빗 네트워크(VPN) 및 웹 프록시입니다.
취약점
패치 시, SpEL 표현을 “spring.cloud.function.routing-expression” HTTP 헤더를 통해 수신하여애플리케이션 라우팅을 용이하게 할 수 있습니다.
그동안 평가할 표현식이 헤더를 통해 수신될 수 있는지를 코드에서 확인할 수 없었습니다. 이 문제를 해결하기 위해, 별도의 HeaderEvalContext 인 SimpleEvaluationContext가 추가되었습니다.
KSD 적응형 보안 엔진을 통한 공격 완화
이러한 공격의 대부분은 OS 수준의 명령을 실행하기 때문에 Akamai 적응형 보안 엔진(ASE)에는 명령어 인젝션을 탐지하는 광범위한 룰이 내장되어 있습니다. ASE는 기존 명령어 삽입 룰을 사용하여 이 제로데이를 탐지할 수 있었습니다.
또한 Kona Site Defender 룰세트는 다음과 같은 공격을 완화합니다.
3000041 - 서버 측 템플릿 인젝션
3000156 - CMD 인젝션 탐지됨(PHP High-Risk Functions)
요약
Spring Cloud Function은 Log4j 라이브러리만큼 광범위하게 보급되지 않았지만, 이러한 취약점에 대한 손쉬운 악용은 많은 위협 행위자를 끌어들일 수 있습니다. 이로 인해 위협 행위자들은 암호화폐 채굴, DDoS, 랜섬웨어에 대한 캠페인을 개시하고 향후 몇 년 이내에 이를 절호의 기회로 삼아 기업에 침투할 것이라고 예상합니다. 하지만 Akamai 고객은 Akamai 적응형 보안 엔진과 Kona Site Defender 룰세트를 통해 보호됩니다.
Akamai의 위협 연구팀은 이 취약점의 악용을 지속해서 모니터링하고 있으며 새로운 변종이 발생하거나 새로운 사이버 범죄 조직이 이 취약점을 자신들의 무기 목록에 추가하는 것을 관측할 경우 업데이트합니다.