Skip to content

Latest commit

 

History

History
138 lines (116 loc) · 12.4 KB

4.vulnerabilities.md

File metadata and controls

138 lines (116 loc) · 12.4 KB

Vulnerability Results

Fake Identify

1. False Positive(6)

Service Helper Service Api
android.security.KeyStore <android.security.IKeystoreService: int getState(int)>
<android.security.IKeystoreService: int lock(int)>
<android.security.IKeystoreService: int isEmpty(int)>
android.content.pm.IPackageManager <com.android.server.pm.PackageManagerService: android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName,int)>
<com.android.server.pm.PackageManagerService: boolean performDexOptIfNeeded(java.lang.String,java.lang.String)>
android.content.RestrictionsManager <com.android.server.restrictions.RestrictionsManagerService$RestrictionsManagerImpl: android.os.Bundle getApplicationRestrictions(java.lang.String)>

2. True Positive which cause to privilege escalation or DoS(17)

Service Helper Service Api
android.print.PrintManager <com.android.server.print.PrintManagerService$PrintManagerImpl: android.os.Bundle print(java.lang.String,android.print.IPrintDocumentAdapter,android.print.PrintAttributes,java.lang.String,int,int)>
android.bluetooth.BluetoothHealth <android.bluetooth.IBluetoothHealth: boolean registerAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration,android.bluetooth.IBluetoothHealthCallback)>
android.media.AudioManager <com.android.server.audio.AudioService: void setStreamVolume(int,int,int,java.lang.String)>
<com.android.server.audio.AudioService: void setRingerModeExternal(int,java.lang.String)>
<com.android.server.audio.AudioService: void adjustStreamVolume(int,int,int,java.lang.String)>
<com.android.server.audio.AudioService: void setWiredDeviceConnectionState(int,int,java.lang.String,java.lang.String,java.lang.String)>
<com.android.server.audio.AudioService: void setMode(int,android.os.IBinder,java.lang.String)>
<com.android.server.audio.AudioService: boolean isValidRingerMode(int)>
<com.android.server.audio.AudioService: int requestAudioFocus(android.media.AudioAttributes,int,android.os.IBinder,android.media.IAudioFocus Dispatcher,java.lang.String,java.lang.String,int,android.media.audiopolicy.IAudioPolicyCallback)>
android.widget.Toast <android.app.INotificationManager: void enqueueToast(java.lang.String,android.app.ITransientNotification,int)>
android.media.session.MediaController <android.media.session.ISessionController: void adjustVolume(int,int,java.lang.String)>
<android.media.session.ISessionController: void setVolumeTo(int,int,java.lang.String)>
android.hardware.fingerprint.FingerprintManager <com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper: boolean hasEnrolledFingerprints(int,java.lang.String)>
<com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper: java.util.List getEnrolledFingerprints(int,java.lang.String)>
<com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper: long getAuthenticatorId(java.lang.String)>
<com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper: void cancelAuthentication(android.os.IBinder,java.lang.String)>
<com.android.server.fingerprint.FingerprintService$FingerprintServiceWrapper: boolean isHardwareDetected(long,java.lang.String)>

3. True Positive which not cause to serious security problems(36)

Service Helper Service Api
android.app.AppOpsManager <com.android.server.AppOpsService: int noteOperation(int,int,java.lang.String)>
<com.android.server.AppOpsService: void finishOperation(android.os.IBinder,int,int,java.lang.String)>
<com.android.server.AppOpsService: int noteProxyOperation(int,java.lang.String,int,java.lang.String)>
<com.android.server.AppOpsService: int startOperation(android.os.IBinder,int,int,java.lang.String)>
android.app.backup.BackupManager <android.app.backup.IBackupManager: android.app.backup.IRestoreSession beginRestoreSession(java.lang.String,java.lang.String)>
android.app.WallpaperManager <com.android.server.wallpaper.WallpaperManagerService: boolean isWallpaperSupported(java.lang.String)>
android.view.inputmethod.InputMethodManager <com.android.server.InputMethodManagerService: com.android.internal.view.InputBindResult startInput(com.android.internal.view.IInputMethodClient,com.android.internal.view.IInputContext,android.view.inputmethod.EditorInfo,int)>
<com.android.server.InputMethodManagerService: boolean hideSoftInput(com.android.internal.view.IInputMethodClient,int,android.os.ResultReceiver)>
<com.android.server.InputMethodManagerService: com.android.internal.view.InputBindResult windowGainedFocus(com.android.internal.view.IInputMethodClient,android.os.IBinder,int,int,int,android.view.inputmethod.EditorInfo,com.android.internal.view.IInputContext)>
android.app.admin.DevicePolicyManager <android.app.admin.IDevicePolicyManager: int getCurrentFailedPasswordAttempts(int)>
<android.app.admin.IDevicePolicyManager: boolean getCameraDisabled(android.content.ComponentName,int)>
<android.app.admin.IDevicePolicyManager: boolean getScreenCaptureDisabled(android.content.ComponentName,int)>
<android.app.admin.IDevicePolicyManager: android.content.ComponentName getProfileOwner(int)>
android.content.ClipboardManager <com.android.server.clipboard.ClipboardService: void setPrimaryClip(android.content.ClipData,java.lang.String)>
android.app.AlarmManager <com.android.server.AlarmManagerService$2: android.app.AlarmManager$AlarmClockInfo getNextAlarmClock(int)>
android.content.pm.IPackageManager <android.content.pm.IPackageManager: java.lang.String[] getPackagesForUid(int)>
android.net.wifi.WifiManager <com.android.server.wifi.WifiServiceImpl: java.util.List getBatchedScanResults(java.lang.String)>
android.hardware.display.DisplayManagerGlobal <com.android.server.display.DisplayManagerService$BinderService: int createVirtualDisplay(android.hardware.display.IVirtualDisplayCallback,android.media.projection.IMediaProjection,java.lang.String,java.lang.String,int,int,int,android.view.Surface,int)>
<com.android.server.display.DisplayManagerService$BinderService: android.view.DisplayInfo getDisplayInfo(int)>
android.media.MediaRouter <com.android.server.media.MediaRouterService: void setSelectedRoute(android.media.IMediaRouterClient,java.lang.String,boolean)>
<com.android.server.media.MediaRouterService: android.media.MediaRouterClientState getState(android.media.IMediaRouterClient)>
<com.android.server.media.MediaRouterService: void setDiscoveryRequest(android.media.IMediaRouterClient,int,boolean)>
<com.android.server.audio.AudioService: int getStreamVolume(int)>
<com.android.server.audio.AudioService: int getStreamMaxVolume(int)>
android.location.LocationManager <com.android.server.LocationManagerService: void removeUpdates(android.location.ILocationListener,android.app.PendingIntent,java.lang.String)>
android.widget.Toast <android.app.INotificationManager: void cancelToast(java.lang.String,android.app.ITransientNotification)
android.nfc.cardemulation.CardEmulation <android.nfc.INfcCardEmulation: boolean registerAidGroupForService(int,android.content.ComponentName,android.nfc.cardemulation.AidGroup)>
<android.nfc.INfcCardEmulation: boolean setDefaultForNextTap(int,android.content.ComponentName)>
<android.nfc.INfcCardEmulation: android.nfc.cardemulation.AidGroup getAidGroupForService(int,android.content.ComponentName,java.lang.String)>
<android.nfc.INfcCardEmulation: boolean removeAidGroupForService(int,android.content.ComponentName,java.lang.String)>
<android.nfc.INfcCardEmulation: java.util.List getServices(int,java.lang.String)>
<android.nfc.INfcCardEmulation: boolean isDefaultServiceForCategory(int,android.content.ComponentName,java.lang.String)>"
android.app.VoiceInteractor <com.android.internal.app.IVoiceInteractor: boolean[] supportsCommands(java.lang.String,java.lang.String[])>
android.app.usage.UsageStatsManager <com.android.server.usage.UsageStatsService$BinderService: boolean isAppInactive(java.lang.String,int)>
android.nfc.NfcAdapter <android.nfc.INfcAdapter: android.nfc.INfcAdapterExtras getNfcAdapterExtrasInterface(java.lang.String)>

System Environment Bypassing

1. False Positive(1)

Service Helper Service Api
android.app.AppOpsManager <com.android.server.AppOpsService: android.os.IBinder getToken(android.os.IBinder)>

2. True Positive(9)

Service Helper Service Api
android.app.WallpaperManager <com.android.server.wallpaper.WallpaperManagerService: android.os.ParcelFileDescriptor getWallpaper(android.app.IWallpaperManagerCallback,android.os.Bundle)>
android.hardware.display.DisplayManagerGlobal <com.android.server.display.DisplayManagerService$BinderService: void releaseVirtualDisplay(android.hardware.display.IVirtualDisplayCallback)>
android.view.inputmethod.InputMethodManager <android.inputmethodservice.IInputMethodSessionWrapper: void displayCompletions(android.view.inputmethod.CompletionInfo[])>
android.media.MediaRouter <com.android.server.media.MediaRouterService: void unregisterClient(android.media.IMediaRouterClient)>
<com.android.server.media.MediaRouterService: android.media.MediaRouterClientState getState(android.media.IMediaRouterClient)>
<com.android.server.audio.AudioService: void setBluetoothA2dpOn(boolean)>
<com.android.server.audio.AudioService: android.media.AudioRoutesInfo startWatchingRoutes(android.media.IAudioRoutesObserver)>
android.service.wallpaper.WallpaperService$Engine <android.view.IWindowSession: void finishDrawing(android.view.IWindow)>
<android.service.wallpaper.IWallpaperConnection: void engineShown(android.service.wallpaper.IWallpaperEngine)>

Fake Status

1. True Positive(13)

Service Helper Service Api
android.view.accessibility.AccessibilityManager <com.android.server.accessibility.AccessibilityManagerService: void interrupt(int)>
<com.android.server.accessibility.AccessibilityManagerService: boolean sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent,int)>
android.app.IUiAutomationConnection <android.app.IUiAutomationConnection: void disconnect()>
android.media.tv.TvInputManager$Session <android.media.tv.ITvInputManager: void createOverlayView(android.os.IBinder,android.os.IBinder,android.graphics.Rect,int)>
android.nfc.Tag <android.nfc.INfcTag: android.nfc.Tag rediscover(int)>
android.hardware.camera2.impl.CameraDeviceImpl <android.hardware.camera2.ICameraDeviceUser: int waitUntilIdle()>
android.service.voice.VoiceInteractionSession <com.android.server.voiceinteraction.VoiceInteractionManagerService$VoiceInteractionManagerServiceStub: boolean showSessionFromSession(android.os.IBinder,android.os.Bundle,int)>
<com.android.internal.app.IVoiceInteractionManagerService: void finish(android.os.IBinder)>
<com.android.internal.app.IVoiceInteractionManagerService: boolean hideSessionFromSession(android.os.IBinder)>
android.view.WindowId <android.view.IWindowId: void registerFocusObserver(android.view.IWindowFocusObserver)>
<android.view.IWindowId: void unregisterFocusObserver(android.view.IWindowFocusObserver)>
android.nfc.NfcAdapter <android.nfc.INfcAdapter: void setForegroundDispatch(android.app.PendingIntent,android.content.IntentFilter[],android.nfc.TechListParcel)>
android.service.trust.TrustAgentService <android.service.trust.ITrustAgentServiceCallback: void grantTrust(java.lang.CharSequence,long,int)>

2. False Positive(6)

Service Helper Service Api
android.service.voice.VoiceInteractionService com.android.server.voiceinteraction.VoiceInteractionManagerService$VoiceInteractionManagerServiceStub: void showSession(android.service.voice.IVoiceInteractionService,android.os.Bundle,int)>
android.hardware.camera2.impl.CameraDeviceImpl <android.hardware.camera2.ICameraDeviceUser: int endConfigure(boolean)>
<android.hardware.camera2.ICameraDeviceUser: int createInputStream(int,int,int)>
<android.hardware.camera2.ICameraDeviceUser: int createStream(android.hardware.camera2.params.OutputConfiguration)>
android.net.wifi.RttManager <com.android.server.wifi.RttService$RttServiceImpl: android.net.wifi.RttManager$RttCapabilities getRttCapabilities()>
android.bluetooth.BluetoothGatt android.bluetooth.IBluetooth: java.lang.String getAddress()>

Other vulnerabilities

Illegal parameters and IPC flooding can be verified via automatically analysis. Some of these APIs can cause to app crash or system carsh and some may throw exception and captured by the Parcel.

The results and poc apps are shown in:

https://github.com/fripSide/ServiceApiAutoTest