
CVE-2017-5638의 교육적 분석: Apache Struts 2에서의 OGNL 주입 RCE, 익스플로잇 워크스루, Equifax 사례 연구 및 예방 지침 포함.
Apache Struts 2는 Java EE 웹 애플리케이션을 개발하기 위한 오픈 소스 웹 애플리케이션 프레임워크입니다. 이는 2006년 10월 10일에 처음 출시된 Struts 프레임워크의 2세대입니다. Struts 프레임워크는 MVC 아키텍처를 활용하는 웹 애플리케이션을 만드는 데 도움이 되도록 설계되었습니다.
Apache Struts는 널리 사용되는 프레임워크입니다. 2017년에는 Fortune 100대 기업의 65% 이상이 Apache Struts 프레임워크를 사용했습니다.
이 취약점은 2017년 3월 10일에 NVD에 의해 처음 게시되었으며, 기본 점수 10(심각) 중 가장 높은 수준이 부여되었습니다. 가장 높은 취약점 점수를 받은 주요 요인은 애플리케이션이 최소한의 복잡성으로 네트워크를 통해 악용될 수 있고 무결성 및 가용성에 높은 영향을 미칠 수 있기 때문입니다.
이 취약점으로 인해 공격자는 HTTP 헤더에 OGNL(Object Graph Navigation Library) 표현식을 삽입하여 애플리케이션에서 원격 코드 실행(RCE)을 수행할 수 있었습니다.
취약한 프레임워크 버전은 Apache Struts 2의 2.3.x 버전(2.3.32 미만) 및 2.5.x 버전(2.5.10.1 미만)입니다.
.png)
취약한 코드는 Jakarta Multipart Parser에 있습니다. 익스플로잇을 수행하기 위해 공격자는 LocalizedTextUtil.findText 함수의 취약점을 사용했습니다. 이 함수는 ${…} 내에 제공된 메시지를 OGNL(Object Graph Navigation Library) 표현식으로 해석했습니다. 그런 다음 공격자는 이 OGNL 표현식을 사용하여 시스템 명령을 실행하고 /etc/password, /etc/shadow와 같은 민감한 파일의 내용을 노출시켜 공격자에게 완전한 제어권을 부여할 수 있습니다. 애플리케이션은 또한 공격자가 실행한 명령의 출력을 제공하여 공격을 용이하게 했습니다.
다음 이미지는 OGNL 표현식이 포함된 HTTP 요청을 보여주며, 이를 통해 공격자가 악용할 수 있었습니다.

2017년 3월, Apache Struts 프레임워크에서 CVE-2017-5638 취약점이 처음 발견되었을 때 Apache 재단은 취약점에 대한 패치를 발표했지만, Equifax는 취약한 시스템을 찾기 위해 실행된 스캔이 작동하지 않아 취약한 시스템에 패치를 적용하지 않았습니다.
2017년 5월부터 7월까지 공격자는 여러 Equifax 데이터베이스에 접근하여 수백만 명의 정보를 노출시켰습니다. 이 공격은 1억 4300만 명에게 영향을 미쳤으며 20만 명 이상의 신용카드 정보도 유출되었습니다.
공격자는 76일 동안 눈에 띄지 않고 공격을 계속할 수 있었습니다.
회사는 대규모 데이터 유출 이후 보안 업그레이드에 14억 달러를 지출했습니다.
프레임워크 링크 Apache Struts 2 소개, Wikipedia 취약점, NVD 취약점 설명, Synopsis Apache Struts RCE, YouTube Equifax 사례 연구, csoonline 취약점 스캔, GitHub