SQL 삽입 취약성 문제 해결하기

이 정보는 SQL 삽입 취약성이 있는 앱의 개발자를 대상으로 합니다.

변경되는 점

하나 이상의 앱에 반드시 수정해야 하는 SQL 삽입 취약점이 있습니다. Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.

필요한 조치​

  1. Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.
  2. 영향을 받는 앱을 업데이트하여 취약점을 수정합니다.
  3. 영향을 받는 앱의 업데이트된 버전을 제출합니다.

다시 제출하면 앱은 다시 검토 절차를 거치게 되며 이 절차는 몇 시간 정도 걸릴 수 있습니다. 앱이 검토 과정을 통과하고 게시가 완료되면 더 이상의 조치가 필요하지 않습니다. 앱이 검토 과정을 통과하지 못할 경우 새로운 앱 버전은 게시되지 않으며 이메일 알림을 받게 됩니다.

추가 세부정보

내보낸 ContentProviders에 있는 query, update, delete를 구현할 때 확인되지 않은 입력 내용을 SQL 문으로 전달할 경우 SQL 삽입에 취약해질 수 있습니다. 악성 앱이 교묘하게 제작된 입력값을 공급하여 비공개 데이터에 액세스하거나 데이터베이스 콘텐츠를 손상시킬 수 있습니다. 다음과 같은 방법으로 이 문제를 해결할 수 있습니다.

영향을 받는 ContentProvider를 다른 앱에 노출하지 않아도 되는 경우

영향을 받는 ContentProvider를 다른 앱에 노출해야 하는 경우

  • projection map과 함께 엄격 모드를 사용하면 SQLiteDatabase.query에 SQL이 삽입되는 것을 방지할 수 있습니다. 엄격 모드는 악성 선택 절을 막아주고 projection map은 악성 프로젝션 절을 막아줍니다. 검색어를 안전하게 보호하려면 이 두 가지 기능을 모두 사용해야 합니다.
  • SQLiteDatabase.updateSQLiteDatabase.delete에 SQL이 삽입되는 것을 방지하려면 "?"를 교체 가능한 매개변수 및 별도의 선택 인수 배열로 사용하는 선택 절을 사용하면 됩니다. 선택 절을 구성할 때는 신뢰할 수 없는 입력값을 사용하면 안 됩니다.

도움이 필요하신가요?

취약점에 관한 기술적인 문의사항이 있다면 'android-security' 태그를 사용하여 Stack Overflow에 게시해 주시기 바랍니다. 문제 해결 절차에 관해 궁금하신 점이 있으면 Google 개발자 지원팀에 문의하세요.

도움이 되었나요?
어떻게 하면 개선할 수 있을까요?