Compare commits

...

4 Commits

Author SHA1 Message Date
Christophe Zurn
a1f24bbe8a Fix docs links 2025-03-28 11:12:36 +01:00
Christophe Zurn
ca1bac08b1 Message 2025-03-27 18:23:35 +01:00
Christophe Zurn
2b26f192c2 Add kotlin and fix java 2025-03-27 18:15:36 +01:00
christophe-zurn-sonarsource
f0ae1c0e03 Add kotlin to rule S6384 2025-03-27 16:44:29 +00:00
9 changed files with 173 additions and 80 deletions

View File

@ -1,4 +1,4 @@
=== Documentation
* https://support.google.com/faqs/answer/9267555?hl=en[support.google.com] - Remediation for Intent Redirection Vulnerability
https://developer.android.com/topic/security/risks/intent-redirection[developer.android.com] - Intent redirection
* Google Support - https://support.google.com/faqs/answer/9267555?hl=en[Remediation for Intent Redirection Vulnerability]
* Android Documentation - https://developer.android.com/topic/security/risks/intent-redirection[Intent redirection]

62
rules/S6384/impact.adoc Normal file
View File

@ -0,0 +1,62 @@
=== What is the potential impact?
An affected component that forwards a malicious externally provided intent does so using the vulnerable application's context. In particular, the new component is created with the same permissions as the application and without limitations on what feature can be reached.
Therefore, an attacker exploiting an intent redirection vulnerability could
manage to access a private application's components. Depending on the features
privately exposed, this can lead to further exploitations, sensitive data
disclosure, or even persistent code execution.
==== Information disclosure
An attacker can use the affected feature as a gateway to access other components
of the vulnerable application, even if they are not exported. This includes
features that handle sensitive information.
Therefore, by crafting a malicious intent and submitting it to the vulnerable
redirecting component, an attacker can retrieve most data exposed by private
features. This affects the confidentiality of information that is not
protected by an additional security mechanism, such as an encryption algorithm.
==== Attack surface increase
Because the attacker can access most components of the application, they can
identify and exploit other vulnerabilities that would be present in them. The
actual impact depends on the nested vulnerability. Exploitation probability
depends on the in-depth security level of the application.
==== Privilege escalation
If the vulnerable application has privileges on the underlying devices, an
attacker exploiting the redirection issue might take advantage of them. For
example by crafting a malicious intent action, the attacker could be able to
pass phone calls on behalf of the entitled application.
This can lead to various attack scenarios depending on the exploited
permissions.
==== Persistent code execution
A lot of applications rely on dynamic code loading to implement a variety of
features, such as:
* Minor feature updates.
* Application package size reduction.
* DRM or other code protection features.
When a component exposes a dynamic code loading feature, an attacker could use
it during the redirection's exploitation to deploy malicious code into the
application. The component can be located in the application itself or one of
its dependencies.
Such an attack would compromise the application execution environment entirely
and lead to multiple security threats. The malicious code could:
* Intercept and exfiltrate all data used in the application.
* Steal authentication credentials to third-party services.
* Change the application's behavior to serve another malicious purpose
(phishing, ransoming, etc)
Note that in most cases, the deployed malware can persist application or
hosting device restarts.

View File

@ -8,12 +8,13 @@ include::../../common/fix/code-rationale.adoc[]
[source,java,diff-id=1,diff-type=noncompliant]
----
public class Noncompliant extends AppCompatActivity {
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Intent forward = (Intent) intent.getParcelableExtra("anotherintent");
startActivity(forward); // Noncompliant
startActivity(forward);
}
}
----
@ -26,13 +27,10 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Intent forward = (Intent) intent.getParcelableExtra("anotherintent");
ComponentName name = forward.resolveActivity(getPackageManager());
if (name.getPackageName().equals("safePackage") &&
name.getClassName().equals("safeClass")) {
if (name.getPackageName().equals("safePackage") && name.getClassName().equals("safeClass")) {
startActivity(forward);
}
}

View File

@ -1,77 +1,8 @@
== Why is this an issue?
Intent redirection vulnerabilities occur when an application publicly exposes a
feature that uses an externally provided intent to start a new component.
In that case, an application running on the same device as the affected one can
launch the exposed, vulnerable component and provide it with a specially crafted
intent. Depending on the application's configuration and logic, this intent will
be used in the context of the vulnerable application, which poses a security
threat.
=== What is the potential impact?
An affected component that forwards a malicious externally provided intent does so using the vulnerable application's context. In particular, the new component is created with the same permissions as the application and without limitations on what feature can be reached.
Therefore, an attacker exploiting an intent redirection vulnerability could
manage to access a private application's components. Depending on the features
privately exposed, this can lead to further exploitations, sensitive data
disclosure, or even persistent code execution.
==== Information disclosure
An attacker can use the affected feature as a gateway to access other components
of the vulnerable application, even if they are not exported. This includes
features that handle sensitive information.
Therefore, by crafting a malicious intent and submitting it to the vulnerable
redirecting component, an attacker can retrieve most data exposed by private
features. This affects the confidentiality of information that is not
protected by an additional security mechanism, such as an encryption algorithm.
==== Attack surface increase
Because the attacker can access most components of the application, they can
identify and exploit other vulnerabilities that would be present in them. The
actual impact depends on the nested vulnerability. Exploitation probability
depends on the in-depth security level of the application.
==== Privilege escalation
If the vulnerable application has privileges on the underlying devices, an
attacker exploiting the redirection issue might take advantage of them. For
example by crafting a malicious intent action, the attacker could be able to
pass phone calls on behalf of the entitled application.
This can lead to various attack scenarios depending on the exploited
permissions.
==== Persistent code execution
A lot of applications rely on dynamic code loading to implement a variety of
features, such as:
* Minor feature updates.
* Application package size reduction.
* DRM or other code protection features.
When a component exposes a dynamic code loading feature, an attacker could use
it during the redirection's exploitation to deploy malicious code into the
application. The component can be located in the application itself or one of
its dependencies.
Such an attack would compromise the application execution environment entirely
and lead to multiple security threats. The malicious code could:
* Intercept and exfiltrate all data used in the application.
* Steal authentication credentials to third-party services.
* Change the application's behavior to serve another malicious purpose
(phishing, ransoming, etc)
Note that in most cases, the deployed malware can persist application or
hosting device restarts.
include::../rationale.adoc[]
include::../impact.adoc[]
// How to fix it section
@ -95,3 +26,9 @@ Change this code to not perform arbitrary intent redirection.
endif::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]

View File

@ -0,0 +1,47 @@
== How to fix it in Android
=== Code examples
include::../../common/fix/code-rationale.adoc[]
==== Noncompliant code example
[source,kotlin,diff-id=1,diff-type=noncompliant]
----
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val forward = intent.getParcelableExtra("anotherintent") as? Intent
startActivity(forward)
}
}
----
==== Compliant solution
[source,kotlin,diff-id=1,diff-type=compliant]
----
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val forward = intent.getParcelableExtra("anotherintent") as? Intent
val name = forward?.resolveActivity(packageManager)
if (name?.packageName == "safePackage" && name.className == "safeClass")
startActivity(forward)
}
}
----
=== How does this work?
include::../../common/fix/introduction.adoc[]
include::../../common/fix/destination.adoc[]
The example compliant code uses the `resolveActivity` method of the inner intent
to determine its target component. It then uses the `packageName` and
`className` properties to validate this destination is not sensitive.
include::../../common/fix/origin.adoc[]
include::../../common/fix/permissions.adoc[]

View File

@ -0,0 +1,2 @@
{
}

View File

@ -0,0 +1,34 @@
== Why is this an issue?
include::../rationale.adoc[]
include::../impact.adoc[]
// How to fix it section
include::./how-to-fix-it/android.adoc[]
== Resources
include::../common/resources/docs.adoc[]
include::../common/resources/standards.adoc[]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Change this code to not perform arbitrary intent redirection.
endif::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]

4
rules/S6384/message.adoc Normal file
View File

@ -0,0 +1,4 @@
=== Message
Change this code to not perform arbitrary intent redirection.

View File

@ -0,0 +1,9 @@
Intent redirection vulnerabilities occur when an application publicly exposes a
feature that uses an externally provided intent to start a new component.
In that case, an application running on the same device as the affected one can
launch the exposed, vulnerable component and provide it with a specially crafted
intent. Depending on the application's configuration and logic, this intent will
be used in the context of the vulnerable application, which poses a security
threat.