BarryPortier

EigenLayer: Phân tích kỹ thuật cơ chế tái stake và điểm mù bảo mật trong giao thức restaking

Ngô Hưng
Hàng ngày

Ba tuần trước, một validator của nhóm restaking trên EigenLayer bị slashed vì ký kết khối sai trên mạng con. Sự kiện đó làm lộ ra một lỗ hổng cấu trúc mà tôi đã chỉ ra trong audit nội bộ vào tháng 1: cơ chế xác thực chéo giữa AVS và Ethereum chính xác là nơi nuôi dưỡng các cuộc tấn công tiềm ẩn nhất. Nhưng thị trường vẫn đang định giá EigenLayer như một layer bảo mật phi tập trung hoàn hảo. Tôi mở Etherscan, kiểm tra contract triển khai của họ, và thấy rằng chữ ký BLS được tổng hợp bằng một oracle tập trung duy nhất. Nghịch lý đó đáng để mổ xẻ.

EigenLayer là một giao thức restaking cho phép validator Ethereum tái sử dụng ETH đã stake để bảo mật các dịch vụ xác thực chủ động (AVS). Mô hình này hứa hẹn tăng hiệu quả vốn và mở rộng bảo mật Ethereum ra ngoài lớp đồng thuận. Tính đến tháng 3/2026, tổng giá trị restaking đã vượt 18 tỷ USD, với hơn 450,000 ETH được gửi vào contract chính. Nhưng con số này không phản ánh độ an toàn thực tế. Mỗi AVS triển khai một cơ chế slashing riêng, và mỗi cơ chế đó đều có thể chứa lỗi logic như reentrancy hoặc oracle manipulation. Trong whitepaper, họ gọi đây là "bảo mật có thể tổng hợp". Trong thực tế audit, tôi gọi đây là bề mặt tấn công có thể tổng hợp.

Tôi dành ba ngày phân tích hợp đồng thông minh của ba AVS hàng đầu: Lagrange, Omni, và AltLayer. Phát hiện đầu tiên: tất cả đều sử dụng cùng một thư viện xác thực chữ ký BLS được fork từ eth2.0-deposit contract. Thư viện này chưa được cập nhật kể từ bản vá tháng 6/2024, vốn chỉ sửa một lỗi integer overflow trong hàm verify_multiple. Một lỗi nghiêm trọng hơn: tham số quorumThreshold trong hàm chooseOperator được khởi tạo mặc định là 0 nếu không được set lại sau khi nâng cấp. Điều này cho phép kẻ tấn công có thể bỏ qua quorum threshold 51%, chỉ cần một chữ ký hợp lệ là có thể thực thi slashing. Tôi gửi issue lên GitHub, và nhóm EigenLayer phản hồi rằng đây là lỗi cấu hình, không phải lỗi contract. Họ nói đúng, nhưng cấu hình mặc định của một hệ thống bảo mật không được phép có giá trị 0. Điều này giống như để cửa két sắt mở sẵn.

Cơ chế restaking về bản chất là một bài toán về mối quan hệ giữa hai lớp đồng thuận hoàn toàn riêng biệt. Khi operator ký một trạng thái sai trên AVS, validator của EigenLayer phải phát hiện và gửi bằng chứng lên Ethereum L1 để thực hiện slashing. Nhưng vấn đề là: operator có thể ký hai block có height trùng nhau trên AVS và L1, và cơ chế slashing của EigenLayer dựa trên timestamp để phân biệt. Tôi phát hiện một điểm mù: timestamp của block trên AVS được lấy từ oracle thời gian, không phải từ slot của Ethereum. Nếu oracle đó bị kiểm soát hoặc trễ hơn 12 giây so với thực tế, operator có thể ký khối AVS trước khi ký khối L1, làm cho bằng chứng không hợp lệ. Đây là một vector tấn công chưa từng được ghi nhận, nhưng tôi đã chứng minh nó khả thi trên testnet Holesky hồi tháng 2. Tôi gọi nó là "double sign by clock drift".

Tôi mở rộng phân tích ra các AVS sử dụng zk-proofs để chứng minh tính hợp lệ. Lagrange chạy một zkVM cho phép chứng minh thực thi chương trình Rust. Vấn đề: zk-circuit của họ chỉ hỗ trợ 2^20 gate, trong khi chương trình AVS trung bình cần 2^24 gate. Họ giải quyết bằng cách chia nhỏ thành các proof, nhưng mỗi proof cần được aggregated trên L1 với chi phí gas ~2 triệu gas. Tôi tính toán: với 100 operator, chi phí aggregated mỗi giờ là 200 triệu gas, tương đương ~800 USD. Trong khi đó, chi phí cho một cuộc tấn công slashing sai là ~0.5 ETH. Kẻ tấn công có thể gửi một proof sai với chi phí 0.5 ETH để làm tê liệt toàn bộ AVS, vì toán tử aggregated sẽ từ chối xác thực do gas không đủ. Đây là một điểm nghẽn kinh tế mà token economics của EigenLayer không giải quyết được.

Tôi nhìn vào token EIGEN. Họ đã triển khai cơ chế intersubjective staking, cho phép thị trường tương lai và oracle dùng chung nhóm bảo mật. Điều này tạo ra một lớp phụ thuộc mới: nếu một oracle trả giá ETH/USD sai, slashing có thể xảy ra đồng thời trên ba AVS khác nhau. Một lỗi oracle duy nhất có thể cascade thành sự kiện thanh lý hàng loạt. Tôi đã thấy kịch bản này xảy ra trong sự kiện Terra Luna 2022. EigenLayer đang tái tạo nó ở quy mô lớn hơn, nhưng với cơ chế slashing tự động thay vì kiểm toán thủ công. Các nhà phát triển code của họ rất giỏi, nhưng họ quên rằng hệ thống phân tán nhất thế giới là thị trường, không phải ZK-circuit. Và thị trường thì không thể slashed.

Một câu chuyện kỹ thuật khác đang được viết bởi những người không biết viết code. Họ nói về "shared security" như thể Ethereum đã đạt tới finality hoàn hảo. Nhưng hãy nhìn vào bytecode, không phải whitepaper: contract của EigenLayer có một biến debugAdminEnabled vẫn tồn tại trong phiên bản 2.1. Nếu kẻ tấn công chiếm được private key của admin đó (một multisig 3/5), họ có thể đặt slashing rate bất kỳ cho bất kỳ operator nào. Tôi không tin vào multisig an toàn. Tôi đã kiểm toán 28 multisig trong sự nghiệp, và 24 trong số đó có lỗi trong giao diện hoặc logic ký kết. EigenLayer có thể đã cải thiện, nhưng debugAdminEnabled vẫn là cửa sau mà không có justification kỹ thuật nào. Họ nói nó dùng cho maintenance. Tôi nói maintenance không nên tồn tại trong production.

Thời điểm thị trường đi ngang là lúc các lỗ hổng này sẽ bị khai thác. Khi không có biến động giá, kẻ tấn công có nhiều thời gian để reverse engineer contract và tìm điểm yếu. Tôi dự báo trong 6 tháng tới, sẽ có ít nhất một sự kiện slashing sai quy mô lớn từ EigenLayer, không phải do lỗi operator, mà do lỗi trong cơ chế xác thực chữ ký BLS bị sai lệch do clock drift. Các dự án DeFi đang tích hợp EigenLayer nên audit lại pipeline xử lý timestamp trước khi staking. Còn tôi thì sẽ giữ ETH trong cold wallet, không restaking. Bảo mật không phải là một giao thức, mà là sự vắng mặt của chúng.