
Prueba de concepto APK de Android para CVE-2025-10184, que demuestra la omisión del permiso de lectura de SMS en los proveedores de telefonía OPPO/OnePlus. Incluye código fuente, detalles de verificación y una solución manual para la vulnerabilidad.
Esta es una compilación APK del PoC de CVE‑2025‑10184
La vulnerabilidad existe en com.*.providers.telephony y permite que cualquier aplicación lea SMS sin tener permiso de lectura de SMS
Este código fuente y más detalles se pueden ver en el artículo de Rapid7:
https://www.rapid7.com/blog/post/cve-2025-10184-oneplus-oxygenos-telephony-provider-permission-bypass-not-fixed/
Por favor, inicia sesión y descarga el paquete de instalación sin firmar desde Actions
Se ha confirmado que OPPO y sus submarcas se ven afectados en todas las versiones desde ColorOS 7.1
OPPO ha corregido oficialmente este problema (reemplazando el permiso declarado por el Provider por OPLUS_COMPONENT_SAFE) y actualmente está implementando la actualización de forma gradual
La forma más sencilla de corregirlo: solo hay que verificar si el llamador tiene permiso SMS antes de la operación.
Nota: este método ya ha sido verificado para evitar la lectura y no afecta a las aplicaciones que realmente tienen permiso SMS, pero no se han realizado otras pruebas de impacto en la usabilidad
Añade la comprobación de permisos en tiempo de ejecución al inicio del método update de la clase ServiceNumberProvider:
.method public update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
.registers 8
+ invoke-virtual {p0}, Lcom/android/providers/telephony/ServiceNumberProvider;->getContext()Landroid/content/Context;
+ move-result-object v0
+
+ const-string v1, "android.permission.READ_SMS"
+ const-string v2, "Requires READ_SMS permission"
+ invoke-virtual {v0, v1, v2}, Landroid/content/Context;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+
.line 157
iget-object p0, p0, Lcom/android/providers/telephony/ServiceNumberProvider;->mOpenHelper:Lcom/android/providers/telephony/MmsSmsDatabaseHelper;
invoke-virtual {p0}, Lcom/android/providers/telephony/MmsSmsDatabaseHelper;->getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase;
move-result-object p0
# ... 省略其余原有代码
.end method
Las clases PushMessageProvider y PushShopProvider también necesitan añadir el código anterior en sus métodos update
Después de la modificación, no lo firmes y necesitarás instalar tras aplicar el core patch (parche del núcleo); de lo contrario, se romperá toda la funcionalidad de llamadas y se perderán todos los SMS (debido al mecanismo de seguridad del sistema)