سلام بچه ها این یه مقاله است که یه پژوهشگر اومده دوتا باگ از توی مموبایل های Oneplus رو با هم chain کرده و از یه اپ untrusted_app که معمولی و بدون هیچ دسترسی هستش به دسترسی روت برسه.
باگ اول این بوده که یه سرویس داخل oxygenOS هست به نام AtlasService که با روت اجرا میشه و هیچ چک مجوزی در قبال صدا زدنش نداره که اینی که الان من رو صدا زده آیا اپ معمولیه یا اینکه یه اپ سیستمی با یه دسترسی خاص؟
یه کدی داخل این سرویس هست به این صورت:
setEvent(String8 name, String8 value)
این یه event ثبت میکنه که listenerهای مختلف این رو میگیرن و یه کاری انجام میدن که اکثرشون کار بی خطری انجام میدن اما یکی از اونها به نام
OplusAtlasLogWriter::handleEvent بررسی میکنه اگر مقدار name برابر با atlas_event_multimedia_audio_dumpsys باشه میره به dumpsysAudioInfo میگه اون مقداری که به عنوان value اومده رو اجرا کن.بر اساس فایل
/system_ext/etc/init/audiodumpinfo.rc سرویس audiodumpinfo با روت اجرا میشه و در دامنه SELinux به اسم dumpstate هستش.این سرویس ورودی اپ رو میخونه و با
/ یکی یکی تقسیم میکنه و برای هر پوشه که وجود نداشته باشه system("chmod 777 " + prefix) رو میزنه.حالا اینجا همم میاد یه command injection میزنه که میتونه چونکه اینجا کامندش داره اجرا میشه با ';' تممومش میکنه و دستور شل خودش رو با روت اجرا میکنه.(حالا دیگه جزئیات این رو نمیگم)
حالا اینجا اپ مهاجم یه دسترسی uid 0 میگیره اما کافی نیست چون dupstate یه دامنه نسبتا محدوده.
📢 @androidSec_fa