Commit Graph

3 Commits

Author SHA1 Message Date
Christopher Tate
4e9ec49d5e Let the autoVerify evaluator query all packages
App enumeration lockdown broke autoVerify; now it's fixed.

Bug: 149722946
Test: atest OsHostTests#testIntentFilterHostValidation
Change-Id: Ibad01d5e9e80ad0ec11cf1d741b6a8dd92e9009b
2020-02-26 13:10:05 -08:00
Paul Duffin
1f49e4e3d5 Add dependencies on org.apache.http.legacy where needed
Incorporates two main changes:
* Stops statically including the org.apache.http.legacy library. That library is
  a stubs library so it makes no sense to statically include it.
* Adds uses-library declaration for org.apache.http.legacy to those packages
  that depend on org.apache.http.legacy, either directly or transitively.

The following change descriptions were generated automatically and so
may be a little repetitive. They are provided to give the reviewer
enough information to check the comments match what has actually been
changed and check the reasoning behind the changes.

* packages/StatementService/AndroidManifest.xml
    Added <uses-library> for org.apache.http.legacy to ensure classes
    are provided at runtime. It is not treated as optional as the
    application is not intended to be run on a version that does not
    provide the library, i.e. its minSdkVersion is >= M (23)

Bug: 18027885
Test: m -j32 droid && adb reboot bootloader && fastboot flashall -w
Change-Id: I96e467a1916bd6c3f4b33164fae940f322fef80c
2017-07-24 15:46:40 +01:00
Joseph Wen
6a34bb2d6a Implement IntentFilter verification service.
This commit adds a verifier that verifies a host delegates permission for
an app to handle Url for the host using the Statement protocol.

- Implements the Statement protocol
-- The protocol defines a file format that represents statements.
-- The protocol defines where each asset type should put their statement
declaration. For web asset, the statement file should be hosted at
<scheme>://<host>:<port>/.well-known/associations.json.

- Implements IntentFilterVerificationReceiver, an interface between
StatementService and PackageManager. PackageManager will send a
broadcast with action Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION.
The service will process the request and returns the results by calling
PackageManager.verifyIntentFilter().

To verify an IntentFilter like this defined in Android app com.test.app
<intent-filter>
  <data android:scheme="https" />
  <data android:host="www.test.com" />
  <data android:pathPattern=".*"/>
</intent-filter>

The service will try to retrieve the statement file from
https://www.test.com:443/.well-known/associations.json and try to find
a JSON object equivalent to
{'relation': ['delegate_permission/common.handle_all_urls'],
 'target': {'namespace': 'android_app',
            'package_name': 'com.test.app',
            'sha256_cert_fingerprints': [APP_CERT_FP]}}
The entry should have the correct relation, package name, and
certificate sha256 fingerprint.

Because this implementation will send a HTTP request for each host
specified in the intent-filter in AndroidManifest.xml, to avoid overwhelming
the network at app install time, we limit the maximum number of hosts we will
verify for a single app to 10. Any app with more than 10 hosts in the
autoVerify=true intent-filter won't be auto verified.

Change-Id: I787c9d176e4110aa441eb5fe4fa9651a071c6610
2015-04-07 16:57:40 -04:00