
Investigación de DirtyFrag CVE-2026-43284 para dispositivos 5.4-qgki
Fecha: 2026-10-07/08 Dispositivos: Redmi Note 11 Pro 5G (veux, 5.4.274-qgki) y POCO X5 5G (moonstone, 5.4.191-qgki) SoC: Snapdragon 695 (SM6375)
| CVE | Estado | Notas |
|---|---|---|
| CVE-2026-43284 (DirtyFrag) | ❌ Descartado | Requiere MSG_SPLICE_PAGES (kernel 6.5+) |
| CVE-2026-24088 (Qualcomm fastboot) | ⚠️ Específico del bootloader | TheFliss: "unknown command" en su dispositivo |
| CVE-2022-2602 (io_uring UAF) | ❌ Descartado | El kernel bloquea la ruta de registro (EFAULT/EINVAL) |
| CVE-2022-20421 (BadSpin) | ❌ Probado, sin éxito | Compila correctamente, entra en bucle sin ganar la race |
| CVE-2023-20938 (binder UAF) | ✅ Vulnerable (ambos) | Aún no probado |
| CVE-2023-4622 (af_unix UAF) | ✅ Vulnerable (ambos) | Aún no probado |
| CVE-2026-43499 (GhostLock) | ❓ Posiblemente vulnerable | La app GhostLock no funciona en 5.4 por diseño |
| CVEs de KGSL (5x) | ❓ Posiblemente vulnerable | 2024-38399 tiene writeup+PoC |
Veredicto: No es viable en 5.4.
El fallo existe en 5.4 (código de 4.11), pero el exploit requiere soporte de
MSG_SPLICE_PAGES para UDP para la primitiva de escritura en page-cache. Esto se
introdujo en el kernel 6.5. En 5.4, splice() a UDP realiza una copia normal — sin
adjuntar página compartida.
CVE-2026-43500 (variante RxRPC) tampoco es aplicable — el código de RxRPC se introdujo en 6.8.
Repositorio: https://github.com/HirokiAkihiko/dirtyfrag-research
Veredicto: Específico del bootloader, no universal.
Fallo en Qualcomm ABL: fastboot oem set-gpu-preemption no sanitiza los argumentos,
lo que permite inyectar androidboot.selinux=permissive en la cmdline del kernel.
Resultado de la prueba (TheFliss): FAILED (remote: 'unknown command') — su bootloader
no implementa el comando. Este CVE depende de la compilación específica de ABL.
Veredicto: Descartado en estos dispositivos. El kernel bloquea activamente la ruta de registro.
Trabajo realizado:
Hallazgos:
CONFIG_IO_URING=y confirmadoio_uring_setup funciona con flags simples (SQPOLL bloqueado → requiere CAP_SYS_ADMIN)IORING_REGISTER_FILES → EFAULT (consistente, incluso mediante SVC directo)IORING_REGISTER_BUFFERS → EINVALLa primitiva UAF requiere que IORING_REGISTER_FILES tenga éxito. Sin ello,
la cadena de exploit no puede continuar.
Paquete: ~/workspace/cve-2022-2602-bundle/ (código fuente, binarios, diagnósticos)
Veredicto: Compila y se ejecuta, pero no tiene éxito en veux.
Trabajo realizado:
mateusvdcastro/badspinexploit.c (find_dev_config())dev_config.h (modelo 2201116SG, Android 13, kernel 5.4.274, SPL 2024-12)libbadspin.so (345K, ARM64)TEST_VULN=1Resultado de la prueba: dev_config_init falló inicialmente (discrepancia en el mes del SPL: la entrada tenía
month=1, el dispositivo tiene 2024-12). Corregido mediante GitHub. Tras la corrección, el exploit se ejecuta y
dispara la vulnerabilidad ("Trigger use-after-free") pero entra en bucle indefinidamente
sin ganar la race condition.
Repositorio: https://github.com/HirokiAkihiko/badspin-veux (privado)
bdc1c5fac982 y 4df153652cc4 no están presentes en el código fuente de Xiaomi4821df2ffe38 no está presente; skb_peek_tail sigue sin bloqueocurrent->pi_blocked_on = NULL presente)Las etiquetas de versión son engañosas. veux-r-oss está etiquetado como 5.4.274 pero le faltan backports estables de 5.4.y que deberían estar ahí (correcciones de binder de 2023-06, corrección de af_unix de 2023-08). Verifica siempre a nivel de código, no por el número de versión.
~/workspace/cve-2022-2602-bundle/~/workspace/cve-hunt/