# APK Build for CVE‑2025‑10184 PoC
这是一个 **CVE‑2025‑10184** 的 **PoC** 的 APK 构建
该漏洞存在于 com.\*.providers.telephony 中, 允许任意应用在未获得 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), 目前正在逐步推送更新
---
## 等不了 OPPO 了, 我他妈自己修
最简单的修复方法:只需要在操作之前验证调用者是否拥有 SMS 权限
注:此方法已验证可以防止读取, 并且不影响真正拥有 SMS 权限的应用读取, 但是未进行其他可用性影响测试
在 `ServiceNumberProvider` 类的 `update` 方法开头添加运行时权限检查:
```diff
.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
```
在 `PushMessageProvider` 类和 `PushShopProvider` 类的 `update` 方法也需要添加以上代码
修改后请 **不要签名** 并且需要 **核心破解** 后安装, 否则将破坏整个通话功能并丢失所有短信 (系统安全机制所致)
[4.0K] /data/pocs/a34a1d1c0ea18afc7f5c1f60494aa00327567409
├── [4.0K] app
│ ├── [ 953] build.gradle
│ ├── [ 751] proguard-rules.pro
│ └── [4.0K] src
│ ├── [4.0K] androidTest
│ │ └── [4.0K] java
│ │ └── [4.0K] poc
│ │ └── [4.0K] chutchut
│ │ └── [4.0K] cpblindsqli
│ │ └── [ 775] ExampleInstrumentedTest.java
│ ├── [4.0K] main
│ │ ├── [ 754] AndroidManifest.xml
│ │ ├── [4.0K] java
│ │ │ └── [4.0K] poc
│ │ │ └── [4.0K] chutchut
│ │ │ └── [4.0K] cpblindsqli
│ │ │ ├── [ 14K] MainActivity.java
│ │ │ └── [9.3K] QueryParser.java
│ │ └── [4.0K] res
│ │ ├── [4.0K] drawable
│ │ │ └── [5.5K] ic_launcher_background.xml
│ │ ├── [4.0K] drawable-v24
│ │ │ └── [1.7K] ic_launcher_foreground.xml
│ │ ├── [4.0K] layout
│ │ │ └── [1.8K] activity_main.xml
│ │ ├── [4.0K] mipmap-anydpi-v26
│ │ │ ├── [ 272] ic_launcher_round.xml
│ │ │ └── [ 272] ic_launcher.xml
│ │ ├── [4.0K] mipmap-hdpi
│ │ │ ├── [3.5K] ic_launcher.png
│ │ │ └── [5.2K] ic_launcher_round.png
│ │ ├── [4.0K] mipmap-mdpi
│ │ │ ├── [2.6K] ic_launcher.png
│ │ │ └── [3.3K] ic_launcher_round.png
│ │ ├── [4.0K] mipmap-xhdpi
│ │ │ ├── [4.8K] ic_launcher.png
│ │ │ └── [7.3K] ic_launcher_round.png
│ │ ├── [4.0K] mipmap-xxhdpi
│ │ │ ├── [7.7K] ic_launcher.png
│ │ │ └── [ 12K] ic_launcher_round.png
│ │ ├── [4.0K] mipmap-xxxhdpi
│ │ │ ├── [ 10K] ic_launcher.png
│ │ │ └── [ 16K] ic_launcher_round.png
│ │ └── [4.0K] values
│ │ ├── [ 208] colors.xml
│ │ ├── [ 74] strings.xml
│ │ └── [ 383] styles.xml
│ └── [4.0K] test
│ └── [4.0K] java
│ └── [4.0K] poc
│ └── [4.0K] chutchut
│ └── [4.0K] cpblindsqli
│ └── [ 396] ExampleUnitTest.java
├── [ 574] build.gradle
├── [4.0K] gradle
│ └── [4.0K] wrapper
│ ├── [ 53K] gradle-wrapper.jar
│ └── [ 230] gradle-wrapper.properties
├── [1.1K] gradle.properties
├── [5.2K] gradlew
├── [2.1K] gradlew.bat
├── [2.2K] README.md
└── [ 46] settings.gradle
31 directories, 33 files