Faili la modeli lenye baiti 65 linaweza kusimamisha ghafla injini maarufu ya inference ya Llama CPP. Payload hiyo ndogo husababisha mgawanyo kwa sifuri (division-by-zero) ndani ya parser, na kusababisha hitilafu ya SIGFPE.
Kwa nini hitilafu hii ni muhimu
Nini kilichotokea
Parser husoma metadata ya modeli kwenye miundo ya C++ na kuhakikisha kuwa kila kipimo cha tensor (tensor dimension) ni "isiyo hasi" (non-negative). Sifuri inakidhi sharti hilo, hivyo ukaguzi unapita. Mstari unaofuata wa kodi unatumia kipimo hicho kama kigawanyo katika hesabu inayochukulia kuwa thamani hiyo ni chanya. Kipimo kinapokuwa sifuri, mgawanyo huo unatoa hitilafu ya floating-point (SIGFPE) na kusitisha programu.
Uhakiki huo ulihusisha nusu tu ya kanuni inayohitajika (invariant): uliblock thamani hasi lakini ukapuuza sifuri, ambayo pia si salama kwa hesabu zinazofuata.
Nini watengenezaji wanapaswa kufanya
- Chukulia faili za modeli kama binaries. Kupakia modeli kunahusisha kusoma baiti ghafi (raw bytes) na kuziweka kwenye miundo ya kumbukumbu, ambayo ni mpaka wa kawaida ambapo data isiyoikaguliwa inaweza kusababisha programu kuzima au kufanya mabaya zaidi.
- Epuka ukaguzi wa nusu. Sharti linalohusisha sehemu tu ya kanuni inayohitajika linatoa hisia ya ulinzi ya uongo. Hapa, "isiyo hasi" haikutosha; kodi ilihitaji "chanya".
- Hoja dhidi ya dhana baada ya kila ukaguzi. Wakati kipimo cha mipaka (bounds test) kinapotokea, hakikisha kuwa kodi inayofuata haitegemei sifa kali zaidi.
- Tumia zana za fuzzing. Mwandishi aligundua hitilafu hiyo kwa kuendesha libFuzzer pamoja na AddressSanitizer, ambazo hubadilisha viingizio (inputs) na kuashiria operesheni zisizo halali kama vile mgawanyo kwa sifuri.
Jinsi marekebisho yalivyotekelezwa
Marekebisho hayo yanaongeza ulinzi (guard) unaoruka hesabu ya overflow wakati kipimo kinapokuwa sifuri. Masharti haya madogo yanahifadhi uwezo wa kutumia tensor zenye ukubwa wa sifuri—zinazotumiwa katika baadhi ya matoleo ya modeli kwa vipengele vya hiari—huku yakiondoa njia ya hitilafu hiyo.
Funzo: Faili moja la baiti 65 linaweza kusimamisha injini ya inference inayotumiwa sana; uhakiki wa kina na fuzzing ya kimfumo huweka programu za kupakia modeli (model loaders) katika hali salama.
Chanzo: https://dev.to/harrisonsec/your-model-file-is-untrusted-input-1eap
