Phân tích lỗ hổng tràn số nguyên trong ngôn ngữ Move
Sau khi nghiên cứu sâu về ngôn ngữ Move, chúng tôi đã phát hiện một lỗ hổng tràn số nguyên mới. Lỗ hổng này xuất hiện trong giai đoạn kiểm tra an toàn tham chiếu của quá trình xác thực bytecode ngôn ngữ Move. Bài viết này sẽ phân tích chi tiết quá trình kích hoạt lỗ hổng này và khám phá một số khái niệm cốt lõi của ngôn ngữ Move.
Quy trình xác minh bytecode của ngôn ngữ Move
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, chia thành 4 bước. Lỗ hổng lần này xảy ra trong bước reference_safety. Bước này chủ yếu chịu trách nhiệm xác minh tính an toàn của tham chiếu, bao gồm kiểm tra xem có tồn tại tham chiếu lơ lửng hay không, truy cập tham chiếu có thể thay đổi có an toàn hay không, v.v.
Quá trình xác thực sẽ bắt đầu bằng việc nhận diện các khối cơ bản trong mã. Khối cơ bản là chuỗi mã không có lệnh phân nhánh ngoài điểm vào và điểm ra. Move xác định các khối cơ bản bằng cách duyệt qua bytecode, tìm kiếm tất cả các lệnh phân nhánh và lệnh vòng lặp.
An toàn tham chiếu trong Move
Move hỗ trợ hai loại tham chiếu: tham chiếu không thay đổi ( và tham chiếu thay đổi )&mut(. Mô-đun an toàn tham chiếu sẽ quét từng bytecode trong mỗi khối cơ bản của hàm, xác minh rằng tất cả các thao tác tham chiếu là hợp pháp.
Quá trình xác thực sử dụng cấu trúc AbstractState để biểu diễn trạng thái, bao gồm đồ thị vay và các biến địa phương. Trong quá trình xác thực, trạng thái trước và sau khi thực hiện sẽ được so sánh và cập nhật trạng thái khối.
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-eb6397a8a98b556071724d98a4837b59.webp(
Phân tích lỗ hổng
Lỗi xảy ra trong hàm join_. Hàm này được sử dụng để hợp nhất trạng thái trước và sau khi thực thi, cập nhật bản đồ locals và đồ thị mượn. Vấn đề nằm ở việc trình lặp locals trả về kiểu u8, khi tổng chiều dài tham số và chiều dài biến cục bộ vượt quá 256 sẽ xảy ra tràn.
Mặc dù Move có quá trình kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ, không bao gồm độ dài tham số.
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
Khai thác lỗ hổng
Sử dụng sự tràn này có thể thay đổi trạng thái của khối cơ bản. Trong mã lặp, trạng thái sẽ thay đổi sau mỗi lần thực thi khối cơ bản. Khi thực thi lại, nếu chỉ số được truy cập bởi lệnh không tồn tại trong bản đồ locals mới, sẽ dẫn đến panic, từ đó thực hiện tấn công DoS.
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
Demo PoC
Cung cấp một mã PoC có thể tái hiện, kích hoạt tràn số nguyên dẫn đến sự cố chương trình bằng cách thiết lập các tham số cụ thể và số lượng biến cục bộ.
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
Tóm tắt
Lỗ hổng này một lần nữa chứng minh tầm quan trọng của việc kiểm tra mã. Đối với ngôn ngữ Move, nên thêm nhiều kiểm tra an ninh hơn trong thời gian chạy, thay vì chỉ dựa vào các kiểm tra giai đoạn xác minh. Chúng tôi sẽ tiếp tục nghiên cứu sâu hơn về các vấn đề an ninh của ngôn ngữ Move, đóng góp vào sự phát triển của nó.
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
25 thích
Phần thưởng
25
7
Chia sẻ
Bình luận
0/400
RektButStillHere
· 07-11 04:35
Lại tràn ra rồi, chậc chậc.
Xem bản gốcTrả lời0
consensus_failure
· 07-11 01:01
Thật sự còn có lỗi này.
Xem bản gốcTrả lời0
SchrodingersPaper
· 07-09 07:32
move lại gửi rồi? Chơi hỏng rồi, chơi hỏng rồi
Xem bản gốcTrả lời0
DevChive
· 07-08 16:28
菜鸟 bị chơi đùa với mọi người
Xem bản gốcTrả lời0
ProposalManiac
· 07-08 06:09
Đã nói rằng việc kiểm tra tham số không chỉ nên viết trong tài liệu.
Khám phá lỗ hổng tràn số nguyên trong ngôn ngữ Move: Những rủi ro trong xác minh bytecode
Phân tích lỗ hổng tràn số nguyên trong ngôn ngữ Move
Sau khi nghiên cứu sâu về ngôn ngữ Move, chúng tôi đã phát hiện một lỗ hổng tràn số nguyên mới. Lỗ hổng này xuất hiện trong giai đoạn kiểm tra an toàn tham chiếu của quá trình xác thực bytecode ngôn ngữ Move. Bài viết này sẽ phân tích chi tiết quá trình kích hoạt lỗ hổng này và khám phá một số khái niệm cốt lõi của ngôn ngữ Move.
Quy trình xác minh bytecode của ngôn ngữ Move
Ngôn ngữ Move sẽ thực hiện xác minh mã trước khi thực thi bytecode, chia thành 4 bước. Lỗ hổng lần này xảy ra trong bước reference_safety. Bước này chủ yếu chịu trách nhiệm xác minh tính an toàn của tham chiếu, bao gồm kiểm tra xem có tồn tại tham chiếu lơ lửng hay không, truy cập tham chiếu có thể thay đổi có an toàn hay không, v.v.
Quá trình xác thực sẽ bắt đầu bằng việc nhận diện các khối cơ bản trong mã. Khối cơ bản là chuỗi mã không có lệnh phân nhánh ngoài điểm vào và điểm ra. Move xác định các khối cơ bản bằng cách duyệt qua bytecode, tìm kiếm tất cả các lệnh phân nhánh và lệnh vòng lặp.
An toàn tham chiếu trong Move
Move hỗ trợ hai loại tham chiếu: tham chiếu không thay đổi ( và tham chiếu thay đổi )&mut(. Mô-đun an toàn tham chiếu sẽ quét từng bytecode trong mỗi khối cơ bản của hàm, xác minh rằng tất cả các thao tác tham chiếu là hợp pháp.
Quá trình xác thực sử dụng cấu trúc AbstractState để biểu diễn trạng thái, bao gồm đồ thị vay và các biến địa phương. Trong quá trình xác thực, trạng thái trước và sau khi thực hiện sẽ được so sánh và cập nhật trạng thái khối.
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-eb6397a8a98b556071724d98a4837b59.webp(
Phân tích lỗ hổng
Lỗi xảy ra trong hàm join_. Hàm này được sử dụng để hợp nhất trạng thái trước và sau khi thực thi, cập nhật bản đồ locals và đồ thị mượn. Vấn đề nằm ở việc trình lặp locals trả về kiểu u8, khi tổng chiều dài tham số và chiều dài biến cục bộ vượt quá 256 sẽ xảy ra tràn.
Mặc dù Move có quá trình kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ, không bao gồm độ dài tham số.
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
Khai thác lỗ hổng
Sử dụng sự tràn này có thể thay đổi trạng thái của khối cơ bản. Trong mã lặp, trạng thái sẽ thay đổi sau mỗi lần thực thi khối cơ bản. Khi thực thi lại, nếu chỉ số được truy cập bởi lệnh không tồn tại trong bản đồ locals mới, sẽ dẫn đến panic, từ đó thực hiện tấn công DoS.
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
Demo PoC
Cung cấp một mã PoC có thể tái hiện, kích hoạt tràn số nguyên dẫn đến sự cố chương trình bằng cách thiết lập các tham số cụ thể và số lượng biến cục bộ.
![Numen Cyber phát hiện độc quyền lỗ hổng cao nguy hiểm khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber phát hiện độc quyền lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
Tóm tắt
Lỗ hổng này một lần nữa chứng minh tầm quan trọng của việc kiểm tra mã. Đối với ngôn ngữ Move, nên thêm nhiều kiểm tra an ninh hơn trong thời gian chạy, thay vì chỉ dựa vào các kiểm tra giai đoạn xác minh. Chúng tôi sẽ tiếp tục nghiên cứu sâu hơn về các vấn đề an ninh của ngôn ngữ Move, đóng góp vào sự phát triển của nó.
![Numen Cyber phát hiện độc quyền một lỗ hổng nghiêm trọng khác trong ngôn ngữ move])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(