Предупреждение 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 это может нанести вред.