تزریق الگو در سمت سرور (SSTI) یک آسیبپذیری است که در آن ورودی کاربر به جای اینکه به صورت متن ساده رندر شود، توسط یک موتور الگو ارزیابی میشود و به مهاجم اجازه میدهد کد دلخواه خود را روی سرور اجرا کند.
نحوهی عملکرد تزریق قالب سمت سرور در پشت صحنه
تزریق قالب سمت سرور زمانی رخ میدهد که ورودی کاربر مستقیماً در یک موتور قالبسازی جاسازی شده و بدون پاکسازی یا جداسازی مناسب ارزیابی شود. این امر یک آسیبپذیری SSTI ایجاد میکند که به مهاجم اجازه میدهد تا بارهای داده SSTI دستکاریشده خاص (مثلاً {{7*7}} در Jinja2)، که موتور آن را ارزیابی میکند و همه چیز را از افشای دادهها گرفته تا اجرای کد دلخواه در زمینه سرور فعال میکند. از آنجا که موتورهای قالب مختلف، اشیاء و APIهای مختلفی را در معرض نمایش قرار میدهند، بارهای داده SSTI بر اساس پلتفرم متفاوت هستند اما خطر یکسانی دارند: آنها اجازه میدهند ورودیهای غیرقابل اعتماد از جریان رندر مورد انتظار فرار کرده و در زمان اجرای برنامه اجرا شوند، که اغلب در صورت عدم کنترل منجر به اجرای کامل کد از راه دور یا حرکت جانبی میشود.
مثال آسیبپذیر حداقلی در Jinja2
اگر کاربری ارسال کند ?name={{7*7}}، برنامه آن را ارزیابی کرده و برمیگرداند سلام 49این یک آسیبپذیری SSTI معمولی است.
مثال آسیبپذیر حداقلی در Twig
یک مهاجم میتواند بارهای داده SSTI مانند موارد زیر را تزریق کند: {{7*7}} برای اثبات اجرای کد. خطر: تزریق ساده میتواند به خواندن فایلها، اجرای دستورات سیستمعامل یا نفوذ عمیقتر به زیرساختها منجر شود.
اکسپلویتهای دنیای واقعی: بارهای داده SSTI که باعث اجرای کد از راه دور میشوند
زمانی که یک آسیبپذیری SSTI وجود داشته باشد، مهاجمان سعی میکنند از ریاضیات اثبات مفهوم به سمت اثبات کامل حرکت کنند. RCEموتورهای قالب مختلف، بارهای داده (payloads) را به طور متفاوتی مدیریت میکنند.
بارهای داده Jinja2
- {{7*7}} → اجرای محاسبات
- {{config.items()}} → لو رفتن پیکربندیهای سرور.
- {{ “”.__class__.__mro__[2].__subclasses__() }} → مسیر RCE
بارهای سرعتی
- #set($x=”7”)${x} → بایپس تزریق
- #set($a=$class.inspect(“java.lang.Runtime”)) → دسترسی مستقیم در زمان اجرا
بارهای Twig
- {{7*7}} → حساب
- {{app.request.server.all}} → متغیرهای محیطی
- {{_self.env.registerUndefinedFilterCallback(‘system’)}} → اجرای کد
این پیلودهای SSTI نشان میدهند که چگونه آسیبپذیری یکسان در موتورهای مختلف منجر به پیامدهای متفاوت میشود. سوءاستفاده از مسیرها، اما آنها همیشه خطرناک هستند.
جایی که تزریق قالب سمت سرور پنهان میشود CI/CDبرنامههای کاربردی مبتنی بر
تزریق قالب سمت سرور فقط یک ریسک برنامه وب نیست؛ بلکه در موارد زیر نیز ظاهر میشود: مدرن CI/CD pipelines بیش از حد. مکانهای مخفی معمول عبارتند از:
- نمودارهای هلم در Kubernetes، که در آن مقادیر قالب به صورت پویا رندر میشوند
- قالب های ایمیل که ورودیهای کنترلشده توسط کاربر را به هم پیوند میدهند
- Dashboards جایی که رشتههای پرسوجو یا دادههای پیکربندی به قالبها تزریق میشوند
- اسکریپتهای DevOps که با استفاده از موتورهای قالببندی، HTML/Markdown تولید میکنند.
مثال:
Ifپیام.ارزشها از ورودی غیرقابل اعتماد میآید، و باعث تزریق قالب سمت سرور در استقرار شما میشود. pipeline خود.
جلوگیری از SSTI با الگوهای الگوی ایمنتر و تحلیل استاتیک
کاهش آسیبپذیریهای SSTI نیازمند الگوهای کدنویسی بهتر و تشخیص زودهنگام است.
الگوهای امن
- ❌ استفاده نکنید رشته_قالب_رندر یا معادل آن
- ✅ استفاده از فایلهای الگوی از پیش تعریفشده و ارسال متغیرهای ایمنسازیشده
- ✅ موتورهای قالب سندباکس در صورت موجود بودن
- ✅ اعتبارسنجی و حذف ورودی کاربر قبل از رندر کردن
چک لیست کوچک برای توسعهدهندگان
- هرگز ورودی خام کاربر را مستقیماً رندر نکنید
- در صورت پشتیبانی، از قالبهای سندباکس استفاده کنید
- پاکسازی و اعتبارسنجی تمام متغیرهای قالب
- از ارزیابهای قالب سفارشی اجتناب کنید
- کد اسکن برای رشته_قالب_رندر یا الگوهای الحاق رشته
تجزیه و تحلیل استاتیک و لینترها میتوانند ساختارهای پرخطر را قبل از رسیدن به مرحله تولید، علامتگذاری کنند.
جاسازی بررسیهای SSTI در DevSecOps Pipelines
تشخیص زودهنگام تزریق قالب سمت سرور، ارزانتر و ایمنتر از رفع آن در مراحل بعدی است. تیمهای DevSecOps باید بررسیهایی را در ... تعبیه کنند. pipelines:
- Commit hooks: رد کردن commitبا عملکردهای خطرناک (رشته_قالب_رندر)
- آنالایزرهای استاتیکاسکن برای ریسک تزریق قالب سمت سرور در کد قالببندی
- اعتبارسنجی وابستگی: موتورهای قالب قدیمی با آسیبپذیریهای شناختهشده SSTI را علامتگذاری کنید
- Pipeline دروازهادغام بلوکها تا زمان تأیید بررسیهای SSTI
با قرار دادن تشخیص بار SSTI به عنوان بخشی از CI/CD، شما از ارسال کد قابل سوءاستفاده برای همیشه جلوگیری میکنید.
نگذارید تزریق قالب سمت سرور به پشته شما نفوذ کند
یک تزریق قالب سمت سرور میتواند از ترفندهای ریاضی ({{7*7}}) تا اجرای کامل کد از راه دور. آسیبپذیریهای SSTI نه تنها در برنامههای وب، بلکه در ... نیز ظاهر میشوند. CI/CD pipelineها، نمودارهای Helm و قالبهای ایمیل.
کلاهبرداریهای کلیدی
- هرگز ورودی خام کاربر را در قالبها رندر نکنید
- اعتبارسنجی و پاکسازی تمام متغیرهای پویا
- موتورهای مختلف (Jinja2، Velocity، Twig) ظرفیت حمل SSTI متفاوتی دارند، اما همه آنها قابل مسلح شدن هستند.
- از تحلیل استاتیک و دروازههای مقاوم در برابر خرابی استفاده کنید pipelines
- قالبهای موجود در مجموعه خود را مرتباً بررسی کنید
شیگنی کدبیس شما را برای یافتن نقصهای تزریق و سایر الگوهای کدنویسی ناامن به محض ظاهر شدن، اسکن میکند و ساختارهای پرخطر مانند رندر قالبهای غیرایمن را قبل از رسیدن به مرحله تولید، با کمترین نرخ مثبت کاذب در معیار OWASP، شناسایی میکند. Xygeni CI/CD و IaC security اسکن همان پوشش را به موارد زیر گسترش میدهد pipeline پیکربندیها، نمودارهای Helm و اسکریپتهای ساخت، پیکربندیهای نادرست و دستورات مخرب را قبل از انتشار علامتگذاری میکنند. هنگامی که Xygeni یک آسیبپذیری پیدا میکند، AI AutoFix یک اصلاحیه آگاه از متن و آماده برای توسعهدهنده را مستقیماً در pull requestبنابراین، اصلاح و بهبود منتظر اسپرینت بعدی نمیماند.
در DevSecOps، تشخیص تزریق الگو در pipeline مرحله، نه پس از استقرار، چیزی است که مانع از تبدیل شدن یک پیلود واحد به یک تهدید کامل میشود.
رایگان شروع کنید. بدون نیاز به کارت اعتباری، اولین مخزن خود را در عرض چند دقیقه اسکن کنید.
سوالات متداول
تزریق قالب سمت سرور چیست؟
SSTI زمانی اتفاق میافتد که ورودی کاربر به یک موتور قالب منتقل شده و به جای نمایش به صورت متن، به صورت کد ارزیابی میشود و به مهاجم اجازه میدهد دستورات را در متن سرور اجرا کند.
آیا SSTI همان XSS است؟
خیر. XSS اسکریپتی را تزریق میکند که در مرورگر قربانی اجرا میشود؛ SSTI کدی را تزریق میکند که موتور قالب آن را روی خود سرور ارزیابی میکند، به همین دلیل است که SSTI میتواند مستقیماً منجر به اجرای کد از راه دور شود.
کدام موتورهای قالب در برابر SSTI آسیبپذیر هستند؟
هر موتوری که عبارات را ارزیابی میکند، در صورت دریافت ورودیهای کاربر به صورت غیر ایمن، میتواند آسیبپذیر باشد، از جمله Jinja2، Twig و Velocity، هرچند هر کدام اشیاء مختلفی را در معرض نمایش قرار میدهند و بنابراین مسیرهای بهرهبرداری متفاوتی دارند.
چگونه از عفونتهای آمیزشی (SSTI) در ... جلوگیری میکنید؟ CI/CD pipelines?
الگوهای خطرناکی مانند موارد زیر را اسکن کنید render_template_string at commit زمان، موتورهای قالب سندباکس که پشتیبانی میشوند، و گیت قبل از رسیدن کد به مرحله تولید، نتایج تحلیل استاتیک را ادغام میکند.





