Предупреждение Android Studio при использовании PackageManager.GET_SIGNATURES
Мне нужно получить подпись пакета. Поэтому я использую этот код:
Signature[] sigs = c.getPackageManager().getPackageInfo(c.getPackageName(),
PackageManager.GET_SIGNATURES).signatures;
Но Android Studio дает мне это предупреждение:
Чтение подписей приложений из getPackageInfo: сигнатуры приложений могут быть использованы, если они не были правильно проверены; см. описание проблемы для деталей. меньше... (Ctrl + F1) Неправильная проверка подписей приложений может привести к проблемам, когда вредоносное приложение отправляется в Play Store с его реальным сертификатом и поддельным сертификатом и получает доступ к функциям или информации, которые он не должен иметь из-за другого приложения, только проверяющего наличие поддельного сертификата и игнорируя остальных. Убедитесь, что все подписи возвращены этим методом.
Что означает подтверждение подписей в этом случае? Я собираюсь проверить подписи на сервере, чтобы убедиться, что они совпадают, это то, что они означают?
При локальном тестировании все эти выходы представляют собой один отрицательный Integer
, а не array
, поскольку код будет иметь его.
Ответы
Ответ 1
Отслеживание всплывающего текста приводит к фрагменту исходного кода в Android Studio.
В том же файле есть строка, содержащая ссылку на ресурс outern.
Дальнейшее отслеживание приводит к этой презентации об уязвимости "Fake ID".
Описание проблемы:
Проблема заключается в том, что, когда Android строит цепочку доверия, процесс проверки только сравнивает "объект", а не сравнивает фактический ключ с тем, который указан в деталях подписывающего сертификата. В результате злоумышленник может возиться с цепочкой доверия и заявлять, что ее подписывает сторона - без подписания стороны.
Из-за этой ошибки создается некорректная цепочка сертификатов и может включать в себя законные сертификаты, которые встроены в APK, но не были использованы для фактического подписания приложения.
Вот фиксация в исходный код Android, который предотвращает использование этой уязвимости.
Это означает, что если у устройства Android 4.4 проблема не происходит. При работе с более низкими устройствами Android API это может нанести вред.