이 질문은 내가 구문 분석의 사이트에 하나의 질문 만 보고서 아니라는 것을 알고, 이제 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 직원이이 버그에 대한 응답을 기다리는 중입니다.
감사합니다, 안토니오
이 버그 보고서에 대한 답변을 얻었습니까? – xpereta
아니요 그들은 스레드를 닫고 페이스 북의 버그 보고서에 답장을 보내지 않았습니다. 더 이상 보안을 고려하지 않기 때문에 파싱을 사용하지 않기로 결정했습니다. 대신 Google의 앱 엔진을 사용하고 있습니다. –