Fixing an Active Unlock security vulnerability.

Now if the trustagent dies within 15 seconds of granting renewable
trust, we will lock the phone.

BUG: 258241999
Test: manually tested
Change-Id: I69057288a9bc76ffa90192c6f6531346fe815d91
This commit is contained in:
Your Name
2022-11-17 23:42:27 +00:00
committed by Jacob Hobbie
parent 14a97df160
commit 48ee13b659

View File

@@ -107,6 +107,7 @@ public class TrustAgentWrapper {
// Trust state
private boolean mTrusted;
private boolean mWaitingForTrustableDowngrade = false;
private boolean mWithinSecurityLockdownWindow = false;
private boolean mTrustable;
private CharSequence mMessage;
private boolean mDisplayTrustGrantedMessage;
@@ -160,6 +161,7 @@ public class TrustAgentWrapper {
mDisplayTrustGrantedMessage = (flags & FLAG_GRANT_TRUST_DISPLAY_MESSAGE) != 0;
if ((flags & FLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE) != 0) {
mWaitingForTrustableDowngrade = true;
setSecurityWindowTimer();
} else {
mWaitingForTrustableDowngrade = false;
}
@@ -452,6 +454,9 @@ public class TrustAgentWrapper {
if (mBound) {
scheduleRestart();
}
if (mWithinSecurityLockdownWindow) {
mTrustManagerService.lockUser(mUserId);
}
// mTrustDisabledByDpm maintains state
}
};
@@ -673,6 +678,22 @@ public class TrustAgentWrapper {
}
}
private void setSecurityWindowTimer() {
mWithinSecurityLockdownWindow = true;
long expiration = SystemClock.elapsedRealtime() + (15 * 1000); // timer for 15 seconds
mAlarmManager.setExact(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
expiration,
TAG,
new AlarmManager.OnAlarmListener() {
@Override
public void onAlarm() {
mWithinSecurityLockdownWindow = false;
}
},
Handler.getMain());
}
public boolean isManagingTrust() {
return mManagingTrust && !mTrustDisabledByDpm;
}
@@ -691,7 +712,6 @@ public class TrustAgentWrapper {
public void destroy() {
mHandler.removeMessages(MSG_RESTART_TIMEOUT);
if (!mBound) {
return;
}