딥 링크의 안전하지 않은 사용
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
OWASP 카테고리: MASVS-PLATFORM: 플랫폼 상호작용
개요
딥 링크와 관련된 보안 위험은 모바일 애플리케이션 내에서 원활한 탐색과 상호작용을 지원하는 핵심 기능에서 비롯됩니다. 딥 링크 취약점은 딥 링크의 구현 또는 처리에 취약점이 있기 때문에 발생합니다. 악의적인 행위자가 권한이 있는 기능이나 데이터에 액세스하는 데 이러한 결함을 악용하여 정보 유출, 개인 정보 보호 위반, 승인되지 않은 조치로 이어질 수 있습니다. 공격자는 딥 링크 도용 및 데이터 유효성 검사 공격과 같은 다양한 기법을 통해 이러한 취약점을 악용할 수 있습니다.
영향
적절한 딥 링크 유효성 검사 메커니즘이 없거나 딥 링크가 안전하게 사용되지 않으면 악의적인 사용자가 취약한 애플리케이션의 권한 컨텍스트 내에서 호스트 유효성 검사 우회, 교차 앱 스크립팅, 원격 코드 실행과 같은 공격을 실행하는 데 도움이 될 수 있습니다. 애플리케이션의 특성에 따라 민감한 정보 또는 함수에 대한 무단 액세스가 발생할 수 있습니다.
완화 조치
딥 링크 도용 방지
Android는 설계상 여러 앱이 동일한 딥 링크 URI에 인텐트 필터를 등록할 수 있도록 허용합니다. 악성 앱이 앱을 위한 딥 링크를 가로채지 못하게 하려면 애플리케이션의 AndroidManifest
내 intent-filter
에 android:autoVerify
속성을 구현합니다. 이를 통해 사용자는 딥 링크 처리를 위해 선호하는 앱을 선택하여 의도한 작업을 보장하고 악성 애플리케이션이 자동으로 해석하지 못하도록 할 수 있습니다.
Android 12에서는 보안을 개선하기 위해 웹 인텐트를 더 엄격하게 처리하는 기능을 도입했습니다.
이제 Android App Links나 시스템 설정에서 사용자 선택을 통해 특정 도메인의 링크를 처리하려면 앱을 인증해야 합니다. 이렇게 하면 앱이 처리해서는 안 되는 링크를 도용하지 못합니다.
앱의 링크 처리 인증을 사용 설정하려면 다음 형식과 일치하는 인텐트 필터를 추가합니다. 이 예는 Android App Links 확인 문서에서 가져온 것입니다.
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
강력한 데이터 검증 구현
딥 링크에는 추가 작업을 실행하는 등 타겟 인텐트에 제공되는 추가 매개변수가 포함될 수 있습니다. 안전한 딥 링크 처리의 기반은 엄격한 데이터 유효성 검사입니다. 딥 링크에서 수신되는 모든 데이터는 개발자가 꼼꼼하게 검증하고 정리하여 악성 코드나 값이 합법적인 애플리케이션 내에 삽입되는 것을 방지해야 합니다.
이는 딥 링크 매개변수의 값을 예상 값의 사전 정의된 허용 목록과 비교하여 구현할 수 있습니다.
앱은 민감한 정보를 노출하기 전에 인증 상태, 승인 등 다른 관련 내부 상태를 확인해야 합니다. 게임 한 레벨을 완료하면 보상을 제공하는 것을 예로 들 수 있습니다. 이 경우 레벨을 완료했다는 기본 조건을 확인하고 완료하지 않은 경우 기본 화면으로 리디렉션하는 것이 좋습니다.
리소스
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-26(UTC)"],[],[],null,["# Unsafe use of deep links\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\nOverview\n--------\n\nThe security risks associated with deep links stem from their core capability of\nenabling seamless navigation and interaction within mobile applications. Deep\nlink vulnerabilities arise from weaknesses in the implementation or handling of\ndeep links. These flaws can be exploited by malicious actors to gain access to\nprivileged functions or data, potentially resulting in data breaches, privacy\nviolations, and unauthorized actions. Attackers can exploit these\nvulnerabilities through various techniques, such as deep link hijacking and data\nvalidation attacks.\n\nImpact\n------\n\nThe lack of a proper deep link validation mechanism, or the unsafe use of\ndeeplinks, can aid malicious users in performing attacks such as host validation\nbypass, cross-app scripting, and remote code execution within the permissions\ncontext of the vulnerable application. Depending on the nature of the\napplication, this can result in unauthorized access to sensitive data or\nfunctions.\n\nMitigations\n-----------\n\n### Prevent deep link hijacking\n\nBy design, Android allows multiple apps to register intent filters for the same\ndeep link URI. To prevent malicious apps from intercepting deep links intended\nfor your app, implement the `android:autoVerify` attribute in `intent-filter`\nwithin the application's `AndroidManifest`. This allows users to select their\npreferred app for handling deep links, ensuring the intended operation and\npreventing malicious applications from automatically interpreting them.\n\nAndroid 12 [introduced](/about/versions/12/behavior-changes-all#web-intent-resolution) stricter handling of web intents to improve security.\nApps must now be verified to handle links from specific domains, either through\nAndroid App Links or user selection in system settings. This prevents apps from\nhijacking links they shouldn't handle.\n\nTo enable link handling verification for your app, add intent filters that match\nthe following format (this example is taken from the [Verify Android App\nLinks](/training/app-links/verify-android-applinks) documentation): \n\n \u003c!-- Make sure you explicitly set android:autoVerify to \"true\". --\u003e\n \u003cintent-filter android:autoVerify=\"true\"\u003e\n \u003caction android:name=\"android.intent.action.VIEW\" /\u003e\n \u003ccategory android:name=\"android.intent.category.DEFAULT\" /\u003e\n \u003ccategory android:name=\"android.intent.category.BROWSABLE\" /\u003e\n \n \u003c!-- If a user clicks on a shared link that uses the \"http\" scheme, your\n app should be able to delegate that traffic to \"https\". --\u003e\n \u003cdata android:scheme=\"http\" /\u003e\n \u003cdata android:scheme=\"https\" /\u003e\n \n \u003c!-- Include one or more domains that should be verified. --\u003e\n \u003cdata android:host=\"...\" /\u003e\n \u003c/intent-filter\u003e\n\n### Implement robust data validation\n\nDeep links can include additional parameters that are served to the target\nintent, for example, to perform further actions. The foundation of secure deep\nlink handling is stringent data validation. All incoming data from deep links\nshould be meticulously validated and sanitized by developers to prevent\nmalicious code or values from being injected within the legitimate application.\nThis can be implemented by checking the value of any deep link parameter against\na predefined allowlist of expected values.\n\nApps should check other relevant internal states, such as authentication state,\nor authorization, before exposing sensitive information. An example might be a\nreward for completing a level of a game. In this case it's worth validating the\nprecondition of having completed the level, and redirecting to the main screen\nif not.\n\nResources\n---------\n\n- [Verify Android App Links](/training/app-links/verify-android-applinks)\n- [Handling Android App Links](/training/app-links)\n- [Web intent resolution](/about/versions/12/behavior-changes-all#web-intent-resolution)\n- [Account takeover intercepting magic link for Arrive app](https://hackerone.com/reports/855618)\n- [Deep Links \\& WebViews Exploitations Part I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)\n- [Deep Links \\& WebViews Exploitations Part II](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-II)\n- [Recent suggestion of a deep link issue in Jetpack Navigation](https://swarm.ptsecurity.com/android-jetpack-navigation-go-even-deeper/)"]]