pfSense Plus MIM API toolkit b4acd7ca - उच्च - रिमोट - विशेषाधिकार शेष - Paramiko AutoAddPolicy enroll
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-enroll-autoadd
Class: Privilege leftover Reach: Remote
pfSense Plus MIM API (Netgate/pfsense-api) b4acd7ca - Netgate
example-add-devices.py प्रत्येक pfSense डिवाइस पर Nexus कंट्रोलर को रजिस्टर करने का प्रलेखित तरीका है। यह कभी load_system_host_keys() नहीं करता। यह paramiko.AutoAddPolicy() सेट करता है, फिर connect, फिर exec_command(device_script)। टिप्पणी कहती है कि जब डिवाइस पहले से known_hosts में हों तो AutoAdd हटा दें। शिपिंग डिफ़ॉल्ट AutoAdd है।
किसी नए बॉक्स से पहला संपर्क SSH जो भी होस्ट की जवाब दे, उसे स्वीकार कर लेता है। पासवर्ड या की ऑथ उस पीयर को प्रस्तुत की जाती है। stdout को json.loads किया जाता है और असली कंट्रोलर पर POST /mim/devices किया जाता है।
यह थर्ड-पार्टी CE REST पैकेज नहीं है। यह pfSense Plus Nexus Multi-instance Management के लिए आधिकारिक OpenAPI और जनरेट किया गया Python क्लाइंट है। सर्वर केवल Plus के लिए है। लैब एक Paramiko SSH गैजेट है। मैंने किसी लाइव Plus कंट्रोलर से बात नहीं की।
| ID | अभी कोई CVE नहीं |
| Class | Privilege leftover (एनरोलमेंट SSH पर Paramiko AutoAddPolicy) |
| Reach | Remote (पहले संपर्क पर डिवाइस SSH के लिए on-path) |
| CWE | CWE-322 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Product | Netgate/pfsense-api (Plus Nexus MIM क्लाइंट टूलकिट) |
| Affected | main b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py |
| Auth | ऑपरेटर आधिकारिक सैंपल चलाता है; हमलावर डिवाइस SSH के लिए on-path है |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:19111। कोई Plus इमेज नहीं। |
AC:H पहला संपर्क / on-path है। जिस वर्कस्टेशन में पहले से असली डिवाइस कीज़ known_hosts में हैं और AutoAdd लाइन हटा दी गई है, वह इस leftover में नहीं आता।
वही पिन leftovers: एनरोलमेंट शेल में ControllerSummary का JSON इंटरपोलेशन (G1) और सैंपल verify_ssl=False को बाध्य करते हैं (G9)। सीरीज़ हब: pfsense-api-nexus-mim।
pfsense_addresses में किसी पहले-संपर्क SSH पते के लिए on-path बैठें, जबकि ऑपरेटर सैंपल चला रहा हो। AutoAdd अभी भी चालू है।
| Method | Sink | Privilege |
|---|---|---|
pfsense_addresses में किसी first-contact SSH address पर on-path बैठना | set_missing_host_key_policy(paramiko.AutoAddPolicy()) फिर connect (example-add-devices.py:151-160) | Integrity (lab-proven): अज्ञात host key स्वीकार कर ली जाती है। Lab: AutoAddPolicy कनेक्ट हुआ (autoadd=yes)। RejectPolicy विफल रहा (reject-control=yes)। |
वही session, exec_command(device_script) का उत्तर देना | stdout को DeviceIdentity के रूप में parse किया गया (example-add-devices.py:161-187) | Integrity (lab-proven): exec ने identity JSON लौटाया जिसमें PFSENSE-API-ENROLL-AUTOADD-WITNESS था (identity-json=yes)। |
| वही MITM, exec payload पढ़ना | device_script बचा हुआ G1 का ControllerSummary का curl -d है | Recon (source से अनुमानित): controller identity key, Netgard vpn_pubkey / vpn_netkey / listen addrs। इस lab द्वारा dump नहीं किया गया। |
| वही MITM, password या key auth | SSHUSER / SSHPASS या agent/keys (example-add-devices.py:156-160) | Recon (अनुमानित): नकली host को प्रस्तुत किए गए credentials या keys। Lab ने password auth का उपयोग केवल नमूना SSHPASS path के रूप में किया। |
वही stdout JSON, add_controlled_device.sync | असली controller पर POST /mim/devices | Integrity (अनुमानित): attacker Noise/VPN keys और address रजिस्टर करता है। साथ ही इस lab में handshake निष्पादित नहीं हुआ। |
| MITM ही SSH server है | जो भी exec client ने भेजा, SSHUSER के रूप में | Integrity / availability (अनुमानित): enrollment script को चलाएँ, छोड़ें, या skip करें। असली device पर Unix-socket calls तभी होती हैं जब MITM उन्हें forward करता है। |
Lab-proven बनाम अनुमानित: AutoAdd connect, RejectPolicy fail, और witness वाला identity JSON lab हैं। Controller-key dump, credential theft, नकली device का POST /mim/devices, और असली unix-socket curls चलाना उसी sample path से अनुमानित हैं।
आवश्यक: operator आधिकारिक sample को ऐसे SSH address के विरुद्ध चलाता है जिसकी host key पहले से pinned नहीं है, और AutoAdd चालू छोड़ा गया है। उस SSH तक network path। AC:H first-contact / on-path है।
| Surface | क्यों |
|---|---|
उसी अज्ञात host पर RejectPolicy | Lab: reject-control=yes। Paramiko key को अस्वीकार कर देता है। |
ऐसा workstation जिसमें known_hosts में असली device keys हों और AutoAdd line हटाई गई हो | comment का इच्छित mode। Sample उन keys को तब तक load नहीं करता जब तक आप call न जोड़ें। |
| HTTPS controller login | verify_ssl=False एक sibling sample leftover (G9) है, यह sink नहीं। |
| असली firewall पर Unix-socket MIM | केवल तब जब MITM exec को forward करे। यह lab /var/run/pfnet-controller.sock से कभी बात नहीं करता। |
Generated Client का default verify_ssl=True | Library default leftover नहीं है। Samples इसे जबरन False करते हैं। |
Plus RBAC / live :8443 | यह lab एक Paramiko gadget है। मैंने Plus controller से बात नहीं की। |
| Unauthenticated Internet-to-8443 | Login अभी भी JWT जारी करता है। यह finding नहीं है। |
| Diagnostics PHP/shell | fleet JWT के लिए इच्छित admin power। यह finding नहीं है। |
CE WebGUI leftovers के बाद मैंने github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f को pin किया। यह tree OpenAPI plus Plus Nexus MIM के लिए generated Python है। मैंने example-add-devices.py में enrollment loop पढ़ा। Host-key policy AutoAdd है। Secrets उसी exec channel पर बैठे हैं। Sample कभी load_system_host_keys() को call नहीं करता।
पहले से दर्ज गलत मोड़: AutoAdd को केवल intended-lab मानना (comment opt-out है, opt-in नहीं); यह मानना कि known_hosts load होता है; इसे ControllerSummary shell interpolation leftover में मिला देना; Plus को live-lab करना; यह दावा करना कि यह :8443 पर unauth HTTPS है।
थिएटर: एक रिवर्स शेल। ओरेकल RejectPolicy विफलता के साथ-साथ AutoAdd कनेक्ट और witness के साथ identity JSON है।
python3 pfsense-api-enroll-autoadd-Abraxas-Labs.py
या
cd lab
./run.sh