
Lỗ 3,3 triệu USD do lỗ hổng trong khâu xác minh dữ liệu: Phân tích chi tiết sự kiện tấn công Socket
Tuyển chọn TechFlowTuyển chọn TechFlow

Lỗ 3,3 triệu USD do lỗ hổng trong khâu xác minh dữ liệu: Phân tích chi tiết sự kiện tấn công Socket
Ngày 16 tháng 1 năm 2024, Socket Tech bị tấn công, thiệt hại khoảng 3,3 triệu USD, bài viết này phân tích chi tiết diễn biến sự việc.
Tác giả: CertiK

Vào ngày 16 tháng 1 năm 2024, Socket Tech đã bị tấn công, thiệt hại khoảng 3,3 triệu USD. Kẻ tấn công đã lợi dụng lỗ hổng trong khâu xác thực dữ liệu của một hợp đồng thuộc Socket, thông qua việc đưa vào dữ liệu độc hại để đánh cắp tiền từ người dùng đã ủy quyền cho hợp đồng. Vụ tấn công này đã gây tổn thất cho tổng cộng 230 địa chỉ, với mức tổn thất lớn nhất tại một địa chỉ lên tới khoảng 656.000 USD.
Giới thiệu bối cảnh
Socket là một giao thức tương tác nhằm đảm bảo an toàn và hiệu quả trong việc truyền tải dữ liệu cũng như tài sản xuyên chuỗi. Hợp đồng Socket Gateway là điểm truy cập cho mọi tương tác với lớp thanh khoản của Socket, nơi tất cả các cầu nối tài sản (bridge) và DEX hội tụ thành một meta-bridge duy nhất, tự động chọn tuyến giao dịch tối ưu dựa trên sở thích của người dùng (như chi phí, độ trễ hoặc độ an toàn).
Ba ngày trước khi xảy ra vụ tấn công, quản trị viên hợp đồng Socket đã thực hiện lệnh addRoute để thêm một tuyến đường mới vào hệ thống. Mục đích của việc thêm tuyến đường này là mở rộng chức năng của cổng Socket, nhưng lại vô tình tạo ra một lỗ hổng nghiêm trọng.
Hình dưới đây cho thấy bản ghi về việc thêm tuyến đường bởi quản trị viên hợp đồng:

Tóm tắt sự kiện
1. Vào lúc 15:03 (giờ Bắc Kinh), ngày 16 tháng 1, ví của kẻ tấn công đã chuyển tiền để phục vụ cho cuộc tấn công. Phân tích thời gian của chúng tôi cho thấy số tiền này đến từ địa chỉ 0xe620, có liên quan đến việc rút 10 BNB từ Tornado Cash.

2. Số tiền này được dùng để tạo và triển khai hai hợp đồng nhằm khai thác lỗ hổng của Socket. Hợp đồng đầu tiên nhắm mục tiêu vào USDC trong các địa chỉ đã ủy quyền cho SocketGateway (xem hình chụp màn hình bên dưới). Tổng cộng 127 nạn nhân đã mất khoảng 2,5 triệu USD.

3. Tiếp theo, hợp đồng thứ hai nhắm vào WETH, USDT, WBTC, DAI và MATIC trong các địa chỉ nạn nhân. Thêm 104 nạn nhân khác bị mất các tài sản tương ứng như sau:
-
42,48 WETH
-
347.005,65 USDT
-
2,89 WBTC
-
13.821,01 DAI
-
165.356,99 MATIC
4. Kẻ tấn công đã chuyển đổi USDC và USDT thành ETH.

Nguồn gốc lỗ hổng
Lỗ hổng bị kẻ tấn công khai thác nằm trong hàm performAction của địa chỉ định tuyến mới được thêm vào — routeAddress.
Hàm performAction trong địa chỉ này ban đầu được thiết kế để hỗ trợ chức năng wrapping và unwrapping.
Tuy nhiên, hàm này tồn tại một lỗ hổng nghiêm trọng: người dùng có thể trực tiếp truyền dữ liệu từ bên ngoài vào .call() thông qua tham số swapExtraData mà không cần xác thực, điều này cho phép kẻ tấn công thực thi các hàm độc hại tùy ý.

Trong sự kiện này, kẻ tấn công đã tạo ra một đầu vào swapExtraData độc hại nhằm kích hoạt hàm transferFrom. Lời gọi độc hại này đã lợi dụng việc người dùng đã ủy quyền cho hợp đồng SocketGateway để lấy cắp tiền từ họ.
Mặc dù hợp đồng có kiểm tra sự thay đổi đúng đắn của số dư người dùng sau lời gọi fromToken.call(), nhưng hàm này không tính đến trường hợp kẻ tấn công đặt số lượng giao dịch bằng 0.

Phục hồi quy trình tấn công
1. Sử dụng hợp đồng tấn công, kẻ tấn công gọi hàm 0x00000196() trên hợp đồng Socket Gateway.

2. Hàm fallback() sử dụng chữ ký hex 196 để gọi đến hợp đồng địa chỉ định tuyến (routerAddress) có lỗ hổng.

3. Trong ảnh chụp màn hình bên dưới, ta có thể thấy đầu vào giả mạo do kẻ tấn công sử dụng, với toàn bộ số lượng Swapping đều là 0.

4. Tiếp theo, WrappedTokenSwapperImpl.performAction() sẽ được gọi để thực hiện việc hoán đổi (swap).

5. Không có bất kỳ xác thực nào, SwapExtraData giả mạo được fromToken (WETH) chấp nhận và thực thi.

6. Kẻ tấn công lặp lại quy trình trên cho đến khi làm cạn kiệt tài sản của nạn nhân. Sau khi các giao dịch độc hại xuất hiện, Socket đã nhanh chóng gọi disableRoute để vô hiệu hóa tuyến đường có lỗ hổng, ngăn chặn thiệt hại lan rộng hơn.
7. Vào ngày 23 tháng 1, Socket thông báo đã thu hồi được 1.032 ETH, và vào ngày 25 đã tuyên bố sẽ hoàn trả đầy đủ cho tất cả các nạn nhân. Sự cố này đã được giải quyết.

Tổng kết sự kiện
Các cuộc tấn công bằng calldata độc hại trong các hợp đồng định tuyến có quyền ủy quyền không giới hạn từ người dùng không phải là hiếm.
Những vụ tấn công tương tự trước đây bao gồm Dexible và Hector Bridge.
Vào ngày 17 tháng 2 năm 2023, sàn giao dịch phi tập trung Dexible bị tấn công, thiệt hại hơn 1,5 triệu USD. Kẻ khai thác đã đưa calldata độc hại vào hàm fill() của Dexible để đánh cắp tài sản người dùng.
Vào ngày 2 tháng 6 năm 2023, giao thức trên mạng Hector bị tấn công. Kẻ tấn công đã triển khai một hợp đồng USDC giả và thông qua calldata độc hại, đã chuyển 652.000 USDC thật từ các hợp đồng nạn nhân.
Các nền tảng tổng hợp blockchain thường tăng tính thanh khoản và giảm tổn thất bằng cách đóng gói nhiều cầu nối và hợp đồng định tuyến. Tuy nhiên, sự phức tạp này lại tạo ra nhiều thách thức an ninh hơn.
Việc sự cố của Socket được giải quyết là kết quả của nỗ lực từ nhiều phía. CertiK sẽ tiếp tục cam kết cung cấp dịch vụ kiểm toán và phát hiện toàn diện cho các nền tảng, giảm thiểu rủi ro tổng hợp, nâng cao niềm tin cộng đồng và cải thiện mức độ an toàn chung cho toàn ngành.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News









