Skip to main content

Fragment Injection

Description

The application is vulnerable to Fragment Injection caused either by an unsafe implementation of PreferenceActivity or an insecure configuration of isValidFragment.

Impact

Use malicious fragments to exploit different vulnerabilities.

Recommendation

  • Set the attribute exported to false to avoid the attempt of foreign applications to exploit the vulnerability.
  • Ensure the application is running with targetSdkVersion higher than 19.
  • Set a whitelist of trusted fragments and validate them through the implementation of isValidFragment.

Threat

Authenticated attacker from the Internet.

Expected Remediation Time

⌚ 120 minutes.

Score

Default score using CVSS 3.1. It may change depending on the context of the src.

Base

  • Attack vector: N
  • Attack complexity: H
  • Privileges required: L
  • User interaction: N
  • Scope: U
  • Confidentiality: N
  • Integrity: L
  • Availability: N

Temporal

  • Exploit code madurity: P
  • Remediation level: O
  • Report confidence: R

Result

  • Vector string: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N/E:P/RL:O/RC:R
  • Score:
    • Base: 3.1
    • Temporal: 2.7
  • Severity:
    • Base: Low
    • Temporal: Low

Score 4.0

Default score using CVSS 4.0 . It may change depending on the context of the src.

Base 4.0

  • Attack vector: N
  • Attack complexity: H
  • Attack Requirements: N
  • Privileges required: L
  • User interaction: N
  • Confidentiality (VC): N
  • Integrity (VI): L
  • Availability (VA): N
  • Confidentiality (SC): N
  • Integrity (SI): N
  • Availability (SA): N

Threat 4.0

  • Exploit madurity: P

Result 4.0

  • Vector string: CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:P
  • Score:
    • CVSS-BT: 1.3
  • Severity:
    • CVSS-BT: Low

Compliant code

Implement a check for every fragment introduced to the application

public boolean isValidFragment(String fragmentName) {
return MyFragment.class.getName().equals(fragmentName);
}

Non compliant code

There are unverified inputs that are used to put fragments into the application

@Override
String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
Bundle initialArguments = getIntent().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
if (savedInstanceState != null) {
//Handle Exception
} else {
if (initialFragment != null && mSinglePane) {
// Add Fragment to the application
}
}
}

Requirements

Fixes

free trial

Search for vulnerabilities in your apps for free with Fluid Attacks' automated security testing! Start your 21-day free trial and discover the benefits of the Continuous Hacking Essential plan. If you prefer the Advanced plan, which includes the expertise of Fluid Attacks' hacking team, fill out this contact form.