2023.09.11

CVE-2021-39703 A-207057578 EoP High 12

patch

分析

这个洞挺有意思的:AOSP里面需要手动授权才能开启USB MTP模式,在断开连接一个已启用MTP的设备之后3秒内再插入其他设备,可能导致其他设备直接获得MTP权限。修复是把这个延时改为1秒。
诶?可是3秒后不还是会发送消息吗?为什么会直接获取MTP权限,还需要再深入分析。

        public void updateState(String state) {
            int connected, configured;
            if ("DISCONNECTED".equals(state)) {
                connected = 0;
                configured = 0;
            } else if ("CONNECTED".equals(state)) {
                connected = 1;
                configured = 0;
            } else if ("CONFIGURED".equals(state)) {
                connected = 1;
                configured = 1;
            } else {
                Slog.e(TAG, "unknown state " + state);
                return;
            }
            removeMessages(MSG_UPDATE_STATE);
            if (connected == 1) removeMessages(MSG_FUNCTION_SWITCH_TIMEOUT);
            Message msg = Message.obtain(this, MSG_UPDATE_STATE);
            msg.arg1 = connected;
            msg.arg2 = configured;
            // debounce disconnects to avoid problems bringing up USB tethering
            // 延迟发送消息
            // 如果connected等于0(即未连接),则延迟时间为DEVICE_STATE_UPDATE_DELAY;否则,延迟时间为0
            sendMessageDelayed(msg, (connected == 0) ? DEVICE_STATE_UPDATE_DELAY : 0);
        }
        public void updateHostState(UsbPort port, UsbPortStatus status) {
            if (DEBUG) {
                Slog.i(TAG, "updateHostState " + port + " status=" + status);
            }
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = port;
            args.arg2 = status;
            removeMessages(MSG_UPDATE_PORT_STATE);
            Message msg = obtainMessage(MSG_UPDATE_PORT_STATE, args);
            // debounce rapid transitions of connect/disconnect on type-c ports
            sendMessageDelayed(msg, HOST_STATE_UPDATE_DELAY);
        }

USB MTP模式

USB MTP是一种用于在计算机和移动设备之间传输数据的通信协议。它的全称是“USB Media Transfer Protocol”,意思是通过USB接口传输媒体文件的协议。
USB MTP的作用就像是一个桥梁,可以让我们将手机、相机或其他设备中的照片、视频、音乐等文件连接到计算机上,方便地进行文件的传输和管理。它可以让我们在电脑上直接浏览并修改设备中的文件,就像在使用电脑硬盘一样方便。
与传统的USB连接方式相比,USB MTP更加智能和便捷。它不需要我们手动设置设备为“USB存储模式”,而是可以直接通过USB连接线插入计算机的USB接口,然后选择MTP模式,就能够在计算机上访问设备中的文件。
USB MTP的好处还包括可以同时连接多个设备,方便地进行文件的传输和共享。另外,USB MTP还支持自动同步功能,可以在我们连接设备时自动备份和更新文件,确保文件的及时性和安全性。
总之,USB MTP是一种非常方便的传输协议,可以帮助我们在计算机和移动设备之间快速传输文件,方便我们的工作和娱乐。

USB 调试模式

adb使用的是Android设备的USB调试模式,而不是USB MTP模式。
USB调试模式是一种特殊的工作模式,它允许计算机通过USB连接与安卓设备进行通信。在USB调试模式下,ADB可以执行各种操作,如安装应用程序、传输文件、查看设备日志等。
USB MTP模式则是一种用于在计算机和移动设备之间传输媒体文件的协议,如照片、音乐等。虽然USB MTP和USB调试模式都是通过USB连接进行通信,但它们的功能和使用方式是不同的。