ఒక GET collection endpoint లో మిస్ అయిన సెక్యూరిటీ చెక్ వల్ల, ప్రాథమిక CoopCycle ఖాతా ఉన్న ఎవరైనా షేర్డ్ ఇన్‌స్టాన్స్‌లోని ప్రతి స్టోర్ యొక్క పూర్తి అడ్రస్ బుక్‌ను పొందగలిగారు. దీనివల్ల లెక్కలేనన్ని కస్టమర్ల పేర్లు, వీధి చిరునామాలు మరియు పోస్ట్‌కోడ్‌లు బహిర్గతమయ్యాయి. ఈ లోపాన్ని రెండు రోజుల్లోనే సరిదిద్దారు (patched), మరియు వినియోగదారులు తాజా వెర్షన్‌కు అప్‌గ్రేడ్ చేయాలని కోరడమైనది.

లీక్ ఎలా జరిగింది

CoopCycle – ఫుడ్-డెలివరీ సహకార సంస్థలు (cooperatives) ఉపయోగించే ఒక ఓపెన్-సోర్స్ లాజిస్టిక్స్ ప్లాట్‌ఫారమ్ – తన APIని PHP ఫ్రేమ్‌వర్క్ API Platformతో నిర్వచిస్తుంది. ఆ ఫ్రేమ్‌వర్క్‌లో ప్రతి ఆపరేషన్ (POST, GET, మొదలైనవి) ఒక సెక్యూరిటీ ఎక్స్‌ప్రెషన్‌తో జత చేయబడాలి; ఒకవేళ ఆ ఎక్స్‌ప్రెషన్ లేకపోతే, ఫ్రేమ్‌వర్క్ ఎటువంటి అథరైజేషన్ చెక్ లేకుండా కోడ్‌ను రన్ చేస్తుంది.

డెవలపర్లు స్టోర్ యొక్క అడ్రస్ లిస్ట్‌ను క్రియేట్ చేసే లేదా అప్‌డేట్ చేసే POST రిక్వెస్ట్‌ను ప్రామాణిక ఎక్స్‌ప్రెషన్ is_granted('edit', object)తో రక్షించారు. ఇది పనిచేస్తుంది ఎందుకంటే ఆ రిక్వెస్ట్ ఒక సింగిల్ స్టోర్ ఎంటిటీని లక్ష్యంగా చేసుకుంటుంది, తద్వారా ఫ్రేమ్‌వర్క్‌కు ఎవాల్యుయేట్ చేయడానికి ఒక నిర్దిష్టమైన "object" అందుబాటులో ఉంటుంది.

అదే రిసోర్స్‌ను చదివే GET రిక్వెస్ట్ ఒక కలెక్షన్‌ను లక్ష్యంగా చేసుకుంటుంది: /api/stores/{id}/addresses. కలెక్షన్‌కు ఒకే ఒక ఆబ్జెక్ట్ ఉండదు, కాబట్టి అదే is_granted('edit', object) ఎక్స్‌ప్రెషన్‌ను ఇక్కడ వర్తింపజేయలేము. డెవలపర్లు సెక్యూరిటీ లైన్‌ను వదిలేయడం వల్ల, టెనెన్సీ (tenancy)తో సంబంధం లేకుండా, ఏ అథెంటికేటెడ్ యూజర్‌కైనా ఫ్రేమ్‌వర్క్ అడ్రస్ డేటాను అందించింది.

ఒక షేర్డ్ CoopCycle ఇన్‌స్టాన్స్‌లో, ఒక దురుద్దేశపూరిత వినియోగదారుడు (malicious user) కేవలం స్టోర్ ఐడిల ద్వారా ఇటరేట్ చేస్తూ, ఆ ఎండ్‌పాయింట్‌కు GET రిక్వెస్ట్‌లను పంపి, సిస్టమ్‌లో నిక్షిప్తమై ఉన్న ప్రతి కస్టమర్ యొక్క ఇంటి చిరునామాలను స్క్రాప్ (scrape) చేయగలిగారు. దీని కోసం సాధారణ ఖాతా కంటే ఎక్కువ అధికారాలు అవసరం లేదు.

ఈ బగ్ ఎందుకు మిగిలిపోయింది

ఈ సమస్య కేవలం ఒక చిన్న పొరపాటు మాత్రమే కాదు. API Platform యొక్క డిక్లరేటివ్ సెక్యూరిటీ మోడల్‌లో "వినియోగదారుడు కలెక్షన్‌లోని ప్రతి ఆబ్జెక్ట్‌కు చెందిన టెనెెంట్‌కు చెందిన వ్యక్తి అయి ఉండాలి" అని చెప్పడానికి సరళమైన మార్గం లేదు. ఫ్రేమ్‌వర్క్ అథరైజేషన్‌ను క్లిష్టతరం చేసిన చోటే ఈ కోడ్ లైన్ మిస్ అయింది.

సమస్యను మరింత పెంచింది ఏమిటంటే, ప్రాజెక్ట్ యొక్క టెస్ట్ సూట్ (test suite), అన్ని అడ్రస్‌లను కలిగి ఉన్న GET రెస్పాన్స్ అనేది ఆశించిన ప్రవర్తన అని పేర్కొంది. మరో మాటలో చెప్పాలంటే, టెస్టింగ్‌లో ఉపయోగించిన ఫిక్చర్స్ (fixtures) క్రాస్-టెనెన్ట్ యాక్సెస్‌ను అనుమతించడం వల్ల ఆటోమేటెడ్ టెస్ట్‌లు పాస్ అయ్యాయి, ఇది ఆ లోపాన్ని కప్పివేసింది. ఈ సందర్భంలో, గ్రీన్ టెస్ట్ సూట్ తప్పుడు భద్రతా భావాన్ని కలిగించింది.

ఎవరు లాభపడ్డారు మరియు ఎవరు నష్టపోయారు

  • వినియోగదారులు (Customers): వారి వ్యక్తిగత గుర్తింపు సమాచారం (PII) – పూర్తి పేర్లు మరియు ఇంటి చిరునామాలు – ప్లాట్‌ఫారమ్‌లోని ఎవరికైనా బహిర్గతమయ్యాయి. డేటా బహిరంగంగా పోస్ట్ చేయబడకపోయినప్పటికీ, ఈ బ్రీచ్ వల్ల బహుళ సహకార సంస్థల గోప్యత దెబ్బతిన్నది.
  • CoopCycleని ఉపయోగించే సహకార సంస్థలు: టెనెన్ట్ డేటాను రక్షించడంలో ప్లాట్‌ఫారమ్ సామర్థ్యంపై నమ్మకం సడలింది. ఇంకా అప్‌గ్రేడ్ చేయని ఏ సహకార సంస్థకైనా డేటా బహిర్గతమయ్యే ప్రమాదం ఉంది.
  • CoopCycle మెయింటైనర్లు: వారి వేగవంతమైన స్పందన – రెండు రోజుల్లోనే ప్యాచ్ మరియు రిగ్రెషన్ టెస్ట్‌లను జోడించడం – దుర్వినియోగం అయ్యే అవకాశాన్ని తగ్గించింది మరియు బాధ్యతాయుతమైన ఓపెన్-సోర్స్ స్టీవార్డ్‌షిప్‌ను ప్రదర్శించింది. అయితే, ఈ సంఘటన ముఖ్యంగా ఫ్రేమ్‌వర్క్ ఆధారిత డిఫాల్ట్‌ల చుట్టూ మరింత కఠినమైన సెక్యూరిటీ రివ్యూ ప్రక్రియల అవసరాన్ని నొక్కిచెప్పింది.

డెవలపర్లు మరియు ఆడిటర్లు దేనిని గమనించాలి

  • ఆపరేషన్ అసమానత (Operation asymmetry): ఒక పాత్‌పై POST (లేదా ఏదైనా మ్యుటేటింగ్ ఆపరేషన్) రక్షించబడి ఉండి, దానికి సంబంధించిన GET ఓపెన్‌గా ఉంటే, ఆ వ్యత్యాసం ఒక రెడ్ ఫ్లాగ్ (red flag). POST రిక్వెస్ట్ రిసోర్స్‌ను రక్షించాలనే డెవలపర్ల ఉద్దేశాన్ని తెలియజేస్తుంది.
  • కలెక్షన్ ఎండ్‌పాయింట్లు (Collection endpoints): సింగిల్ ఐటెమ్ కంటే జాబితాను (list) తిరిగి ఇచ్చే ఏవైనా అంశాలు తరచుగా సాధారణ సెక్యూరిటీ ప్యాటర్న్‌ల వెలుపల ఉంటాయి. బల్క్ రీడ్స్ (bulk reads) కోసం అథరైజేషన్ చెక్‌లను స్పష్టంగా జోడించారో లేదో ధృవీకరించండి.
  • టెస్ట్ సూట్ యొక్క వాస్తవికత: ఫిక్చర్స్ వాస్తవ టెనెన్సీ సరిహద్దులను ప్రతిబింబించేలా చూసుకోండి. క్రాస్-టెనెన్ట్ డేటా లీకేజీని ధృవీకరించే పాస్ అయిన టెస్ట్ అనేది హెచ్చరిక మాత్రమే, గ్రీన్ లైట్ కాదు.

పరిష్కారం మరియు తదుపరి దశలు

లోపం నివేదించబడిన తర్వాత, CoopCycle కోర్ టీమ్ GET కలెక్షన్ ఆపరేషన్‌కు మిస్ అయిన సెక్యూరిటీ ఎక్స్‌ప్రెషన్‌ను జోడించింది మరియు సింగిల్-ఐటెమ్ మరియు కలెక్షన్ ఎండ్‌పాయింట్ల రెండింటికీ టెనెన్ట్ ఐసోలేషన్‌ను అమలు చేసే రిగ్రెషన్ టెస్ట్‌లను ప్రవేశపెట్టింది. ఈ ప్యాచ్ సాఫ్ట్‌వేర్ యొక్క తదుపరి వెర్షన్‌లో విడుదల చేయబడింది.

CoopCycle వినియోగదారులు చేయవలసినవి:

  1. తాము సాఫ్ట్‌వేర్ యొక్క ఇటీవలి వెర్షన్‌ను ఉపయోగిస్తున్నారని నిర్ధారించుకోండి.
  2. ఇటువంటి కలెక్షన్-లెవల్ లోపాలను కలిగించే ఏవైనా కస్టమ్ ఎక్స్‌టెన్షన్లు లేదా ప్లగిన్‌లను సమీక్షించండి.
  3. అన్ని API రూట్‌లలో రీడ్/రైట్ అసమానతల (asymmetries) పై దృష్టి పెడుతూ సెక్యూరిటీ స్కాన్‌లను మళ్లీ రన్ చేయండి.

ముగింపు (Takeaway)

సెక్యూరిటీని డిక్లరేటివ్‌గా చేసే ఫ్రేమ్‌వర్క్‌లు, డెవలపర్లు కేవలం సింగిల్ ఆబ్జెక్ట్‌లకు మాత్రమే పనిచేసే ప్యాటర్న్‌లపై ఆధారపడినప్పుడు ప్రమాదకరమైన లోపాలను దాచిపెట్టవచ్చు. ఒక చిన్న తనిఖీ—ఒక ఎండ్‌పాయింట్ యొక్క రీడ్ సైడ్, రైట్ సైడ్ లాగే అదే గార్డ్‌ను కలిగి ఉందా?—క్రాస్-టెనెంట్ లీక్‌ల రకాన్ని వెల్లడించగలదు, లేకపోతే ఇవి గ్రీన్ టెస్ట్ సూట్‌ల వెనుక దాగి ఉండేవి.