이 정보는 SQL 삽입 취약성이 있는 앱의 개발자를 대상으로 합니다.
변경되는 점
하나 이상의 앱에 반드시 수정해야 하는 SQL 삽입 취약점이 있습니다. Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.
필요한 조치
- Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.
- 영향을 받는 앱을 업데이트하여 취약점을 수정합니다.
- 영향을 받는 앱의 업데이트된 버전을 제출합니다.
다시 제출하면 앱은 다시 검토 절차를 거치게 되며 이 절차는 몇 시간 정도 걸릴 수 있습니다. 앱이 검토 과정을 통과하고 게시가 완료되면 더 이상의 조치가 필요하지 않습니다. 앱이 검토 과정을 통과하지 못할 경우 새로운 앱 버전은 게시되지 않으며 이메일 알림을 받게 됩니다.
추가 세부정보
내보낸 ContentProviders
에 있는 query
, update
, delete
를 구현할 때 확인되지 않은 입력 내용을 SQL 문으로 전달할 경우 SQL 삽입에 취약해질 수 있습니다. 악성 앱이 교묘하게 제작된 입력값을 공급하여 비공개 데이터에 액세스하거나 데이터베이스 콘텐츠를 손상시킬 수 있습니다. 다음과 같은 방법으로 이 문제를 해결할 수 있습니다.
영향을 받는 ContentProvider
를 다른 앱에 노출하지 않아도 되는 경우
- 매니페스트에서 이 취약성의 영향을 받는
ContentProvider
의<provider>
태그를 수정하여android:exported="false"
로 설정할 수 있습니다. 이렇게 하면 영향을 받는ContentProvider
에 다른 앱이 인텐트를 전송할 수 없게 됩니다. -
또한
android:protectionLevel="signature"
를 사용하여android:permission
속성을permission
으로 설정하면 영향을 받는ContentProvider
에 다른 개발자가 작성한 앱이 인텐트를 전송할 수 없게 됩니다.
영향을 받는 ContentProvider
를 다른 앱에 노출해야 하는 경우
- projection map과 함께 엄격 모드를 사용하면
SQLiteDatabase.query
에 SQL이 삽입되는 것을 방지할 수 있습니다. 엄격 모드는 악성 선택 절을 막아주고 projection map은 악성 프로젝션 절을 막아줍니다. 검색어를 안전하게 보호하려면 이 두 가지 기능을 모두 사용해야 합니다. SQLiteDatabase.update
및SQLiteDatabase.delete
에 SQL이 삽입되는 것을 방지하려면"?"
를 교체 가능한 매개변수 및 별도의 선택 인수 배열로 사용하는 선택 절을 사용하면 됩니다. 선택 절을 구성할 때는 신뢰할 수 없는 입력값을 사용하면 안 됩니다.
도움이 필요하신가요?
취약점에 관한 기술적인 문의사항이 있다면 'android-security' 태그를 사용하여 Stack Overflow에 게시해 주시기 바랍니다. 문제 해결 절차에 관해 궁금하신 점이 있으면 Google 개발자 지원팀에 문의하세요.