
XStream SSRF CVE-2021-21349
الثغرة
CVE-2021-21349: يمكن تفعيل طلب تزوير من جانب الخادم عند إلغاء التجميع باستخدام XStream للوصول إلى تدفقات بيانات من أي URL يشير إلى مورد في شبكة داخلية أو المضيف المحلي.
الإصدارات المتأثرة
جميع الإصدارات حتى الإصدار 1.4.15 وما يليه متأثرة، إذا تم استخدام الإصدار الإفتراضي. لا يتأثر أي مستخدم اتبع التوصية بإعداد إطار الأمان الخاص بـ XStream بقائمة بيضاء (whitelist) مقتصرة على الحد الأدنى من الأنواع المطلوبة.
الوصف
يحتوي التدفق المعالج في وقت إلغاء التجميع على معلومات النوع لإعادة إنشاء الكائنات المكتوبة سابقًا. لذلك، يقوم XStream بإنشاء حالات (instances) جديدة بناءً على هذه المعلومات. يمكن للمهاجم التلاعب بتدفق الإدخال المعالج واستبدال أو إدخال كائنات، مما يؤدي إلى طلب تزوير من جانب الخادم.

$ docker build -t cve-2021-21349 .
$ python -m http.server 8080
$ docker run -it --rm cve-2021-21349
Serving HTTP on :: port 8080 (http://[::]:8080/) ...
::ffff:127.0.0.1 - - [05/May/2021 16:35:39] "GET /internal.txt HTTP/1.1" 200 -
تعديل pom.xml كما يلي
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
إضافة NoTypePermission.NONE
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);