Server-Side Template Injection තිරය පිටුපස ක්රියා කරන ආකාරය
පරිශීලක ආදානය සැකිලි එන්ජිමකට සෘජුවම ඇතුළත් කර නිසි සනීපාරක්ෂාවකින් හෝ හුදකලාවකින් තොරව ඇගයීමට ලක් කළ විට සේවාදායක පාර්ශ්ව සැකිලි එන්නත් කිරීමක් සිදු වේ. මෙය ප්රහාරකයෙකුට විශේෂයෙන් නිර්මාණය කරන ලද SSTI ගෙවීම් එන්නත් කිරීමට ඉඩ සලසන SSTI අවදානමක් නිර්මාණය කරයි (උදාහරණයක් ලෙස, {{7*7}} Jinja2 හි), එන්ජිම විසින් ඇගයීමට ලක් කරනු ලබන අතර, සේවාදායක සන්දර්භය තුළ දත්ත හෙළිදරව් කිරීමේ සිට අත්තනෝමතික කේත ක්රියාත්මක කිරීම දක්වා සියල්ල සක්රීය කරයි. විවිධ සැකිලි එන්ජින් විවිධ වස්තූන් සහ API නිරාවරණය කරන බැවින්, SSTI ගෙවීම් වේදිකාව අනුව වෙනස් වේ නමුත් එකම අනතුර බෙදා ගනී: ඒවා විශ්වාස නොකළ ආදානය අපේක්ෂිත විදැහුම්කරණ ප්රවාහයෙන් ගැලවී යෙදුමේ ධාවන කාලය තුළ ක්රියාත්මක කිරීමට ඉඩ සලසයි, බොහෝ විට සම්පූර්ණ දුරස්ථ කේත ක්රියාත්මක කිරීමට හෝ පරීක්ෂා නොකළහොත් පාර්ශ්වීය චලනයකට මග පාදයි.
ජින්ජා2 හි අවම අවදානමට ලක්විය හැකි උදාහරණය
from flask import request, render_template_string @app.route("/hello") def hello(): name = request.args.get("name", "world") # ❌ Vulnerable: directly rendering user input return render_template_string("Hello " + name) පරිශීලකයෙකු යවන්නේ නම් ?නම={{7*7}}, යෙදුම එය ඇගයීමට ලක් කරයි, ආපසු එයි ආයුබෝවන් 49. ඒක පෙළපොත් SSTI අවදානමක්.
Twig හි අවම අවදානමට ලක්විය හැකි උදාහරණය
// ❌ Vulnerable Twig usage $template = $twig->createTemplate("Welcome " . $_GET['user']); echo $template->render([]); ප්රහාරකයෙකුට SSTI ගෙවීම් එන්නත් කළ හැක, මෙවැනි {{7*7}} කේත ක්රියාත්මක කිරීම ඔප්පු කිරීමට. අන්තරාය: සරල එන්නත් කිරීම ගොනු කියවීම, OS විධාන ක්රියාත්මක කිරීම හෝ යටිතල පහසුකම් තුළට ගැඹුරට හැරවීම දක්වා වර්ධනය විය හැකිය.
සැබෑ ලෝක සූරාකෑම්: දුරස්ථ කේත ක්රියාත්මක කිරීම අවුලුවන SSTI ගෙවීම්
SSTI අවදානමක් පවතින විට, ප්රහාරකයින් සංකල්ප-සාධන ගණිතයේ සිට සම්පූර්ණ ගණිතයට මාරු වීමට උත්සාහ කරයි. RCEවිවිධ සැකිලි එන්ජින් ගෙවීම් වෙනස් ලෙස හසුරුවයි.
ජින්ජා2 බර පැටවුම්
- {{7*7}} → අංක ගණිත ක්රියාත්මක කිරීම
- {{config.items()}} → සේවාදායක වින්යාස කාන්දු වේ.
- {{ ”.__class__.__mro__[2].__subclasses__() }} → RCE වෙත මාර්ගය
ප්රවේග බර පැටවීම්
- #සකසන්න($x=”7″)${x} → එන්නත් මඟ හැරීම
- #set($a=$class.inspect(“java.lang.runtime”)) → සෘජු ධාවන කාල ප්රවේශය
අතු බර පැටවුම්
- {{7*7}} → අංක ගණිතය
- {{app.request.server.all}} → පරිසර විචල්යයන්
- {{_self.env.registerUndefinedFilterCallback(‘system’)}} → කේත ක්රියාත්මක කිරීම
මෙම SSTI ගෙවීම් මඟින් විවිධ එන්ජින්වල එකම අවදානම විවිධ ගැටළු වලට තුඩු දෙන ආකාරය පෙන්නුම් කරයි. මාර්ග සූරාකෑම, නමුත් ඒවා සැමවිටම භයානකයි.
සේවාදායක පැත්තේ සැකිලි එන්නත් කිරීම සැඟවී ඇති තැන CI/CD-ධාවනය කරන ලද යෙදුම්
සේවාදායක පැත්තේ සැකිලි එන්නත් කිරීම වෙබ් යෙදුම් අවදානමක් පමණක් නොවේ; එය දිස්වන්නේ නූතන CI/CD pipelines ද. සාමාන්ය සැඟවුණු ස්ථාන අතරට:
- හෙල්ම් ප්රස්ථාර කුබර්නෙට්ස් හි, සැකිලි අගයන් ගතිකව විදැහුම් කරනු ලැබේ
- ඊමේල් සැකිලි පරිශීලක-පාලිත යෙදවුම් සම්බන්ධ කරන
- Dashboards එහිදී විමසුම් අනුලකුණු හෝ වින්යාස දත්ත සැකිලි වලට එන්නත් කරනු ලැබේ
- DevOps ස්ක්රිප්ට් සැකිලි එන්ජින් භාවිතයෙන් HTML/Markdown ජනනය කරන.
උදාහරණයක්:
# ❌ Insecure Helm values with user input configMap: appMessage: "{{ .Values.message }}" If.වටිනාකම්.පණිවිඩය විශ්වාස නොකළ ආදානයකින් පැමිණේ, එය ඔබගේ යෙදවීමේදී සේවාදායක පාර්ශ්ව සැකිලි එන්නත් කිරීමක් හඳුන්වා දෙයි. pipeline ම ය.
ආරක්ෂිත සැකිලි රටා සහ ස්ථිතික විශ්ලේෂණයන් සමඟ SSTI වැළැක්වීම
SSTI අවදානම් අවම කිරීම සඳහා වඩා හොඳ කේතීකරණ රටා සහ කලින් හඳුනා ගැනීම අවශ්ය වේ.
ආරක්ෂිත රටා
- ❌ භාවිතා නොකරන්න සැකිල්ල_නූල විදැහුම් කරන්න හෝ සමාන
- ✅ පූර්ව නිශ්චිත සැකිලි ගොනු භාවිතා කර සනීපාරක්ෂක විචල්යයන් ලබා දෙන්න
- ✅ සෑන්ඩ්බොක්ස් සැකිලි එන්ජින් ඇති විට
- ✅ විදැහුම්කරණයට පෙර පරිශීලක ආදානය වලංගු කර මඟ හරින්න
අනාරක්ෂිත එදිරිව ආරක්ෂිත කුකී හැසිරවීම (ආශ්රිත ආදාන අවදානම)
# ❌ Insecure: session cookie without flags response.set_cookie("session", token) # ✅ Secure: session cookie hardened response.set_cookie("session", token, httponly=True, secure=True, samesite="Strict") සංවර්ධකයින් සඳහා කුඩා පිරික්සුම් ලැයිස්තුව
- අමු පරිශීලක ආදානය කිසි විටෙකත් සෘජුවම ඉදිරිපත් නොකරන්න.
- සහාය දක්වන විට වැලිපිල්ල සැකිලි භාවිතා කරන්න.
- සියලුම සැකිලි විචල්යයන් සනීපාරක්ෂාව කර වලංගු කරන්න
- අභිරුචි සැකිලි ඇගයුම්කරුවන්ගෙන් වළකින්න
- කේතය ස්කෑන් කරන්න සැකිල්ල_නූල විදැහුම් කරන්න හෝ නූල් සංයෝජන රටා
ස්ථිතික විශ්ලේෂණය සහ ලින්ටර වලට අවදානම් සහිත ඉදිකිරීම් නිෂ්පාදනයට ළඟා වීමට පෙර සලකුණු කළ හැකිය.
DevSecOps තුළ SSTI චෙක්පත් ඇතුළත් කිරීම Pipelines
සේවාදායක පාර්ශ්ව සැකිලි එන්නත් කිරීම කලින් ලබා ගැනීම පසුව නිවැරදි කිරීමට වඩා ලාභදායී සහ ආරක්ෂිතයි. DevSecOps කණ්ඩායම් චෙක්පත් ඇතුළත් කළ යුතුය pipelines:
- Commit hooks: ප්රතික්ෂේප කරන්න commitභයානක කාර්යයන් සහිත (සැකිල්ල_නූල විදැහුම් කරන්න)
- ස්ථිතික විශ්ලේෂක: සැකිලි කේතයේ සේවාදායක පැත්තේ සැකිලි එන්නත් කිරීමේ අවදානම සඳහා ස්කෑන් කරන්න
- යැපුම් වලංගුකරණය: දන්නා SSTI අවදානම් සහිත යල් පැන ගිය සැකිලි එන්ජින් සලකුණු කරන්න
- Pipeline ගේට්ටු: SSTI පරීක්ෂාවන් සමත් වන තුරු බ්ලොක් ඒකාබද්ධ වේ
SSTI බර හඳුනාගැනීමේ කොටස බවට පත් කිරීමෙන් CI/CD, ඔබ සූරාකෑමට ලක්විය හැකි කේතය කිසිදා නැව්ගත කිරීම වළක්වයි.
සේවාදායක පැත්තේ සැකිලි එන්නත් කිරීම ඔබේ තොගයට ලිස්සා යාමට ඉඩ නොදෙන්න.
තනි සේවාදායක පාර්ශ්ව සැකිලි එන්නත් කිරීම ගණිත උපක්රම වලින් උත්සන්න විය හැක ({{7*7}}) සම්පූර්ණ දුරස්ථ කේත ක්රියාත්මක කිරීමට. SSTI අවදානම් වෙබ් යෙදුම්වල පමණක් නොව, CI/CD pipelines, හෙල්ම් ප්රස්ථාර සහ විද්යුත් තැපැල් සැකිලි.
යතුරු රැගෙන යාම
- අමු පරිශීලක ආදානය කිසි විටෙකත් සැකිලි වලට ඉදිරිපත් නොකරන්න.
- සියලුම ගතික විචල්යයන් වලංගු කර පිරිසිදු කරන්න.
- විවිධ එන්ජින් (Jinja2, Velocity, Twig) වලට විවිධ SSTI බර පැටවීම් ඇත, නමුත් ඒ සියල්ල ආයුධ බවට පත් කළ හැකිය.
- ස්ථිතික විශ්ලේෂණය සහ අසාර්ථක-වේගවත් ගේට්ටු භාවිතා කරන්න pipelines
- ඔබේ තොගයේ ඇති සැකිලි නිතිපතා විගණනය කරන්න
මෙවලම් වැනි සයිජෙනි කණ්ඩායම්වලට අනාරක්ෂිත සැකිලි භාවිතය හඳුනා ගැනීමට, SSI අවදානම් අවහිර කිරීමට සහ පුරා ආරක්ෂිත භාවිතයන් බලාත්මක කිරීමට උදව් කරන්න pipelines සහ යැපීම්. DevSecOps හි, SSTI ගෙවීම් ඉහළම මට්ටමේ අවදානමක් ලෙස සැලකීම අත්යවශ්ය වේ, මන්ද ඔබේ pipeline හෝ යෙදුමට ඔබගේ මුළු පරිසරයම අවදානමට ලක් කළ හැකිය.






