MASTG-TEST-0235: Android App Configurations Allowing Cleartext Traffic
Overview¶
Since Android 9 (API level 28) cleartext HTTP traffic is blocked by default (thanks to the default Network Security Configuration) but there are multiple ways in which an application can still send it:
- AndroidManifest.xml: Setting the
android:usesCleartextTrafficattribute of the<application>tag. Note that this flag is ignored in case the Network Security Configuration is configured. - Network Security Configuration: Setting the
cleartextTrafficPermittedattribute totrueon<base-config>or<domain-config>elements.
Steps¶
- Reverse engineer the app ( Decompiling Java Code).
- Obtain the AndroidManifest.xml.
- Obtain the Network Security Configuration.
- Read the value of
usesCleartextTrafficfrom the AndroidManifest.xml. - Read the value of
cleartextTrafficPermittedfrom the NSC<base-config>element. - Read the value of
cleartextTrafficPermittedfrom the NSC<domain-config>elements.
Observation¶
The output contains a list of configurations potentially allowing for cleartext traffic.
Evaluation¶
The test case fails if cleartext traffic is permitted. This can happen if any of the following is true:
- The AndroidManifest sets
usesCleartextTraffictotrueand there's no NSC. - The NSC sets
cleartextTrafficPermittedtotruein the<base-config>. - The NSC sets
cleartextTrafficPermittedtotruein any<domain-config>.
Note: The test doesn't fail if the AndroidManifest sets usesCleartextTraffic to true and there's a NSC, even if it only has an empty <network-security-config> element. For example:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
</network-security-config>