GET કલેક્શન એન્ડપોઈન્ટ પર ખૂટતી સિક્યુરિટી ચેકને કારણે, CoopCycle ના કોઈપણ સામાન્ય એકાઉન્ટ ધરાવનાર વ્યક્તિ શેર કરેલ ઇન્સ્ટન્સના દરેક સ્ટોરની સંપૂર્ણ એડ્રેસ બુક મેળવી શકતી હતી, જેનાથી અસંખ્ય ગ્રાહકોના નામો, શેરીના સરનામા અને પોસ્ટકોડ ખુલ્લા પડી ગયા હતા. આ ખામીને બે દિવસમાં પેચ કરવામાં આવી હતી, અને વપરાશકર્તાઓને લેટેસ્ટ રિલીઝ કરેલ વર્ઝન પર અપગ્રેડ કરવા માટે વિનંતી કરવામાં આવી છે.

લીક કેવી રીતે થયું

CoopCycle – જે ફૂડ-ડિલિવરી સહકારી મંડળીઓ દ્વારા ઉપયોગમાં લેવાતું એક ઓપન-સોર્સ લોજિસ્ટિક્સ પ્લેટફોર્મ છે – તેના API ને PHP ફ્રેમવર્ક API Platform સાથે વ્યાખ્યાયિત કરે છે. તે ફ્રેમવર્કમાં દરેક ઓપરેશન (POST, GET, વગેરે) સાથે સિક્યુરિટી એક્સપ્રેશન જોડવું આવશ્યક છે; જો એક્સપ્રેશન રહી જાય, તો ફ્રેમવર્ક કોઈપણ ઓથોરાઈઝેશન ચેક વગર કોડ ચલાવે છે.

ડેવલપર્સે સ્ટોરની એડ્રેસ લિસ્ટ બનાવે છે અથવા અપડેટ કરે છે તેવી POST રિક્વેસ્ટને સ્ટાન્ડર્ડ એક્સપ્રેશન is_granted('edit', object) સાથે સુરક્ષિત કરી હતી. તે કામ કરે છે કારણ કે રિક્વેસ્ટ એક સિંગલ સ્ટોર એન્ટિટીને લક્ષ્ય બનાવે છે, જે ફ્રેમવર્કને મૂલ્યાંકન કરવા માટે એક ચોક્કસ "object" આપે છે.

તે જ રિસોર્સને વાંચતી GET રિક્વેસ્ટ એક કલેક્શનને લક્ષ્ય બનાવે છે: /api/stores/{id}/addresses. કલેક્શનમાં કોઈ સિંગલ ઓબ્જેક્ટ હોતો નથી, તેથી તે જ is_granted('edit', object) એક્સપ્રેશન લાગુ કરી શકાતું નથી. ડેવલપર્સે સિક્યુરિટી લાઇન છોડી દીધી હોવાથી, ફ્રેમવર્ક ટેનન્સીને ધ્યાનમાં લીધા વિના કોઈપણ પ્રમાણિત (authenticated) વપરાશકર્તાને એડ્રેસ ડેટા પૂરો પાડતું હતું.

શેર કરેલ CoopCycle ઇન્સ્ટન્સ પર, એક દુષ્ટ વપરાશકર્તા સરળતાથી સ્ટોર ID દ્વારા ઇટરેટ કરી શકે છે, એન્ડપોઈન્ટ પર GET રિક્વેસ્ટ કરી શકે છે, અને સિસ્ટમમાં સંગ્રહિત દરેક ગ્રાહકના હોમ એડ્રેસ સ્ક્રેપ કરી શકે છે. સામાન્ય એકાઉન્ટ સિવાય અન્ય કોઈ વધારાના વિશેષાધિકારોની જરૂર નહોતી.

બગ કેમ ટકી રહ્યો?

આ સમસ્યા માત્ર એક સામાન્ય ભૂલ નહોતી. API Platform ના ડિક્લેરેટિવ સિક્યુરિટી મોડલમાં "વપરાશકર્તા કલેક્શનમાં રહેલા દરેક ઓબ્જેક્ટની જેમ જ સમાન ટેનન્ટનો હોવો જોઈએ" તે વ્યક્ત કરવાનો કોઈ સીધો રસ્તો નથી. જે કોડની લાઇન ખૂટતી હતી તે બરાબર ત્યાં જ હતી જ્યાં ફ્રેમવર્ક ઓથોરાઈઝેશનને જટિલ બનાવે છે.

સમસ્યાને વધુ ગંભીર બનાવતા, પ્રોજેક્ટના ટેસ્ટ સૂટમાં ખરેખર એવું દર્શાવવામાં આવ્યું હતું કે તમામ એડ્રેસ ધરાવતો GET રિસ્પોન્સ એ અપેક્ષિત વર્તણૂક હતી. બીજા શબ્દોમાં કહીએ તો, ઓટોમેટેડ ટેસ્ટ પાસ થયા કારણ કે ટેસ્ટિંગમાં વપરાયેલા ફિક્સ્ચર્સ (fixtures) ક્રોસ-ટેનન્ટ એક્સેસની મંજૂરી આપતા હતા, જે અસરકારક રીતે આ નબળાઈને છુપાવી દેતા હતા. આ કિસ્સામાં, એક ગ્રીન ટેસ્ટ સૂટે સુરક્ષાનો ખોટો અહેસાસ કરાવ્યો.

કોને ફાયદો અને કોને નુકસાન?

  • ગ્રાહકો: તેમની વ્યક્તિગત ઓળખ કરી શકાય તેવી માહિતી (PII) – પૂર્ણ નામ અને ઘરના સરનામા – પ્લેટફોર્મ પરના કોઈપણ વ્યક્તિ સામે ખુલ્લા પડી ગયા હતા. ભલે ડેટા જાહેરમાં પોસ્ટ કરવામાં આવ્યો ન હતો, પરંતુ આ ઉલ્લંઘનને કારણે અનેક સહકારી મંડળીઓની ગોપનીયતા જોખમમાં આવી હતી.
  • CoopCycle નો ઉપયોગ કરતી સહકારી મંડળીઓ: ટેનન્ટ ડેટાને સુરક્ષિત રાખવાની પ્લેટફોર્મની ક્ષમતા પર વિશ્વાસ ડગમગી ગયો છે. જે સહકારી મંડળીઓએ હજુ સુધી અપગ્રેડ કર્યું નથી, તેઓ સતત જોખમનો સામનો કરી શકે છે.
  • CoopCycle મેન્ટેનર્સ: તેમની ઝડપી પ્રતિક્રિયા – બે દિવસમાં પેચ અને ઉમેરાયેલા રિગ્રેશન ટેસ્ટ – એ શોષણના સમયગાળાને મર્યાદિત કરી અને જવાબદાર ઓપન-સોર્સ સ્ટીવર્ડશિપનું પ્રદર્શન કર્યું. જોકે, આ ઘટના ફ્રેમવર્ક-ડ્રિવન ડિફોલ્ટ્સની આસપાસ વધુ કડક સિક્યુરિટી રિવ્યુ પ્રક્રિયાઓની જરૂરિયાત પર ભાર મૂકે છે.

ડેવલપર્સ અને ઓડિટર્સએ શું જોવું જોઈએ

  • ઓપરેશન અસમપ્રમાણતા (Operation asymmetry): જો કોઈ પાથ પર POST (અથવા કોઈપણ મ્યુટેટિંગ ઓપરેશન) સુરક્ષિત હોય પરંતુ તેની સામેની GET રિક્વેસ્ટ ખુલ્લી હોય, તો આ વિસંગતતા એક ચેતવણીનો સંકેત છે. POST એ રિસોર્સને સુરક્ષિત કરવાનો ડેવલપર્સનો ઈરાદો દર્શાવે છે.
  • કલેક્શન એન્ડપોઈન્ટ્સ: જે કંઈપણ સિંગલ આઈટમને બદલે લિસ્ટ રિટર્ન કરે છે તે ઘણીવાર સામાન્ય સિક્યુરિટી પેટર્નની બહાર હોય છે. ખાતરી કરો કે બલ્ક રીડ્સ માટે ઓથોરાઈઝેશન ચેક સ્પષ્ટપણે ઉમેરવામાં આવ્યા છે.
  • ટેસ્ટ સૂટ રિયાલિઝમ: ખાતરી કરો કે ફિક્સ્ચર્સ વાસ્તવિક ટેનન્સી સીમાઓને પ્રતિબિંબિત કરે છે. ક્રોસ-ટેનન્ટ ડેટા લીકેજને માન્યતા આપતો પાસ થયેલ ટેસ્ટ એ ચેતવણીનો સંકેત છે, ગ્રીન લાઈટ નથી.

સુધારો અને આગામી પગલાં

નબળાઈની જાણ થયા પછી, CoopCycle કોર ટીમે GET કલેક્શન ઓપરેશનમાં ખૂટતું સિક્યુરિટી એક્સપ્રેશન ઉમેર્યું અને રિગ્રેશન ટેસ્ટ રજૂ કર્યા જે સિંગલ-આઈટમ અને કલેક્શન એન્ડપોઈન્ટ્સ બંને માટે ટેનન્ટ આઇસોલેશનને લાગુ કરે છે. આ પેચ સોફ્ટવેરના પછીના વર્ઝનમાં મોકલવામાં આવ્યો હતો.

CoopCycle ના વપરાશકર્તાઓએ:

  1. ખાતરી કરવી જોઈએ કે તેઓ સોફ્ટવેરનું તાજેતરનું વર્ઝન વાપરી રહ્યા છે.
  2. કોઈપણ કસ્ટમ એક્સટેન્શન અથવા પ્લગઇન્સની સમીક્ષા કરવી જોઈએ જે સમાન કલેક્શન-લેવલ

જે ફ્રેમવર્ક સુરક્ષાને ડિક્લેરેટિવ બનાવે છે, તે ત્યારે જોખમી ખામીઓ છુપાવી શકે છે જ્યારે ડેવલપર્સ એવા પેટર્ન પર આધાર રાખે છે જે માત્ર સિંગલ ઓબ્જેક્ટ્સ માટે જ કામ કરે છે. એક સરળ તપાસ—શું એન્ડપોઈન્ટનું રીડ સાઈડ એ જ ગાર્ડ ધરાવે છે જેનું રાઈટ સાઈડ ધરાવે છે?—ક્રોસ-ટેનન્ટ લીક્સના પ્રકારને ખુલ્લો પાડી શકે છે, જે અન્યથા ગ્રીન ટેસ્ટ સુટ્સ પાછળ છુપાયેલા રહેત.