Приложение не запрещает использование пользовательских клавиатур
Критичность: ИНФО | |
Способ обнаружения: DAST |
Описание
Сегодня существует так много клавиатур от сторонних производителей, что вы можете менять их каждый день и никогда не останавливаться. Некоторые предлагают лучшее предсказание слов, другие разные шрифты, скины и плавный ввод на разных языках. Но у большинства есть одна общая черта: чтобы иметь возможность реализовывать весь функционал, расширение клавиатуры просит пользователя «Разрешить полный доступ» в настройках. Большинство пользователей согласятся, не раздумывая. Предоставление полного доступа клавиатуре позволяет ей устанавливать интернет-соединения и получать доступ к системным ресурсам. Вот почему такие организации, как OWASP или ENISA, подчеркивают в своих руководствах, что приложения должны блокировать сторонние клавиатуры.
Специальные клавиатуры могут легко получить доступ к данным пользователей и отправлять эти данные на сервера злоумышленников. Помимо этого они могут использовать механизм Named Pasteboards и многие другие способы для той же цели.
Статистика использования сторонних клавиатур говорит сама за себя — они популярны.
И это только самые известные, другие расширения клавиатуры, такие как Go Keyboard, Touchpal, Minuum, Themeboard и сотни других, доступны после ввода слова «клавиатура» в строке поиска AppStore.
Рекомендации
iOS имеет функцию безопасности, которая блокирует появление пользовательских клавиатур в заданном поле ввода (т. е. пароля). Чтобы пользователь не переключился на стороннюю клавиатуру, используйте поле SecureTextEntry, так как оно автоматически переключается на системную клавиатуру; предоставление OpenAccess не имеет значения — в любом случае будет использоваться системная клавиатура.
Примечание
В случае возникновения уязвимости «Приложение не запрещает использование пользовательских клавиатур» необходимо дополнительно убедиться в наличии данного кода в приложении, так как сделать это средствами динамического анализа или при помощи дизассемблирования не представляется возможным. Система видит, что присутствует метод AppDelegate
, но что именно находится внутри, проверить нет возможности.
Другое решение — полностью отключить использование любых расширений клавиатуры в приложении. Для этого откажите в разрешении на использование расширений приложения на основе UIApplicationKeyboardExtensionPointIdentifier с помощью метода application:shouldAllowExtensionPointIdentifier
. Когда приложение реализует этот механизм, пользователи не смогут использовать стороннюю клавиатуру ни в одном поле приложения.
Для этого в код AppDelegate необходимо добавить опцию.
func application(application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: String) -> Bool {
if extensionPointIdentifier == UIApplicationKeyboardExtensionPointIdentifier {
return false
}
return true
}
func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard {
return false
}
return true
}