보안 뉴스) "Apple ID 로 로그인" 기능이 보안상 문제있었다고?!

카테고리 : 보안/news

본론 들어가기 앞서 상금($100,000)부터 보자면

버그 바운티로 10만 달러.. 엄청난 금액이다.

가격 책정은 결함의 정도 + 예상 피해 정도를 기준으로 책정되는데

 

글 작성일 기준 한화 1억 2천만원이다.

보통은 보상금액이 1천만 원을 넘기지 않는데 금액만 따져도 엄청난 보안 문제를 제보했다는 것을 알 수 있다.

(네이버의 버그 제보는 최대 금액이 300만원.. 그것도 서버에 접근해 DB 탈취 수준이어야 최대 금액이다.)

네이버의 버그바운티 포상 https://bugbounty.naver.com/ko/

 

매우 심각했던 보안 문제 : 지금은 고쳐졌지만 악용되었을 경우 막대한 피해가 발생할 수 있었습니다.

 

간편하며, 보안성을 자랑했던 애플로써는 이미지에 타격이 클 겁니다.

다만 제보 후 빠른 대처는 칭찬받을 법도 합니다.

애플이 제공하는 '애플 ID로 로그인'은 무작위 ID를 제공하는 방식을 채택해 사용자의 개인정보를 넘겨주지 않습니다.
또한 이메일이나 위치 정보 같은 민감한 정보도 포함되지 않으므로 개인정보가 유출될 염려도 없습니다.

다른 OO으로 로그인은 제 3자(사이트 또는 앱)에게 사용자의 정보를 직접 전달합니다.

그런데 이러한 시스템이 뚫린 겁니다.

 

해당 취약점을 제보한 화이트 해커(bhavukjain)는 다음과 같이 말했다.

만약 내가 당신의 주로 사용하는 사이트에서 고작 Email 아이디만 아는 상황에서 모든 정보를 탈취할 수 있다면? 믿으시겠습니까?

무섭지 않으세요? 그런데 "Sign in with Apple(Apple ID로 로그인)" 기능이 그걸 가능하게 해 줍니다.

 

4월 어느 날, Bhavuk Jain는 애플의 "애플 아이디로 로그인 기능"에서 매우 큰 취약점을 찾았다.

ID의 정상여부를 검사하지 않는 것!

Apple에 제보하여 $100,000의 보상금을 받게 되었습니다.

 

기술적 설명

(보안 기술 등이 소개되어 읽기 어려울 수 있습니다. OAuth2.0에 대한 이해가 되어있다면 읽는데 도움이 될 수 있습니다.)

 

애플의 보안 인증시스템은 OAuth2.0과 비슷한 방식으로 구현되어있습니다.

 

인증 시스템에 통신방법은 두 가지 방법이 있습니다.

  1. JWT (JSON Web Token)
  2. code

보안 문제는 JWT 토큰 방식에서 발생하였습니다.

 

아래의 사진은 JWT 토큰 사용 시 행동 흐름입니다.

2 단계에서 승인하는 동안 Apple은 사용자에게 Apple 이메일 ID를 타사 앱과 공유할지 여부를 선택할 수 있는 옵션을 제공합니다.

사용자가 이메일 ID를 숨기기로 결정하면 Apple은 사용자 고유의 Apple 무작위 이메일 ID를 생성합니다.

사용자 선택에 따라 권한 부여가 성공한 후 Apple은 이 이메일 ID가 포함된 JWT를 생성 한 다음 타사 앱에서 사용자를 로그인하는 데 사용합니다.

(해당 서드파티에서만 사용되는 무작위 아이디 생성하여 어떠한 정보도 직접 접근 불가)

 

JWT의 페이로드는 다음과 같습니다.

{
  "iss": "https://appleid.apple.com",
  "aud": "com.XXXX.weblogin",
  "exp": 158XXXXXXX,
  "iat": 158XXXXXXX,
  "sub": "XXXX.XXXXX.XXXX",
  "c_hash": "FJXwx9EHQqXXXXXXXX",
  "email": "contact@bhavukjain.com", // or "XXXXX@privaterelay.appleid.com"
  "email_verified": "true",
  "auth_time": 158XXXXXXX,
  "nonce_supported": true
}

 

취약점

Apple에서 이메일 ID로 JWT를 요청할 수 있으며 Apple의 공개 키를 사용하여 이러한 토큰의 서명만 확인되면 유효한 것으로 표시되었습니다.

 

이는 공격자가 임의의 이메일에 접속하고 피해자의 계정에 액세스 하여 JWT 토큰을 얻어내 "Apple ID로 로그인"을 사용하는 사이트 또는 앱의 정보를 무단으로 가져갈 수 있으며, 해당 서비스에 로그인이 가능하므로 Dropbox 같은(Apple ID로 로그인을 사용하는 서비스) 서비스의 정보들을 무단으로 가져갈 수 있습니다.

 

2단계 과정

POST /XXXX/XXXX HTTP/1.1
Host: appleid.apple.com

{"email":"contact@bhavukjain.com"}

이메일을 전송했을 뿐인데 올바른 JWT토큰을 반환합니다.

아래는 응답 결과입니다.

{
  "authorization" : {
    "id_token" : "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.XXXXX.XXXXX",
    "grant_code" : "XXX.0.nzr.XXXX",
    "scope" : [ "name", "email" ]
  },
  "authorizedData" : {
    "userId" : "XXX.XXXXX.XXXX"
  },
  "consentRequired" : false
}

 

이 취약점의 영향은 전체 계정 탈취를 할 수 있으므로 매우 심각합니다.

 

Sign in with Apple은 소셜 로그인을 지원하는 많은 개발자가 채택했습니다.

Dropbox, Spotify, Airbnb, Giphy(Facebook에서 인수)를 사용하는 몇 가지 예를 들어 보겠습니다.

이에 대한 테스트는 되지 않았지만 사용자를 확인하는 동안 추가 보안 조치가 없으면 전체 계정 탈취가 가능합니다.

 

다행히도 Apple은 또한 로그를 조사하여

이 취약점으로 인해 발생한 문제가 없는 것으로 확인했습니다.

 

 

제 개인적인 생각입니다만,

문제가 없었던 이유로는 서드파티 앱에 등록되어 있어야 해당 공격이 가능했기 때문이 아닐까 싶습니다.

빠르게 발견되어 조치된 게 다행입니다.

 

저작권 보호안내
무단 전재, 재배포 행위는 금지됩니다. (글을 복사하여 게시금지)
본문의 일부(링크용 문장) 인용은 가능하지만, 출처와 링크(a 태그)를 남기셔야 됩니다.
(웹툴을 이용하고, 스크린샷/녹화하는것은 상관없습니다.)

예외적으로. 저에게 허락받은 경우에는 본문을 전재할 수 있습니다.

만약, 본문 공유를 원하신다면 링크 공유를 해주세요

저작권 정책 확인하기
링크 공유하기

 댓글 (2개)


  • 짬굉이 2020.08.12 14:17 댓글주소수정/삭제댓글쓰기

    그럼 혹시 Apple ID로 로그인 기능을 웹에서 구현중인데

    응답으로 name와 email이 오지않는 이유가 저 보안문제때문인건가요?


    • hi098123 2020.08.12 14:40 신고 댓글주소수정/삭제

      저 문제는 해결된 문제라 관련 없습니다.
      애플 공식문서를 읽어보시거나 애플 고객센터 또는 포럼등에 문의해주세요