Swift NSPredicate 인젝션

Swift NSPredicate 인젝션

설명

외부 입력으로 NSPredicate(format:)의 포맷 문자열을 만들면 공격자가 조건식을 조작해 의도하지 않은 객체 조회나 필터 우회를 유발할 수 있습니다.

잠재적 영향

  • 권한 밖 객체 조회
  • 필터 조건 우회
  • 앱 로직 우회 또는 데이터 노출

해결 방법

  1. NSPredicate(format:) 포맷 문자열은 정적으로 유지합니다.
  2. 값은 %@ 자리표시자와 별도 인자로 바인딩합니다.
  3. 동적 필드명이나 연산자는 허용 목록에서 선택합니다.

예시

변경 전

swift
let predicate = NSPredicate(format: "name == '\(username)'")

변경 후

swift
let predicate = NSPredicate(format: "name == %@", username)

설명:

  • 변경 전: 사용자 입력이 predicate 문법으로 해석됩니다.
  • 변경 후: 사용자 입력은 값 인자로만 전달됩니다.

참조