
تقرير وإثباتات المفهوم لـ CVE-2021-30862، ثغرة RCE بنقرة واحدة في iOS iTunes U
في عام 2021، نشر CodeColorist تقاريره عن ثغرات Mistuned، وهي سلسلة من الثغرات التي تؤثر على متجر iTunes وتسمح بتنفيذ تعليمات برمجية عن بُعد بنقرة واحدة. وبشكل لافت، أظهر فتح الآلة الحاسبة (calc) دون أي تلف في الذاكرة، بل مجرد خطأ منطقي. خلال هذه الفترة، كنت أفحص مخططات عناوين URL في تطبيقات مختلفة، لأنني قبل عامين أبلغت عن مشكلة أمنية تتعلق بمخطط URL الخاص بـ itms-services:// لمتجر التطبيقات. أحد مخططات URL التي وجدتها مشابهة جدًا كان مخطط itms-itunesu:// لتطبيق iTunes U. في ذلك الوقت، لم أكن أعلم أنه يقبل مدخلات المستخدم، واعتقدت أنه يُستخدم فقط لفتح التطبيق، لكنني أدركت لاحقًا أن الأمر ليس كذلك.
عند قراءة تقريره، لفت انتباهي شيء واحد بشكل خاص: هروب Jung Hoon Lee من وضع الحماية باستخدام itmss:// خلال Pwn2Own 2014. في ذلك الوقت، كان متجر iTunes يقبل عناوين URL عشوائية ويقوم بتحميلها في SUWebView الخاص به، حتى لو لم تكن من Apple (CVE-2014-8840). في هذه المرحلة، ربما يمكنك تخمين إلى أين أنا ذاهب. لاحظت أن itmss:// يشبه إلى حد كبير مخطط URL الخاص بـ iTunes U، لذلك قررت أن أرى ما إذا كان iTunes U سيقوم بتحميل google.com في عرض الويب الخاص به. وإذا به يفعل ذلك. ثم قررت تجربة استخدام نفس واجهة برمجة تطبيقات iTunes المستخدمة في ثغرات Mistuned في محاولة لفتح الآلة الحاسبة، دون توقع نجاحها مطلقًا، ولكن على عكس توقعاتي، نجحت. اتضح أن كلاً من متجر iTunes و iTunes U يشتركان في نفس واجهة برمجة التطبيقات هذه. وماذا عن ثغرة استخدام الذاكرة بعد التحرير (UAF) من Mistuned؟ هل كانت موجودة في iTunes U أيضًا؟ اتضح أنها كانت موجودة أيضًا، وتمكنت من إنشاء دليل إثبات يؤدي إلى تعطل iTunes U عن طريق تحرير الذاكرة مرتين (POC_6.html). أرفقت بعض أدلة الإثبات (POCs) التي أرسلتها إلى Apple بالإضافة إلى محاولة لبناء أساسيات fakeobj/addrof من هذه الثغرة في main.js بمساعدة من تقرير Mistuned، على الرغم من أنني أعتقد (إن لم تخنّي الذاكرة) أنني لم أتمكن من جعل أساسية fakeobj تعمل بالكامل. يمكنك قراءة تقرير CodeColorist لمزيد من المعلومات حول تأثير هذه الثغرات، ولكن باختصار، تسمح باستخراج الكثير من البيانات الحساسة من الضحية بالإضافة إلى إمكانية تنفيذ تعليمات برمجية عن بُعد بنقرة واحدة (1-click RCE).