65-બાઇટની મોડેલ ફાઇલ લોકપ્રિય Llama CPP ઇન્ફરન્સ એન્જિનને અચાનક અટકાવી શકે છે. આ નાનકડો પેલોડ પાર્સરની અંદર 'division-by-zero' (શૂન્ય વડે ભાગાકાર) ટ્રિગર કરે છે, જેનાથી SIGFPE ક્રેશ થાય છે.

આ ક્રેશ શા માટે મહત્વનો છે

શું ભૂલ થઈ હતી

પાર્સર મોડેલ મેટાડેટાને C++ સ્ટ્રક્ચર્સમાં વાંચે છે અને તપાસે છે કે દરેક ટેન્સર ડાયમેન્શન (tensor dimension) “non-negative” (ઋણ ન હોય તેવું) છે કે નહીં. શૂન્ય (Zero) તે શરતને સંતોષે છે, તેથી તપાસ સફળ થાય છે. ત્યારબાદ કોડની આગલી લાઇન તે ડાયમેન્શનનો ઉપયોગ ભાગાકાર માટે કરે છે, જે એવી ધારણા પર આધારિત છે કે કિંમત પોઝિટિવ (positive) હશે. જ્યારે ડાયમેન્શન શૂન્ય હોય છે, ત્યારે ભાગાકાર ફ્લોટિંગ-પોઈન્ટ એક્સેપ્શન (SIGFPE) ફેંકે છે અને પ્રોગ્રામ બંધ થઈ જાય છે.

આ વેલિડેશન જરૂરી ઇનવેરિયન્ટ (invariant) ના માત્ર અડધા ભાગને જ આવરી લેતું હતું: તેણે ઋણ કિંમતોને રોકી હતી પરંતુ શૂન્યને અવગણ્યું હતું, જે પછીના અંકગણિત માટે એટલું જ અસુરક્ષિત છે.

ડેવલપર્સે શું કરવું જોઈએ

  • મોડેલ ફાઇલોને બાઈનરીની જેમ ગણો. મોડેલ લોડ કરવાથી રો (raw) બાઇટ્સ મેમરી સ્ટ્રક્ચર્સમાં પાર્સ થાય છે, જે એક એવું ક્લાસિક બોર્ડર છે જ્યાં અનચેક્ડ ડેટા પ્રોસેસને ક્રેશ કરી શકે છે અથવા તેનાથી પણ ખરાબ કરી શકે છે.
  • અધૂરી તપાસ ટાળો. એવી શરત જે જરૂરી ઇનવેરિયન્ટના માત્ર એક ભાગને જ આવરી લે છે તે સુરક્ષાનો ખોટો અહેસાસ આપે છે. અહીં, “non-negative” પૂરતું નહોતું; કોડને “positive” ની જરૂર હતી.
  • દરેક તપાસ પછી ધારણાઓ પર પ્રશ્ન કરો. જ્યારે બાઉન્ડ્સ ટેસ્ટ (bounds test) દેખાય, ત્યારે ખાતરી કરો કે પછીનો કોડ કોઈ વધુ કડક પ્રોપર્ટી પર આધારિત નથી.
  • ફઝિંગ ટૂલ્સનો ઉપયોગ કરો. લેખકે AddressSanitizer સાથે libFuzzer ચલાવીને આ બગ શોધી કાઢ્યો હતો, જે ઇનપુટ્સમાં ફેરફાર કરે છે અને શૂન્ય વડે ભાગાકાર જેવી ગેરકાયદેસર પ્રક્રિયાઓને ફ્લેગ કરે છે.

ફિક્સ (સુધારો) કેવી રીતે લાગુ કરવામાં આવ્યો

આ ફિક્સ એક ગાર્ડ (guard) ઉમેરે છે જે ડાયમેન્શન શૂન્ય હોય ત્યારે ઓવરફ્લો ગણતરીને સ્કીપ કરે છે. આ નાનકડી કન્ડિશનલ શરત કાયદેસરના શૂન્ય-કદના ટેન્સર્સ (zero-sized tensors) માટે સપોર્ટ જાળવી રાખે છે—જેનો ઉપયોગ કેટલાક મોડેલ વેરિઅન્ટ્સમાં વૈકલ્પિક ફીચર્સ માટે થાય છે—અને સાથે સાથે ક્રેશ થવાના માર્ગને પણ દૂર કરે છે.

મુખ્ય વાત: એક જ 65-બાઇટની ફાઇલ વ્યાપકપણે ઉપયોગમાં લેવાતા ઇન્ફરન્સ એન્જિનને બંધ કરી શકે છે; સંપૂર્ણ વેલિડેશન અને પદ્ધતિસરનું ફઝિંગ મોડેલ લોડર્સને સુરક્ષિત રાખે છે.

સ્ત્રોત: https://dev.to/harrisonsec/your-model-file-is-untrusted-input-1eap