XPath Injection: آشنایی با آسیب‌پذیری داکیومنت‌های XML

XPath Injection: آشنایی با آسیب‌پذیری داکیومنت‌های XML

زبان XML Path یا به‌ اختصار XPath یک زبان مفسری است که برای سرچ در داکیومنت‌های XML و بازیابی داده‌ها از میان آن‌ها مورد استفاده قرار می‌گیرد و XPath Injection هم روشی برای هک کردن مستندات تحت‌ وب با استفاده از زبان XPath است.

اولین کسی باشید که به این سؤال پاسخ می‌دهید

در اپلیکیشن‌های تحت‌ وب که داده‌ها داخل داکیومنت‌های XML ذخیره می‌شوند، این امکان وجود دارد که بر اساس ورودی کاربران، داده‌ٔ خاصی با استفاده از زبان XML Path از داخل مستندات مربوطه یافت شود. حال اگر این ورودی‌ها بدون فیلتر کردن و پاکسازی یا به اصطلاح Sanitization داخل کوئری XPath قرار گیرند، یک هکر ممکن است قادر به دستکاری کوئری‌ها برای دخالت در منطق اپلیکیشن یا بازیابی داده‌هایی که مجاز به دسترسی آن‌ها نیست گردد (در کل، نیاز به توضیح نیست که اسناد XML تحت هیچ عنوان برای ذخیره‌سازی داده‌های حساس مناسب نیستند.)

با این حال، داکیومنت‌های اکس‌ام‌ال اغلب برای ذخیرهٔ داده‌های پیکربندی (کانفیگ) اپلیکیشن‌ها که ممکن است بر اساس ورودی کاربر بازیابی شوند، مورد استفاده قرار می‌گیرند؛ آن‌ها همچنین می‌توانند توسط اپلیکیشن‌های کوچک‌تر مورد استفاده قرار بگیرند تا اطلاعات ساده‌ای مانند پرمیشن‌ها و دیگر اطلاعاتی از این دست را ذخیره کنند. برای روشن‌تر شدن این مسئله، کد XML زیر که برای ذخیرهٔ داده‌های یک کاربر استفاده می‌شود را در نظر بگیرید:

<addressBook>
<address>
<firstName>William</firstName>
<surname>Gates</surname>
<password>MSRocks!</password>
<email>billyg@microsoft.com</email>
<ccard>5130 8190 3282 3515</ccard>
</address>
<address>
<firstName>Chris</firstName>
<surname>Dawes</surname>
<password>secret</password>
<email>cdawes@craftnet.de</email>
<ccard>3981 2491 3242 3121</ccard>
</address>
<address>
<firstName>James</firstName>
<surname>Hunter</surname>
<password>letmein</password>
<email>james.hunter@pookmail.com</email>
<ccard>8113 5320 8014 3313</ccard>
</address>
</addressBook>

کوئری XPath مورد نیاز برای بازیابی همهٔ آدرس‌های ایمیل از سند فوق به‌ صورت زیر است:

//address/email/text()

همچنین کوئری مورد نیاز برای دستیابی به اطلاعات کاربری به‌ نام Dawes هم به‌ صورت زیر است:

//address[surname/text()=’Dawes’]

در بعضی از اپلیکیشن‌ها، اطلاعات ارائه شده توسط کاربر ممکن است مستقیماً درون کوئری‌های XPath قرار بگیرند و نتایج آن کوئری هم ممکن است برخی از جنبه‌های رفتاری اپلیکیشن مورد نظر را که دولوپر اصلاً دوست ندارد کسی آن‌ها را متوجه شود، برملا سازد! در حقیقت، XPath Injection یک نوع اَتک است که برای سوء‌استفاده از اپلیکیشن‌هایی که کوئری‌های XPath را ایجاد می‌کنند، از ورودی‌ ارائه شده توسط کاربر گرفته تا کوئری اسناد اکس‌ام‌ال، مورد استفاده قرار می‌گیرند.

منبع