1/ SIMD-0334, door Stanislav Ladyzhenskiy, verhelpt de syscall-controle alt_bn128_pairing van Solana. Het voegt een juiste lengtecontrole toe op de invoerbytes voor elliptische kromme paringen, waardoor misbruik met onjuist geformatteerde invoer wordt voorkomen. Laten we uiteenzetten wat dit betekent 🧵
2/ alt_bn128_pairing is een syscall voor pairing op de BN128 elliptische kromme die wordt gebruikt in zero knowledge proofs. Het neemt een lijst van krommepunten als invoer. Elk paar punten is 192 bytes, dus geldige invoer moet een veelvoud van 192 bytes lang zijn.
3/ Het probleem: de lengtecontrole gebruikte Rust's checked_rem onjuist. checked_rem retourneert alleen None bij deling door nul, dus de controle faalde nooit met 192. Als gevolg hiervan zou de pairing-syscall worden uitgevoerd, zelfs als de invoer geen veelvoud van 192 was.
4/ De oplossing: controleer of de invoerlengte een veelvoud van 192 is en geef een foutmelding als dat niet het geval is. Dit vangt eventuele resterende bytes onmiddellijk op in plaats van ze stilletjes te negeren. De codewijzigingen zijn in solana-sdk en worden geleverd met Agave v3.1.0.
1,11K