
Android APK proof-of-concept для CVE-2025-10184, демонстрирующий обход разрешения на чтение SMS в телекоммуникационных провайдерах OPPO/OnePlus. Включает исходный код, детали проверки и ручное исправление уязвимости.
Это сборка APK для PoC CVE‑2025‑10184
Уязвимость находится в com.*.providers.telephony и позволяет любому приложению читать SMS без разрешения на чтение SMS.
Исходный код и дополнительные детали можно найти в статье Rapid7:
https://www.rapid7.com/blog/post/cve-2025-10184-oneplus-oxygenos-telephony-provider-permission-bypass-not-fixed/
Пожалуйста, войдите в систему и загрузите неподписанный установочный пакет в Actions.
Подтверждено, что OPPO и его дочерние бренды, начиная с ColorOS 7.1, уязвимы во всех версиях.
OPPO официально исправила эту проблему (заменив разрешение, объявленное Provider, на OPLUS_COMPONENT_SAFE) и в настоящее время постепенно распространяет обновление.
Самый простой способ исправления: просто проверять, имеет ли вызывающий разрешение SMS перед выполнением операции.
Примечание: этот метод проверен и может предотвратить чтение, не влияя на чтение приложениями, которые действительно имеют разрешение SMS, но другие тесты на влияние на работоспособность не проводились.
В методе update класса 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
В методы update классов PushMessageProvider и PushShopProvider также необходимо добавить указанный выше код.
После изменения не подписывайте и устанавливайте только после взлома ядра (core patch), иначе будет нарушена работа функции звонков и потеряны все SMS (из-за механизма безопасности системы).