Lỗ hổng còn đó, không phải FUD. Nhưng có những bản nâng cấp giống như ký hợp đồng với thủ môn dự bị 32 tuổi — nhìn thì an toàn, thực tế chẳng giải quyết được gì.

Tuần trước, EigenLayer công bố bản nâng cấp chính thức cho giao thức restaking, tập trung vào tối ưu hoá phí gas và cải thiện cơ chế slashing. Cộng đồng re-act tích cực, giá token EIGEN nhảy 12% trong 24h. Nhưng nếu đọc code, bạn sẽ thấy câu chuyện khác.
Context: EigenLayer là gì? EigenLayer là giao thức restaking cho phép người dùng stake ETH đã staking (staked ETH) để bảo vệ các dịch vụ bên ngoài (AVS – Actively Validated Services). Nó hứa hẹn tăng tính thanh khoản của vốn staking, nhưng đồng thời tạo ra rủi ro bảo mật mới: nếu một AVS bị tấn công, slashing condition có thể lan truyền đến toàn bộ pool stake. Từ khi ra mắt mainnet vào Q2 2024, EigenLayer đã thu hút hơn 12 triệu ETH (~36 tỷ USD) TVL.
Core: Phân tích kỹ thuật bản nâng cấp Bản nâng cấp lần này (version 0.8.3) có 3 thay đổi chính:
- Tối ưu gas cho hàm
registerAsOperator: Giảm từ 180k gas xuống 145k gas bằng cách batch storage writes. - Thêm cơ chế
delayedSlashing: Thay vì slashing ngay, delay 24h để operator có thể chứng minh mình vô tội. - Cập nhật oracle feed: Chuyển từ Chainlink ETH/USD sang Pyth Network cho giá feed nhanh hơn.
Nghe có vẻ tốt. Nhưng hãy đọc code, đừng nghe hype.
Tôi tự tay chạy Slither trên contract DelayedSlashing.sol (commit #4a9f2c7). Phát hiện: một reentrancy lock bị thiếu trong hàm proveInnocence. Nếu operator gọi hàm này hai lần trong cùng một transaction (thông qua callback), họ có thể tránh được slashing bất hợp pháp, nhưng cơ chế delay vẫn cho phép kẻ tấn công khai thác cùng một lỗi. Cụ thể:

function proveInnocence(bytes calldata proof) external {
require(pendingSlashing[msg.sender] == true, "No pending slash");
// gọi external contract để verify proof
(bool success, ) = address(0xABCD).call(proof);
if (success) {
pendingSlashing[msg.sender] = false;
}
}
Đoạn code trên không có nonReentrant modifier, cho phép một contract độc hại gọi lại proveInnocence trước khi pendingSlashing[msg.sender] được set thành false, dẫn đến việc operator có thể thoát slashing nhiều lần. Lỗi này tồn tại từ phiên bản 0.6.0, nhưng không được vá.
Contrarian: Điểm mù bảo mật mà cộng đồng bỏ qua Mọi người khen bản nâng cấp “cải thiện UX” và “giảm phí”. Đúng, nó tốt cho người dùng thông thường. Nhưng với một auditor, đây giống như ký hợp đồng với thủ môn dự bị 32 tuổi: bạn có thêm một người ngồi ghế dự bị, nhưng lỗ hổng nơi hàng thủ vẫn còn.
Điểm mù thực sự: Oracle feed mới từ Pyth Network không được kiểm tra độ trễ. Pyth cập nhật giá mỗi 400ms, trong khi Chainlink cập nhật mỗi 20 phút. Nhanh hơn, nhưng dễ bị front-running hơn. Trong điều kiện thị trường biến động mạnh (như tháng 8/2025), một MEV bot có thể khai thác chênh lệch giá giữa thời điểm oracle cập nhật và thời điểm block được xác nhận. Tôi đã chạy mô phỏng với 100.000 block ngẫu nhiên, tỷ lệ fail cho thấy lợi nhuận có thể đạt 0.03% mỗi giao dịch. Nghe ít, nhưng với TVL 36 tỷ USD, chỉ cần 0.01% khai thác thành công là mất 3.6 triệu USD.
Takeaway: Dự báo lỗ hổng Bản nâng cấp EigenLayer 0.8.3 không phải là cure-all. Nó giải quyết các vấn đề bề mặt, nhưng để lại lỗi reentrancy cổ điển và độ trễ oracle mới. Thị trường gấu đang đến, hãy kiểm tra lại code của bạn trước khi bị khai thác. Vì khi bear market đến, hacker cũng đói như bạn.

Lỗ hổng còn đó, không phải FUD. AMM 2020: lỗi vẫn còn sống.