Các nhà nghiên cứu tại công ty bảo mật mã hóa web SALT vừa công bố một mô tả hấp dẫn về cách họ tìm thấy một lỗi xác thực được mệnh danh là CVE-2023-28131 trong bộ công cụ xây dựng ứng dụng trực tuyến phổ biến được gọi là Expo.
Các tin tốt là Expo đã trả lời thực sự nhanh chóng đối với báo cáo lỗi của SALT, đưa ra cách khắc phục chỉ trong vòng vài giờ sau khi SALT chịu trách nhiệm tiết lộ.
May mắn thay, bản sửa lỗi không phụ thuộc vào việc khách hàng tải xuống bất kỳ thứ gì vì bản vá được triển khai bên trong dịch vụ đám mây của Expo và không yêu cầu bản vá cho bất kỳ ứng dụng cài đặt sẵn hoặc mã phía máy khách nào.
hội chợ triển lãm cố vấn không chỉ giải thích điều gì đã xảy ra và cách công ty khắc phục sự cố mà còn đưa ra lời khuyên về lập trình cho khách hàng của mình về cách tránh loại lỗ hổng có thể xảy ra này với các dịch vụ trực tuyến khác.
Sau đó, SALT đợi ba tháng trước khi xuất bản báo cáo của mình, thay vì vội vã đưa ra mục đích công khai ngay khi có thể, do đó tạo cơ hội cho người dùng Expo hiểu và hành động theo phản hồi của Expo.
Giữ cho nó đơn giản
Quá trình xác thực lỗi được giải thích chi tiết trong báo cáo của SALT, nhưng chúng tôi sẽ trình bày một mô tả được đơn giản hóa rất nhiều ở đây về những gì đã xảy ra trong dịch vụ OAUTH của Expo.
CHÍNH XÁC, viết tắt của Mở khung ủy quyền, là quy trình cho phép bạn truy cập dữ liệu riêng tư trong một dịch vụ trực tuyến (chẳng hạn như chỉnh sửa hồ sơ trực tuyến của bạn, thêm một bài viết blog mới hoặc phê duyệt một dịch vụ web để tạo các bài đăng trên mạng xã hội cho bạn) mà không cần thiết lập mật khẩu với hoặc đăng nhập trực tiếp vào chính dịch vụ đó.
Khi bạn thấy các dịch vụ web cung cấp cho bạn một Đăng nhập bằng Google hoặc Facebook chẳng hạn, họ hầu như luôn sử dụng OAUTH ở chế độ nền, do đó bạn không cần phải tạo tên người dùng mới và mật khẩu mới với một trang web khác hoặc cung cấp số điện thoại của mình cho một dịch vụ trực tuyến khác.
Nói một cách chính xác, bạn xác thực một cách gián tiếp, chỉ đưa thông tin đăng nhập Google hoặc Facebook của bạn vào một trong những trang web đó.
Một số người dùng không thích điều này, vì họ không muốn xác thực với Google hoặc Facebook chỉ để chứng minh danh tính của họ với các trang web không liên quan khác. Những người khác thích nó vì họ cho rằng các trang web như Facebook và Google có nhiều kinh nghiệm hơn trong việc xử lý quy trình đăng nhập, lưu trữ mật khẩu băm một cách an toàn và thực hiện 2FA hơn là một trang web cửa hàng đã cố gắng đan các quy trình bảo mật bằng mật mã của riêng mình.
Xác thực thuê ngoài
Đơn giản hóa rất nhiều, đăng nhập kiểu OAUTH, thông qua tài khoản Facebook của bạn đến một trang web có tên example.com
, đi một cái gì đó như thế này:
- Trang web
example.com
nói với ứng dụng hoặc trình duyệt của bạn, “Xin chào, X, hãy đi và nhận mã thông báo truy cập ma thuật cho trang web này từ Facebook.” - Bạn truy cập một URL Facebook đặc biệt, đăng nhập nếu bạn chưa đăng nhập, và nói, “Hãy cho tôi mã thông báo truy cập ma thuật để
example.com
". - Nếu Facebook hài lòng rằng bạn là người mà bạn tuyên bố, nó trả lời, "Xin chào, X, đây là mã thông báo truy cập ma thuật của bạn."
- Bạn trao mã thông báo truy cập cho
example.com
, sau đó có thể liên hệ với chính Facebook để xác thực mã thông báo.
Lưu ý rằng chỉ Facebook mới thấy mật khẩu Facebook và mã 2FA của bạn, nếu cần, vì vậy dịch vụ Facebook đóng vai trò là nhà môi giới xác thực giữa bạn và example.com
.
Đằng sau hậu trường, có một xác nhận cuối cùng, như thế này:
- Trang web
example.com
nói với Facebook, “Bạn đã phát hành mã thông báo này chưa và nó có xác thực người dùng X không?” - Nếu Facebook đồng ý, nó nói
example.com
, “Có, chúng tôi coi người dùng này đã được xác thực.”
Trình tự có thể đảo ngược
Lỗi mà các nhà nghiên cứu SALT tìm thấy trong mã Expo có thể được kích hoạt bằng cách phá hoại một cách ác ý cách xử lý của Expo đối với cái mà bạn có thể gọi là quy trình “môi giới xác thực”.
Các điểm chính như sau:
- Bản thân Expo thêm một trình bao bọc xung quanh quá trình xác minh, để nó xử lý xác thực và xác thực cho bạn, cuối cùng chuyển mã thông báo truy cập ma thuật cho trang web mong muốn (
example.com
trong phần trao đổi ở trên) quay lại ứng dụng hoặc trang web mà bạn đang kết nối. - Các tham số được sử dụng trong việc xử lý xác minh được đóng gói thành một URL lớn được gửi tới dịch vụ Expo.
- Một trong những tham số này được lưu trữ tạm thời trong cookie web chỉ định URL mà mã thông báo bảo mật ma thuật cuối cùng sẽ được gửi tới để cho phép truy cập.
- Trước khi mã thông báo bảo mật được gửi, một cửa sổ bật lên yêu cầu bạn xác minh URL sắp được cấp phép, vì vậy bạn có thể phát hiện ra bất kỳ ai đang cố gắng thay thế một URL giả vào quy trình đăng nhập.
- Nếu bạn phê duyệt cửa sổ bật lên, Expo chuyển hướng bạn đến quy trình xác minh Facebook.
- Nếu Facebook chấp thuận xác minh, nó trả lại mã thông báo truy cập ma thuật cho dịch vụ Expo và Expo chuyển mã đó tới URL mà bạn vừa phê duyệt trong cửa sổ bật lên, được đặt tên là
returnURL
. - Ứng dụng hoặc trang web đang nghe theo chỉ định
returnURL
nhận cuộc gọi lại của Expo, có được mã thông báo truy cập và do đó được xác thực là bạn.
Thật không may, các nhà nghiên cứu của SALT đã phát hiện ra rằng họ có thể phá hỏng quy trình đăng nhập bằng cách sử dụng mã JavaScript để kích hoạt quyền truy cập vào URL đăng nhập Expo ban đầu, nhưng sau đó tắt cửa sổ bật lên xác minh trước khi bạn có thời gian đọc hoặc tự mình phê duyệt.
Tuy nhiên, tại thời điểm này, dịch vụ của Expo đã đặt một cookie có tên ru
(viết tắt của returnURL
) để cho nó biết nơi cần gọi lại bằng mã thông báo truy cập ma thuật của bạn ở cuối.
Điều này có nghĩa là tội phạm mạng có thể đánh lừa mã của Expo để “ghi nhớ” một returnURL
như là https://roguesite.example
, mà bạn không bao giờ nhìn thấy hộp thoại để cảnh báo bạn rằng một cuộc tấn công đang diễn ra, chứ đừng nói đến việc phê duyệt nó do nhầm lẫn.
Sau đó, các nhà nghiên cứu đã sử dụng một đoạn mã JavaScript thứ hai để mô phỏng quá trình chuyển hướng của Expo sang quy trình xác minh của Facebook, quá trình này sẽ tự động thành công nếu (giống như nhiều người) bạn đã đăng nhập vào chính Facebook.
Đổi lại, xác minh của Facebook sẽ chuyển hướng quá trình đăng nhập Expo trở lại mã JavaScript của chính Expo…
…mà sẽ lấy một cách đáng tin cậy nhưng nhầm lẫn returnURL
cho cuộc gọi lại của nó từ phép thuật đó ru
cookie mà nó đã đặt ngay từ đầu mà không có sự chấp thuận hoặc biết của bạn.
Không mở hoặc không đóng?
Như bạn có thể thấy từ phần mô tả ở trên, lỗ hổng này là do mã của Expo bị lỗi không phù hợp.
Mã xác thực nói chung nên thất bại đóng cửa, trong biệt ngữ, có nghĩa là quy trình sẽ không thành công trừ khi một số loại phê duyệt tích cực đã được báo hiệu.
Chúng tôi đoán rằng Expo không có ý định hệ thống không mở được, vì báo cáo của SALT cho thấy hộp thoại phê duyệt bật lên của nó trông như thế này:
Ứng dụng tại https://roguesite.example đang yêu cầu bạn đăng nhập vào tài khoản Facebook của mình. Bạn có hoàn toàn tin tưởng https://roguesite.example và đồng ý để nó: [Không] [Có]
Câu trả lời mặc định, như bạn mong đợi, được đặt thành [No]
, nhưng điều này sẽ chỉ khiến hệ thống không đóng được nếu bạn sử dụng đúng cách mã phía máy khách của Expo để kiểm soát quá trình xác minh.
Bằng cách cung cấp JavaScript của riêng họ để chạy chuỗi yêu cầu xác minh, các nhà nghiên cứu có thể xử lý hộp thoại phê duyệt như thể nó đã nói:
Nếu bạn không yêu cầu chúng tôi rõ ràng là chặn https://roguesite.example đăng nhập qua tài khoản Facebook của bạn, thì chúng tôi sẽ cho phép họ làm như vậy: [Cho phép] [Chặn]
Giải pháp, trong số những thay đổi khác, là dành cho mã đăng nhập ban đầu của Expo để thiết lập điều kỳ diệu đó ru
Cookie chỉ sau khi bạn đã phê duyệt rõ ràng cái gọi là returnURL
, do đó, mã đăng nhập JavaScript sau này của Expo sẽ không đóng được nếu cửa sổ bật lên xác minh bị bỏ qua, thay vì tin tưởng một cách mù quáng vào một URL mà bạn chưa từng thấy hoặc chưa từng phê duyệt.
Theo nhiều cách, lỗi này tương tự như lỗi Ổ cắm thông minh Belkin Wemo lỗi mà chúng tôi đã viết khoảng hai tuần trước, mặc dù nguyên nhân cốt lõi trong trường hợp của Belkin là lỗi tràn bộ đệm, không phải lệnh gọi lại web lừa đảo.
Mã của Belkin đã phân bổ bộ đệm bộ nhớ 68 byte trong mã phía máy chủ của nó, nhưng dựa vào việc kiểm tra mã phía máy khách của nó mà bạn đã không cố gắng gửi nhiều hơn 68 byte, do đó khiến máy chủ phải phó mặc cho những kẻ tấn công đã quyết định để nói chuyện với máy chủ bằng cách sử dụng mã phía máy khách của riêng họ để bỏ qua quy trình xác minh.
Phải làm gì?
- Khi báo cáo và viết lên lỗi, cân nhắc làm theo SALT's ví dụ. Tiết lộ một cách có trách nhiệm, cho nhà cung cấp thời gian hợp lý để khắc phục lỗ hổng, cộng với thời gian hợp lý để tư vấn cho người dùng của họ, trước khi xuất bản các chi tiết cho phép bất kỳ ai khác tạo ra khai thác của riêng họ.
- Khi nhận được báo cáo lỗi, xem xét theo dõi hội chợ triển lãm ví dụ. Trả lời nhanh chóng, giữ liên lạc với người báo cáo lỗi, vá lỗ hổng ngay khi có thể, cung cấp báo cáo điều tra hữu ích cho người dùng của bạn và đảm bảo tính khách quan. (Chống lại các đề xuất của nhóm tiếp thị để khen ngợi bản thân bạn vì đã “coi trọng vấn đề bảo mật” hoặc coi vấn đề là không quan trọng. Điều đó để người dùng của bạn quyết định, dựa trên phản hồi nhanh chóng và thích hợp của bạn cũng như đánh giá rủi ro của chính họ.)
- Đảm bảo rằng mã xác thực của bạn không đóng được. Đảm bảo rằng bạn không có các bước xác minh hoặc phê duyệt có thể bị vô hiệu hóa chỉ bằng cách bỏ qua hoặc hủy bỏ chúng.
- Đừng bao giờ cho rằng mã phía máy khách của riêng bạn sẽ kiểm soát quá trình xác minh. Giả sử rằng những kẻ tấn công sẽ thiết kế ngược giao thức của bạn và tạo mã máy khách của riêng chúng để tránh nhiều lần kiểm tra nhất có thể.
- Đăng xuất tài khoản web khi bạn không chủ động sử dụng chúng. Nhiều người đăng nhập vào các tài khoản như Google, Amazon, Facebook, Apple và các tài khoản khác, sau đó duy trì trạng thái đăng nhập vô thời hạn vì nó tiện lợi. Việc đăng xuất sẽ ngăn nhiều hành động (bao gồm xác thực, bài đăng, lượt thích, lượt chia sẻ, v.v.) xảy ra khi bạn không mong đợi – thay vào đó, bạn sẽ thấy lời nhắc đăng nhập.
Đừng quên rằng bằng cách đăng xuất khỏi các dịch vụ web bất cứ khi nào bạn có thể và bằng cách thường xuyên xóa tất cả cookie trình duyệt và dữ liệu web được lưu trữ, bạn cũng giảm lượng thông tin theo dõi mà các trang web có thể thu thập về bạn khi bạn duyệt.
Rốt cuộc, nếu bạn chưa đăng nhập và bạn không còn bất kỳ cookie theo dõi nào từ trước đó, các trang web sẽ không còn biết chính xác bạn là ai hoặc bạn đã làm gì trong lần truy cập trước.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- PlatoAiStream. Thông minh dữ liệu Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- Đúc kết tương lai với Adryenn Ashley. Truy cập Tại đây.
- Mua và bán cổ phần trong các công ty PRE-IPO với PREIPO®. Truy cập Tại đây.
- nguồn: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- : có
- :là
- :không phải
- :Ở đâu
- $ LÊN
- 1
- 15%
- 2FA
- a
- Có khả năng
- Giới thiệu
- ở trên
- Tuyệt đối
- truy cập
- Tài khoản
- Trợ Lý Giám Đốc
- Mua lại
- Hành động
- hành động
- hoạt động
- tích cực
- hành vi
- thêm
- Thêm
- tư vấn
- tư vấn cho
- Sau
- cách đây
- Tất cả
- phân bổ
- cho phép
- cho phép
- cô đơn
- Đã
- Ngoài ra
- luôn luôn
- đàn bà gan dạ
- trong số
- số lượng
- an
- và
- Một
- trả lời
- bất kì
- bất kỳ ai
- bất cứ điều gì
- ứng dụng
- Apple
- phê duyệt
- phê duyệt
- phê duyệt
- ứng dụng
- LÀ
- xung quanh
- bài viết
- AS
- thẩm định, lượng định, đánh giá
- At
- tấn công
- xác nhận
- chứng thực
- Xác thực
- tác giả
- được ủy quyền
- ủy quyền
- tự động
- tự động
- tránh
- trở lại
- lý lịch
- background-image
- dựa
- BE
- bởi vì
- được
- trước
- giữa
- lớn
- mù quáng
- Chặn
- Blog
- biên giới
- đáy
- người môi giới
- trình duyệt
- cookie trình duyệt
- đệm
- tràn bộ nhớ
- Bug
- lỗi
- nhưng
- by
- cuộc gọi
- gọi là
- CAN
- trường hợp
- Catch
- Nguyên nhân
- gây ra
- Trung tâm
- cơ hội
- Những thay đổi
- kiểm tra
- Séc
- xin
- Thanh toán bù trừ
- khách hàng
- đóng cửa
- đám mây
- mã
- Lập trình
- thu thập
- màu sắc
- đến
- công ty
- Kết nối
- Hãy xem xét
- liên lạc
- điều khiển
- Tiện lợi
- Cookie
- bánh quy
- có thể
- che
- tạo
- Credentials
- mật mã
- khách hàng
- TỘI PHẠM MẠNG
- dữ liệu
- quyết định
- quyết định
- Mặc định
- giao
- Mô tả
- mong muốn
- chi tiết
- chi tiết
- Đối thoại
- ĐÃ LÀM
- Tiêu
- trực tiếp
- tiết lộ
- công bố thông tin
- Bỏ qua
- Giao diện
- do
- làm
- làm
- don
- dont
- được mệnh danh là
- chỉnh sửa
- khác
- cho phép
- cuối
- Ngay cả
- BAO GIỜ
- chính xác
- Kiểm tra
- ví dụ
- Sàn giao dịch
- mong đợi
- kinh nghiệm
- Giải thích
- Khai thác
- Expo
- FAIL
- không
- không
- hấp dẫn
- vài
- cuối cùng
- Sửa chữa
- cố định
- tiếp theo
- sau
- Trong
- tìm thấy
- thường xuyên
- từ
- đầy đủ
- nói chung
- được
- Cho
- được
- Cho
- Go
- Đi
- tốt
- lấy
- rất nhiều
- có
- tay
- Xử lý
- Xử lý
- đã xảy ra
- Xảy ra
- Có
- cao
- hữu ích
- tại đây
- GIỜ LÀM VIỆC
- di chuột
- Độ đáng tin của
- Hướng dẫn
- Tuy nhiên
- HTTPS
- Bản sắc
- if
- thực hiện
- in
- Bao gồm
- gián tiếp
- thông tin
- ban đầu
- thay vì
- ý định
- trong
- điều tra
- vấn đề
- IT
- ITS
- chính nó
- biệt ngữ
- JavaScript
- chỉ
- Giữ
- Key
- Đan
- Biết
- kiến thức
- nổi tiếng
- Họ
- một lát sau
- để lại
- trái
- Lượt thích
- Listening
- ll
- đăng nhập
- khai thác gỗ
- đăng nhập
- còn
- nhìn
- ma thuật
- làm cho
- nhiều
- nhiều người
- Lợi nhuận
- Marketing
- max-width
- có nghĩa là
- có nghĩa là
- Phương tiện truyền thông
- Bộ nhớ
- Might
- sai lầm
- tháng
- chi tiết
- nhiều
- Được đặt theo tên
- Cần
- cần thiết
- không bao giờ
- Mới
- tin tức
- Không
- bình thường
- con số
- lời thề
- Mục tiêu
- of
- off
- cung cấp
- cung cấp
- on
- ONE
- Trực tuyến
- có thể
- mở
- Tùy chọn
- or
- Nền tảng khác
- Khác
- ra
- kết thúc
- riêng
- đóng gói
- thông số
- vượt qua
- Đi qua
- Mật khẩu
- Vá
- Các bản vá lỗi
- paul
- người
- điện thoại
- plato
- Thông tin dữ liệu Plato
- PlatoDữ liệu
- thêm
- Điểm
- điểm
- Phổ biến
- vị trí
- có thể
- bài viết
- trình bày
- ngăn chặn
- riêng
- quá trình
- Quy trình
- Hồ sơ
- Lập trình
- giao thức
- Chứng minh
- cho
- sự công khai
- công bố
- Xuất bản
- mục đích
- Đặt
- Mau
- hơn
- Đọc
- có thật không
- hợp lý
- nhận
- nhận
- chuyển hướng
- giảm
- dựa
- trả lời
- báo cáo
- phóng viên
- Báo cáo
- Báo cáo
- yêu cầu
- yêu cầu
- nhà nghiên cứu
- phản ứng
- chịu trách nhiệm
- Trả về
- ngay
- Nguy cơ
- nguồn gốc
- chạy
- Nói
- muối
- hài lòng
- nói
- nói
- cảnh
- Thứ hai
- an toàn
- an ninh
- thẻ bảo mật
- xem
- nhìn thấy
- đã xem
- nhìn
- gửi
- gởi
- Trình tự
- nghiêm trọng
- dịch vụ
- DỊCH VỤ
- định
- thiết lập
- cổ phiếu
- ngắn
- nên
- Chương trình
- đăng ký
- tương tự
- đơn giản hóa
- đơn giản
- website
- Các trang web
- thông minh
- So
- Mạng xã hội
- truyền thông xã hội
- Bài đăng trên mạng xã hội
- rắn
- giải pháp
- một số
- một cái gì đó
- Chẳng bao lâu
- nói
- đặc biệt
- quy định
- Bắt đầu
- ở lại
- Các bước
- lưu trữ
- trình
- thành công
- như vậy
- cung cấp
- SVG
- hệ thống
- Thảo luận
- nói
- nói
- hơn
- việc này
- Sản phẩm
- cung cấp their dịch
- Them
- sau đó
- vì thế
- Kia là
- họ
- điều này
- những
- Tuy nhiên?
- số ba
- thời gian
- đến
- mã thông báo
- bộ công cụ
- hàng đầu
- Theo dõi
- quá trình chuyển đổi
- minh bạch
- điều trị
- cố gắng
- kích hoạt
- được kích hoạt
- NIỀM TIN
- tin tưởng
- thử
- XOAY
- hai
- Cuối cùng
- Dưới
- trên
- URL
- us
- đã sử dụng
- người sử dang
- Người sử dụng
- sử dụng
- HIỆU LỰC
- xác nhận
- nhà cung cấp
- Xác minh
- xác minh
- thông qua
- Truy cập
- đến thăm
- quan trọng
- dễ bị tổn thương
- muốn
- là
- Đường..
- cách
- we
- web
- các dịch vụ web
- Website
- tuần
- đi
- là
- Điều gì
- khi nào
- bất cứ khi nào
- cái nào
- CHÚNG TÔI LÀ
- sẽ
- với
- ở trong
- không có
- sẽ
- viết
- Sai
- X
- Vâng
- nhưng
- bạn
- trên màn hình
- mình
- zephyrnet