آسیب‌پذیری Wildcard Injection در لینوکس: کالبدشکافی اجرای کد دلخواه (RCE) از طریق Bash Script

در بخش «بهشت هکرها»، به بررسی اشتباهات ظاهراً کوچکی می‌پردازیم که توسط مدیران سیستم یا توسعه‌دهندگان رخ می‌دهد، اما در معماری امنیت سایبری، به عنوان یک فاجعه و مسیر مستقیم برای نفوذ شناخته می‌شوند. یکی از جذاب‌ترین و در عین حال مخرب‌ترین این اشتباهات، آسیب‌پذیری تزریق وایلدکارد (Wildcard Injection) است.

در این مقاله، بررسی خواهیم کرد که چگونه استفاده از یک ویژگی ساده لینوکس (کاراکتر *) می‌تواند منجر به اجرای کد دلخواه (RCE) و ارتقاء سطح دسترسی (Privilege Escalation) توسط مهاجم شود.

درک معماری آسیب‌پذیری: Globbing در لینوکس

در پوسته‌های لینوکس (مانند Bash)، پیش از آنکه دستوری اجرا شود، فرآیندی به نام Pathname Expansion یا Globbing رخ می‌دهد. زمانی که شما از کاراکتر * استفاده می‌کنید، Bash ابتدا تمام فایل‌های موجود در دایرکتوری را می‌خواند و نام آن‌ها را جایگزین * کرده و سپس دستور اصلی را اجرا می‌کند.

آسیب‌پذیری دقیقاً در همین نقطه شکل می‌گیرد: چه اتفاقی می‌افتد اگر نام یک فایل، شبیه به یک آرگومان یا سوییچ سیستمی باشد؟ برنامه هدف، آن فایل را نه به عنوان “داده”، بلکه به عنوان “دستورالعمل” پردازش می‌کند.

سناریوی نفوذ: اشتباه مهلک در سیستم بکاپ‌گیری خودکار

فرض کنید یک مدیر سیستم، برای تهیه نسخه پشتیبان از دایرکتوری آپلود کاربران، یک Cron Job با دسترسی root ایجاد کرده است. اسکریپت بکاپ‌گیری حاوی دستور زیر است:

#!/bin/bash
cd /var/www/html/uploads
tar -czf /backup/uploads_backup.tar.gz *

در نگاه اول، این یک دستور استاندارد و کارآمد به نظر می‌رسد. اما از منظر یک نفوذگر (Pentester)، این دستور یک دروازه باز برای دسترسی Root است.

مکانیسم حمله (Exploitation)

ابزار tar دارای سوییچ‌های پیشرفته‌ای برای اجرای دستورات خارجی است. مهاجمی که توانایی آپلود فایل در پوشه /uploads را داشته باشد، نیازی به آپلود شل‌های پیچیده ندارد. او تنها با ایجاد فایل‌هایی با نام‌های خاص، مکانیزم Globbing را فریب می‌دهد.

مهاجم سه فایل زیر را در دایرکتوری آپلود ایجاد می‌کند:

  1.  یک اسکریپت مخرب ساده (مثلاً shell.sh) که حاوی دستور اتصال معکوس (Reverse Shell) یا افزودن کاربر به فایل sudoers است.
  2. فایلی با نام دقیق –checkpoint=1
  3. فایلی با نام دقیق –checkpoint-action=exec=sh shell.sh

فرآیند اکسپلویت:

زمانی که Cron job اجرا می‌شود، Bash کاراکتر * را بسط می‌دهد. دستور در حافظه سیستم به شکل زیر ترجمه و اجرا می‌شود:

tar -czf /backup/uploads_backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh

در این لحظه، ابزار tar دو فایل عجیب را به عنوان سوییچ‌های دستوری خود تفسیر می‌کند. با رسیدن به هر Checkpoint در فرآیند فشرده‌سازی، دستور sh shell.sh با سطح دسترسی اجراکننده tar (که در این سناریو root است) اجرا می‌شود!

راهکارهای مهندسی و امن‌سازی سیستم (Mitigation)

به عنوان یک مهندس سیستم، درک مشکل نیمی از راه است؛ نیمه مهم‌تر، پیاده‌سازی راهکارهای اصولی برای جلوگیری از وقوع مجدد آن است. برای ایمن‌سازی اسکریپت‌ها در برابر Wildcard Injection، رعایت موارد زیر الزامی است:

۱. استفاده از مسیرهای مطلق یا نسبی دقیق:

به جای استفاده از * به تنهایی، از /*. استفاده کنید. در این حالت، نام فایل‌ها با پیشوند مسیر (مانند ./–checkpoint=1) به برنامه ارسال می‌شوند و برنامه آن‌ها را صرفاً به عنوان مسیر فایل می‌شناسد، نه یک سوییچ.

tar -czf /backup/uploads_backup.tar.gz ./*

۲. استفاده از جداکننده آرگومان‌ها (The End-of-Options Marker):

در استاندارد POSIX، استفاده از (Double Dash) به برنامه‌های خط فرمان می‌فهماند که سوییچ‌های دستوری در اینجا به پایان رسیده‌اند و هرچه بعد از آن می‌آید، صرفاً نام فایل یا داده است.

tar -czf /backup/uploads_backup.tar.gz -- *

۳. اصل حداقل دسترسی (Principle of Least Privilege):

هرگز Cron Job هایی که با داده‌های تولید شده توسط کاربر (User-generated Data) سروکار دارند را با دسترسی root اجرا نکنید. ایجاد یک کاربر محدود (Dedicated User) برای فرآیند بکاپ‌گیری، سطح مقطع حمله (Attack Surface) را به شدت کاهش می‌دهد.

نتیجه‌گیری

امنیت در سیستم‌عامل لینوکس، تنها به نصب فایروال یا ابزارهای مانیتورینگ محدود نمی‌شود. درک عمیق از نحوه پردازش دستورات در Shell و توجه به جزئیات پیاده‌سازی، مرز بین یک سیستم امن و سیستمی آسیب‌پذیر را تعیین می‌کند.

دیدگاهتان را بنویسید