2014-05-13 18 views
12

Câu hỏi này là một tấm gương của a bug report I made on parse's help forumParse.com an ninh API liên quan đến

Bây giờ, tôi biết rằng một trong những trên trang web phân tích cú pháp không phải là một câu hỏi nhưng một báo cáo, và tôi không muốn rời khỏi đây chỉ là một tấm gương của báo cáo, nhưng chỉ cần kiểm tra xem mối quan tâm của tôi có được thành lập tốt hay không, với những người có thể có nhiều kinh nghiệm hơn với tôi.

Vấn đề là có vẻ như phân tích cú pháp không tạo chữ ký HMAC đúng cách.

  • Thử nghiệm đầu tiên: Tôi lấy proxy (Charles proxy), thiết lập điểm ngắt trên yêu cầu cập nhật và thay đổi trường để chữ ký bị ảnh hưởng. Thực hiện yêu cầu. Máy chủ chấp nhận yêu cầu và các trường được cập nhật tương ứng với nó (ngay cả trường được sửa đổi trong điểm ngắt của khóa học).
  • Kiểm tra thứ hai: thay vì sửa đổi yêu cầu tôi vừa thay đổi chữ ký để đảm bảo máy chủ thực sự đang kiểm tra giá trị chữ ký, yêu cầu đã bị từ chối như mong đợi.
  • Thử nghiệm thứ ba: Thay vì chỉ sửa đổi giá trị của trường tồn tại, hãy thêm trường mới vào yêu cầu và thực thi. Máy chủ chấp nhận yêu cầu, cập nhật trường, nếu trường được thêm vào không tồn tại, nó sẽ thêm nó vào hàng được cập nhật, nếu không nó chỉ cập nhật nó.

Bây giờ, mối quan tâm của tôi có được thành lập tốt không? Tôi có hiểu lầm về RFC OAuth trong bất kỳ phần nào liên quan đến việc tạo chữ ký không? Làm cách nào để các nhân viên/người dùng của Parse không bao giờ nhận thấy lỗi HUGE như vậy? Xin vui lòng, tôi biết rằng câu hỏi này có thể tạo ra một cuộc thảo luận rộng rãi, nhưng vì tầm quan trọng của câu hỏi này (và không chỉ cho tôi, mà đối với tất cả người dùng phân tích cú pháp), hãy dành thời gian cho ai đó thông báo để lại phản hồi hợp lệ.

EDIT:

Tôi đang đào bên Parse iOS SDK để tìm hiểu tại sao điều này thực sự xảy ra. Sau một số nghiên cứu và một chút kỹ thuật đảo ngược của thư viện tĩnh của họ, tôi thấy rằng họ đang sử dụng một sửa đổi (có lẽ họ chỉ sửa đổi tên của các phương thức tiền tố chúng với thư viện 'PF') được gọi là OAuthCore. Sau khi phát hiện ra điều này, tôi đã có xác nhận bằng cách xem xét một phiên bản nguồn mở cũ của SDK của họ (tìm thấy googling cho các tên thư viện sửa đổi). Bây giờ, thư viện thực hiện công việc của mình và làm việc như mong đợi, gắn bó đủ với RFC. Vấn đề là, rõ ràng, OAuth không bao gồm toàn bộ yêu cầu HTTP nhưng chỉ là một phần của nó. Những gì tôi đã mong đợi, và làm thế nào nên được IMHO, là khi bạn thực hiện một yêu cầu cập nhật một lĩnh vực (hoặc mua hàng? Đăng nhập? Gửi dữ liệu nhạy cảm?) Các lĩnh vực 'bẩn' nên được gửi theo yêu cầu tham số, rằng họ sẽ được đưa vào quá trình xác minh/xác minh được thực hiện thông qua giao thức OAuth. Thay vào đó, yêu cầu cập nhật (được thực hiện cụ thể thông qua cuộc gọi yêu cầu POST được gửi đến https://api.parse.com/2/update) được đặt thành nội dung của yêu cầu POST đối với chuỗi json thể hiện bản cập nhật thực tế. Thành thật mà nói, điều này đã rõ ràng ngay cả trước khi tất cả điều này, bởi vì bằng cách nhìn vào yêu cầu tôi nên nhận ra rằng văn bản json đã được gửi làm cơ thể thô của yêu cầu thay vì một cơ thể x-www-form-urlencoded (do đó có các tham số truy vấn urlencoded và & -concatenated trong phần thân của yêu cầu).

Trong khi điều này bây giờ là hành vi "đúng" tôi cảm thấy như thế này không giống như nó phải ở trong một môi trường sản xuất được hàng ngàn người sử dụng. Những gì tôi sẽ làm bây giờ là cố gắng để vá nó mà không vi phạm chức năng, tôi nên quản lý để làm điều đó tôi sẽ chia sẻ các bản vá.

Vẫn hy vọng nhận được phản hồi từ Parse trực tiếp.

CHỈNH SỬA 2: Phân tích cú pháp đã đóng câu hỏi của tôi dưới dạng câu hỏi không phải là câu hỏi báo cáo lỗi. Không có bình luận nào về các lỗi bảo mật chính mà việc triển khai thực hiện của chúng.

Bên dưới bản sao của báo cáo lỗi

tôi đã chơi đùa với các Parse iOS SDK và tôi tìm thấy một lỗi lớn rằng nghiêm túc mối đe dọa sự an toàn của các ứng dụng phát triển sử dụng phân tích cú pháp như một hậu phương.

Bây giờ, tôi xin lỗi nếu tôi không sử dụng công cụ báo cáo lỗi nhưng tôi làm không sở hữu tài khoản facebook và tôi không sẵn sàng.

Cơ sở: API phân tích cú pháp dường như tuân theo giao thức OAuth 1.0a (RFC 5849). Phần liên quan của RFC liên quan đến lỗi này là trang 18, chữ ký.

Trong oauth, theo RFC đề cập ở trên, mỗi yêu cầu nên có một tiêu đề xác thực bao gồm như:

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" 

này sẽ đảm bảo không chỉ có vậy một yêu cầu được ủy quyền nhưng ngay cả yêu cầu toàn vẹn kể từ khi HMAC chữ ký sẽ thực thi điều này. Là một số thực tế, ký hiệu phải được tính bằng cách sử dụng một chuỗi chuẩn hóa được tạo bởi tham số yêu cầu và được ký với khách hàng được chia sẻ với bí mật được chia sẻ mã thông báo (xem phần 3.4.2, trang 25 của RFC). Bằng cách này, người dùng độc hại không nên EVER có thể sửa đổi yêu cầu trước khi nó đến máy chủ. Máy chủ trên thực tế nên kiểm tra chữ ký để khớp với toàn bộ yêu cầu , từ chối nó nếu không.

Đáng buồn đủ, Parse dường như không hoàn toàn phù hợp với điều trên. Bằng cách sử dụng proxy đơn giản, tôi có thể sửa đổi hoàn toàn các yêu cầu, thay đổi ID người dùng thực hiện yêu cầu, thay đổi giá trị của tham số trong yêu cầu , THÊM L ANDI VÀ GIÁ TRỊ KHÔNG ĐƯỢC BAO GỒM TRONG YÊU CẦU Ở TẤT CẢ.

Bây giờ, thật dễ dàng để tưởng tượng những hạn chế mà tất cả điều này có thể dẫn đến. Đặc biệt, tôi đang suy nghĩ với các nhà phát triển di động rằng cho phép mua hàng trong ứng dụng trong ứng dụng của họ, dựa vào phân tích đó an toàn đủ để họ không thể "lừa", do đó mất thu nhập và vô hiệu hóa những nỗ lực của họ cho ứng dụng của họ.

Bây giờ, khi tôi đã có thể thử nghiệm nó trên SDK khác, tôi khá chắc chắn lỗi cùng là tái sản xuất có quá, hoặc thậm chí tồi tệ hơn vấn đề là rằng máy chủ không kiểm tra chữ ký ở tất cả.

Đang chờ phản hồi từ nhân viên Parse về lỗi này.

Kính trọng, Antonio

+0

Bạn có nhận được bất kỳ câu trả lời nào cho báo cáo lỗi này không? – xpereta

+0

Không, họ đã đóng chuỗi và không trả lời trên báo cáo lỗi trên facebook. Tôi quyết định không sử dụng Parse nữa vì họ không xem xét bảo mật đủ, thay vào đó tôi đang sử dụng công cụ ứng dụng của google bây giờ. –

Trả lời

0

Nó được gây ấn tượng mà bạn đã đào vào khuôn khổ để kiểm tra vấn đề an ninh. Tôi không phải là chuyên gia về oauth. Nhưng tôi chỉ muốn nhận xét về sự lo lắng của bạn về mua hàng trong ứng dụng.Nó không phải là cần thiết để lo lắng về mua trong ứng dụng vì nó được xử lý hoàn toàn bởi App Store. Mọi giao dịch mua sẽ được xử lý bởi StoreKit.framework của iOS. Parse không liên quan gì đến việc mua hàng trong ứng dụng. Nếu bạn muốn kiểm tra xem một người có mua gì không, bạn chỉ cần sử dụng các chức năng do StoreKit.framework mang lại chứ không phải Parse.

+2

Phân tích cú pháp cung cấp để hỗ trợ mua hàng và xác minh biên lai để nó phụ thuộc vào những gì bạn đang làm về mức độ nhận xét của hợp lệ này. – Wain

Các vấn đề liên quan