2014-05-13 2 views
12

이 질문은 내가 구문 분석의 사이트에 하나의 질문 만 보고서 아니라는 것을 알고, 이제 a bug report I made on parse's help forumParse.com API 보안

의 거울 우려, 나는 단지 거울 여기에두고 싶지 않아 그 보고서는,하지만 저의 경험이 더 많은 사람들과 아마 제 우려 사항이 잘 구성되어 있는지 확인하십시오.

문제는 구문 분석이 올바른 방법으로 HMAC 서명을 생성하지 않는 것 같습니다.

  • 첫 번째 테스트 : 나는 (찰스 프록시) 프록시를 가져 와서 업데이트 요청에 중단 점을 설정하고 서명을 변경하지 않은 채로 필드를 변경합니다. 요청을 실행하십시오. 서버가 요청을 수락하고 이에 따라 필드가 업데이트됩니다 (물론 중단 점에서 수정 된 필드조차도).
  • 두 번째 테스트 : 요청을 수정하는 대신 서버가 실제로 서명 값을 테스트하고 있는지 확인하기 위해 서명을 변경했는데 요청이 예상대로 거부되었습니다.
  • 세 번째 테스트 : 기존 필드의 값만 수정하는 대신 요청에 새로운 새 필드를 추가하고 실행하십시오. 서버는 요청을 받아들이고, 필드를 업데이트하며, 추가 된 필드가 존재하지 않으면 업데이트 된 행에 추가합니다. 그렇지 않으면 업데이트됩니다.

이제 걱정거리가 있습니까? 서명 생성과 관련하여 OAuth RFC를 잘못 이해 했습니까? Parse의 직원/사용자가 어떻게 그런 거대한 버그를 발견하지 못하게 할 수 있습니까?

이 질문은 광범위한 토론을 생성 할 수 있지만,이 질문의 중요성 (그리고 나뿐만 아니라 모든 구문 분석 사용자)이 유효한 응답을 남기고 알리는 시간을 남겨 둡니다.

편집 :

나는이 실제로 일어나고있는 이유를 찾기 위해 구문 분석 아이폰 OS SDK 내부에 파고 있어요. 약간의 연구와 정적 라이브러리의 리버스 엔지니어링을 조금 해본 결과 그들은 수정 된 라이브러리를 사용하고 있다는 것을 알았습니다. (아마도 PF로 시작하는 메소드의 이름을 수정했을 것입니다.) 라이브러리 OAuthCore이라고합니다. 이 것을 발견 한 후에 수정 된 라이브러리 이름에 대한 인터넷 검색을 통해 오래된 오픈 소스 버전의 SDK를 확인함으로써 확인을 받았습니다. 이제 도서관은 기대했던대로 업무를 수행하고 RFC에 충실합니다. 문제는 분명히 OAuth가 전체 HTTP 요청을 다루지는 않지만 그 일부만을 포함한다는 것입니다. IMHO는 어떻게해야합니까? 예를 들어 필드를 업데이트 (또는 구매를 하시려면 로그인 하시겠습니까? 민감한 데이터를 보내시겠습니까?) 요청을하면 '더티'필드가 요청의 매개 변수 인 으로 전송되어야합니다. OAuth 프로토콜을 통해 수행 된 서명/검증 프로세스에 포함될 것입니다. 대신 업데이트 요청 (특히 https://api.parse.com/2/update에 대한 POST 요청 호출을 통해 이루어짐)은 POST 요청의 본문을 실제 업데이트를 나타내는 json 문자열로 설정합니다. 솔직히 말해서 json 텍스트가 x-www-form-urlencoded 본문 대신 요청의 원시 본문으로 전송되었다는 것을 깨달았어야한다는 요청을 보았 기 때문에이 모든 것보다 훨씬 이전에 이것은 분명했습니다 (따라서 쿼리 매개 변수는 urlencoded이고 & - 요청 본문에 포함됨).

이것은 현재 "올바른"동작이지만 수천 명의 사람들이 사용하는 프로덕션 환경에 있어야하는 것처럼 느껴지지 않습니다. 지금 내가 할 일은 기능을 해치지 않고 패치를 적용하는 것입니다. 그렇게해야 패치를 공유 할 수 있습니다.

여전히 Parse로부터 응답을 받기를 희망합니다.

EDIT 2 : Parse는 제 질문을 질문이 아니라 버그 신고로 마감했습니다. 그들의 구현이 의미하는 주요 보안 결함에 대해서는 언급하지 않았다.

내가 구문 분석 아이폰 OS SDK와 함께 주위를 연주했다보고 된 버그

의 사본을 아래

나는 애플 리케이션의 심각하게 위협 보안이 백엔드로 구문 분석 을 사용하여 개발 된 주요 버그 을 발견했다.

버그 신고 도구를 사용하지 않아서 죄송하지만 님은 Facebook 계정을 소유하고 있지 않습니다. 기꺼이하지 않습니다.

전제 : Parse API는 OAuth 프로토콜 1.0a (RFC 5849)을 준수하는 것으로 보입니다. 이 버그와 관련된 RFC의 관련 부분은 18 페이지 서명에 있습니다. 이것은 단지 요청이 허가되어 있지만 HMAC 이후에도 요청의 무결성 보장한다

OAuth realm="Example", 
oauth_consumer_key="0685bd9184jfhq22", 
oauth_token="ad180jjd733klru7", 
oauth_signature_method="HMAC-SHA1", 
oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", 
oauth_timestamp="137131200", 
oauth_nonce="4572616e48616d6d65724c61686176", 
oauth_version="1.0" 

: 전술 한 RFC에있어서의 OAuth에서

, 각 요청 처럼 인증 헤더는 구성이 있어야 서명이이를 시행 할 것입니다. 실제로 서명은 요청 매개 변수로 구성되고 으로 서명 된 정규화 된 문자열을 사용하여 계산되어야하며 클라이언트는 토큰 공유 암호에 연결된 공유를 공유합니다 (RFC 3.4.2, RFC 25 페이지 참조). 이런 식으로 악의있는 ​​사용자는 서버에 도달하기 전에 요청을 수정할 수 없어야합니다. 실제로 서버는 전체 요청과 일치하는 서명을 확인하고 그렇지 않은 경우 거부해야합니다.

슬프게도 Parse는 위와 완전히 일치하지 않는 것 같습니다. 간단한 프록시를 사용하여 요청을 완전히 수행 할 수 있습니다. 사용자 ID를 변경하여 요청의 매개 변수 값을 변경하고 요청에 포함되지 않은 값을 추가하십시오. 조금도.

이제이 모든 것이 단점이라고 상상하기가 쉽습니다. . 특히 은 모바일 앱 개발자가 앱에서 인앱 구매를 사용하도록 설정했기 때문에 해당 사용자가 '속임수'할 수 없도록 만큼 안전하다는 결론을 얻었습니다. 따라서 수입을 상실하고 그들이 애플 리케이션을 위해 만든 노력. 나는 다른 SDK를에서 테스트 할 수있는 동안

지금, 나는 같은 버그가 너무, 또는 더 악화 문제가 서버가 서명을 전혀 확인되지 않는다는 입니다 재현 확신.

Parse 직원이이 버그에 대한 응답을 기다리는 중입니다.

감사합니다, 안토니오

+0

이 버그 보고서에 대한 답변을 얻었습니까? – xpereta

+0

아니요 그들은 스레드를 닫고 페이스 북의 버그 보고서에 답장을 보내지 않았습니다. 더 이상 보안을 고려하지 않기 때문에 파싱을 사용하지 않기로 결정했습니다. 대신 Google의 앱 엔진을 사용하고 있습니다. –

답변

0

당신이 보안 문제를 확인하기 위해 프레임 워크에 팠 것으로 감동한다. 나는 oauth에서 전문가가 아니다. 하지만 앱내 구매에 대한 걱정에 대해 언급하고 싶습니다.인앱 구매가 App Store에서 완전히 처리되므로 걱정하지 않아도됩니다. 모든 구매는 iOS의 StoreKit.framework에서 처리됩니다. 파싱은 인앱 구매와 아무런 관련이 없습니다. 사람이 무엇인가를 구입했는지 확인하고 싶다면 Parse가 아닌 StoreKit.framework가 가져온 기능 만 사용해야합니다.

+2

구매 및 구매 영수증 확인을 돕기 위해 제공되는 파싱 오퍼링은이 주석이 얼마나 유효한지에 따라 다릅니다. – Wain