
CVE-2020-0113 और CVE-2020-0108 का PoC
CVE-2020-0113 & CVE-2020-0108 का Poc
AOSP के 2020-08 पैच में, फ्रेमवर्क परत AMS में एक भेद्यता का खुलासा किया गया, जिसका नंबर CVE-2020-0108 है और रेटिंग उच्च है; दूसरा नंबर CVE-2020-0313 है और रेटिंग मध्यम है। AMS में फोरग्राउंड सेवा के प्रसंस्करण में एक तार्किक भेद्यता है। इस भेद्यता का सफलतापूर्वक शोषण करने वाला हमलावर फोरग्राउंड सेवा के नोटिफिकेशन प्रदर्शन को बायपास कर सकता है और बैकग्राउंड में चलता रह सकता है। हमले के लिए स्थानीय दुर्भावनापूर्ण ऐप द्वारा शुरू किया जाना आवश्यक है, उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं है। यदि उपयोगकर्ता ने ऐप को अन्य अनुमतियाँ दी हैं, तो यह अधिक नुकसान पहुंचा सकता है, जैसे लगातार स्थान ट्रैक करना या चुपचाप रिकॉर्ड करना।
फोरग्राउंड सेवा Google द्वारा Android 8.0 में पेश की गई एक अवधारणा है। चूंकि Android 8.0 बैकग्राउंड सेवाओं को बैकग्राउंड में शुरू करने की अनुमति नहीं देता है, इसलिए फोरग्राउंड सेवा की अवधारणा डिज़ाइन की गई थी। फोरग्राउंड सेवा की प्राथमिकता अधिक होती है और यह लंबे समय तक बैकग्राउंड में चल सकती है, लेकिन शुरू होने के 5 सेकंड के भीतर उसे एक नोटिफिकेशन बांधना होता है, अन्यथा वह समाप्त कर दी जाती है। वास्तव में फोरग्राउंड सेवा अभी भी "बैकग्राउंड" में चलती है, केवल इसलिए कि यह उपयोगकर्ता को दिखाई देने वाले नोटिफिकेशन से बंधी होती है, Google इसे "फोरग्राउंड सेवा" कहता है।
NotificationManagerService में onNotificationError विधि नोटिफिकेशन प्रदर्शन की असामान्य स्थितियों को सही ढंग से संभाल नहीं पाती है। चूंकि यह विधि केवल नोटिफिकेशन को रद्द करने के लिए cancelNotification विधि को कॉल करती है, और सेवा या पूरे एप्लिकेशन को समाप्त नहीं करती है, इस स्थिति में फोरग्राउंड सेवा बिना नोटिफिकेशन दिखाए चलती रहती है।
cancelNotification(callingUid, callingPid, pkg, tag, id, 0, 0, false, userId,REASON_ERROR, null);}
RemoteViews ऑब्जेक्ट बनाते समय, Layout ID -1 निर्दिष्ट किया गया है, जो स्पष्ट रूप से एक अमान्य मान है, इस प्रकार onNotificationError कॉलबैक ट्रिगर किया जा सकता है।
RemoteViews remoteViews = new RemoteViews(getPackageName(), -1);
ServiceRecord.java में postNotification विधि में, नोटिफिकेशन प्रदर्शन की असामान्य स्थितियों को सही ढंग से संभालने के बजाय, अपवाद को उपयोगकर्ता प्रोग्राम को फेंक दिया जाता है।
ams.crashApplication(appUid, appPid, localPackageName, -1,
"Bad notification for startForeground: " + e);
एक अमान्य Channel ID का सीधे उपयोग करके Notification बनाया गया।
Notification notification = new NotificationCompat.Builder(this, "InvalidInvalidInvalid")
इसके अलावा, दोनों Service को मुख्य थ्रेड के अपवाद को पकड़ने की आवश्यकता होती है, ताकि ऐप क्रैश न हो।
Genymotion एमुलेटर, Android 8.0, 5 सितंबर 2017 का पैच
MediaRecord का उपयोग करके 10 सेकंड की रिकॉर्डिंग की जाती है
LocationManager का उपयोग करके स्थान प्राप्त किया जाता है
सामान्य फोरग्राउंड सेवा (NormalService) के नोटिफिकेशन बार में स्थायी नोटिफिकेशन होता है, जबकि Poc के पास यह नोटिफिकेशन नहीं होता।
onNotificationError कॉलबैक में अनुप्रयोग को जबरन क्रैश कराया जाता है, और postNotification विधि की अपवाद हैंडलिंग में भी अनुप्रयोग को जबरन क्रैश कराया जाता है।
[1] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0108
[2] https://github.com/wrlu/vulnerabilities/tree/master/CVE-2020-0108
[3] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0313