Serangan kali ini mengungkapkan masalah klasik overflow integer, yang secara spesifik muncul sebagai pemotongan data selama proses konversi tipe.
Rincian detail teknis:
1)Penempatan kerentanan: Masalah muncul dalam mekanisme konversi tipe fungsi get_amount_by_liquidity, di mana konversi paksa dari u256 ke u64 menyebabkan kehilangan data pada posisi tinggi.
2)Proses serangan:
1. Penyerang memasukkan parameter jumlah likuiditas yang sangat besar melalui fungsi add_liquidity; 2、Sistem memanggil fungsi get_delta_b untuk menghitung jumlah token B yang diperlukan; 3、Dalam proses perhitungan, dua data tipe u128 yang dikalikan, hasil teoritisnya seharusnya berupa tipe u256;
关键缺陷:函数返回时将u256结果强制转换为u64,导致高位128位数据被截断。
3)Penggunaan Efek: Kuota likuiditas yang sebelumnya memerlukan banyak token untuk diciptakan, sekarang hanya memerlukan sejumlah kecil token untuk diselesaikan. Penyerang memperoleh bagian likuiditas yang besar dengan biaya yang sangat rendah, kemudian melakukan arbitrase kolam dana dengan menghancurkan sebagian likuiditas.
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Serangan kali ini mengungkapkan masalah klasik overflow integer, yang secara spesifik muncul sebagai pemotongan data selama proses konversi tipe.
Rincian detail teknis:
1)Penempatan kerentanan: Masalah muncul dalam mekanisme konversi tipe fungsi get_amount_by_liquidity, di mana konversi paksa dari u256 ke u64 menyebabkan kehilangan data pada posisi tinggi.
2)Proses serangan:
1. Penyerang memasukkan parameter jumlah likuiditas yang sangat besar melalui fungsi add_liquidity;
2、Sistem memanggil fungsi get_delta_b untuk menghitung jumlah token B yang diperlukan;
3、Dalam proses perhitungan, dua data tipe u128 yang dikalikan, hasil teoritisnya seharusnya berupa tipe u256;
关键缺陷:函数返回时将u256结果强制转换为u64,导致高位128位数据被截断。
3)Penggunaan Efek: Kuota likuiditas yang sebelumnya memerlukan banyak token untuk diciptakan, sekarang hanya memerlukan sejumlah kecil token untuk diselesaikan. Penyerang memperoleh bagian likuiditas yang besar dengan biaya yang sangat rendah, kemudian melakukan arbitrase kolam dana dengan menghancurkan sebagian likuiditas.
简单类比:就像用只能显示8位数的计算器计算10亿×10亿,20位的计算结果只能显示后8位,前12位直接消失。 攻击者正是利用了这种"计算精度缺少"kerentanan。
Move语言在资源管理和类型安全方面确实具备显有优势,能够有效防范双重支付、资源泄露等底层安全问题。 但此次Cetus协议出现的是应用逻辑层面的数学计算错误,并非Move语言本身的设计缺陷。
具体而言,Move的类型系统虽然严格,但对于显式类型转换(explicit casting)操作,仍需依赖开发者的正确判断。 当程序主动执行u256到u64的类型转换时,编译器无法判断这是有意设计还是逻辑错误。
此外,这次安全事件与Sui的共识机制、交易处理、状态管理等核心底层功能完全无关。 Sui Network只是忠实执行了Cetus协议提交的交易指令,漏洞源于应用层协议本身的逻辑缺陷。
说白了,再先进的编程语言也无法完全杜绝应用层的逻辑错误。 Move能够防范大部分底层安全风险,但无法代替开发者进行业务逻辑的边界检查和数学运算的溢出保护。