Sploitus

Exploit for NodeSecurityShield

kitploit · 2026-08-25

Exploit Code

MARKDOWN264 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-DOMDOGSEC-NODESECURITYSHIELD
![](https://assets.kitploit.com/production/public/readmes/5290/d3066aae5b19aa38d2ff1466dc99beb4405e029fe86d17aa92d534f75ea8e497.png)

# Node Security Shield

**Node Security Shield (NSS)** هي أداة حماية ذاتية مفتوحة المصدر للتطبيق أثناء التشغيل (**RASP**) تهدف إلى سد الفجوة في أمان NodeJS الشامل من خلال تمكين _المطور_ و _مهندس الأمان_ من إعلان الموارد التي يمكن للتطبيق الوصول إليها.

مستوحاة من ثغرة Log4Shell (CVE-2021-44228) والتي يمكن استغلالها لأن التطبيق يمكنه إجراء استدعاءات شبكية عشوائية، شعرنا بوجود حاجة إلى أن يكون للتطبيق آلية يمكنها إعلان الصلاحيات التي يسمح بها من أجل جعل استغلال هذه الثغرات أكثر صعوبة من خلال تنفيذ ضوابط إضافية.

لتحقيق ذلك، يحتوي **NSS (Node Security Shield)** على **سياسة الوصول إلى الموارد (RAP)**

### سياسة الوصول إلى الموارد (RAP)

**Resource Access Policy** مماثلة لـ **CSP**(سياسة أمان المحتوى).

تتيح للمطور/مهندس الأمان إعلان الموارد التي يجب على التطبيق الوصول إليها. وسيقوم **Node Security Shield** بفرضها.

## التثبيت

### تثبيت _NodeSecurityShield_ باستخدام npm

root@kitploit:~
    
    
    npm install nodesecurityshield
    

## الاستخدام

root@kitploit:~
    
    
    // Require Node Security Shield
    let nodeSecurityShield = require('nodesecurityshield');
    
    // Enable Attack Monitoring and/or Blocking
    nodeSecurityShield.enableAttackMonitoring("Unique-App-Id",resourceAccessPolicy ,callbackFunction);
    

### **نموذج _resourceAccessPolicy [BASIC]_**

root@kitploit:~
    
    
    const resourceAccessPolicy  = {
      "outBoundRequest" : {
    
          "blockedDomains" : ["compromised.domdog.io"],
        
          "allowedDomains" : []
       },
    	"executedCommand": {
    
            "allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
       }
    };
    

  * **`outBoundRequest`:** يحدد السلوك المقبول لـ `Outbound Requests`
    * **ملاحظة:** تحتفظ `blockedDomains` بالأولوية على `allowedDomains`.
    * **أي،** يتم فحص الطلبات ضد `blockedDomains` أولاً ثم ضد `allowedDomains`.
  * **`executedCommand`:** يحدد السلوك المقبول لـ `Command Execution`
    * يقبل مصفوفة `allowedCommands` قيمة من نوع `String`. يمكنك تمرير تعبير نمطي (RegEx) للسماح بنمط من الأوامر.
    * السلوك الافتراضي هو حظر جميع عمليات تنفيذ الأوامر، بشرط أن تحتوي سياسة RAP على خاصية `executedCommand` معرفة.
    * عند استخدام سياسة RAP أعلاه، 
      * يُسمح بتنفيذ الأمر `pwd`، و



### **نموذج _callbackFunction_ لتسجيل انتهاكات RAP في وحدة التحكم.**

root@kitploit:~
    
    
    var callbackFunction = function (violationEvent,violations,violationLimitPerMinReached) {
      console.log(JSON.stringify(violationEvent,null, 4));
    }
    

  * _**`violationEvent` -** انتهاك RAP الذي حدث. يتم تقديمه كانتهاك CSP._

  * _**`violations` -** عدد انتهاكات RAP. يُعاد تعيينه إلى الصفر كل دقيقة._

  * _**`violationLimitPerMinReached` -** صحيح إذا تجاوز عدد انتهاكات RAP قيمة 'maxViolationsPerMinute' [خيار في RAP]_

  * **لحظر هجوم** \- طرح خطأ

root@kitploit:~
        
        throw new Error("Request Blocked. It violates declared Resource Access Policy.")
        




### **نموذج violationEvent**

root@kitploit:~
    
    
    {
        "csp-report": {
            "document-uri": "https://Unique-App-Id",
            "blocked-uri": "https://compromised.domdog.io:443",
            "violated-directive": "connect-src",
            "effective-directive": "connect-src",
            "original-policy": "{\"outBoundRequest\":{\"blockedDomains\":[\"compromised.domdog.io\"],\"allowedDomains\":[]}}",
            "disposition": "report",
            "status-code": 200,
            "script-sample": "",
            "source-file": "Error\n    at TLSSocket.obj.<computed> [as connect] (/mnt/c/Ironwasp/Product/NodeSecurityShield/lib/hook.js:20:25)\n    at Object.connect (_tls_wrap.js:1606:13)\n    at Agent.createConnection (https.js:126:22)\n    at Agent.createSocket (_http_agent.js:273:26)\n    at Agent.addRequest (_http_agent.js:232:10)\n    at new ClientRequest (_http_client.js:302:16)\n    at request (https.js:310:10)\n    at Object.get (https.js:314:15)\n    at /mnt/c/Ironwasp/RD/Node/SimpleVulnerableNode/routes/ssrf.js:19:19\n    at Layer.handle [as handle_request] (/mnt/c/Ironwasp/RD/Node/SimpleVulnerableNode/node_modules/express/lib/router/layer.js:95:5)"
        }
    }
    

  * **`document-uri:`** يحتوي على معرف التطبيق الفريد (Unique-App-Id)، الذي تم تمريره أثناء تهيئة NSS
  * **`blocked-uri:`** نطاق الطلب الصادر الذي انتهك سياسة RAP
  * **`violated-directive:`** `connect-src` هو مرادف لـ `Outbound Request` وكذلك `script-src` هو مرادف لـ `Command Execution`
  * **`original-policy:`** سياسة الوصول إلى الموارد (RAP) المنتهكة
  * **`source-file:`** تتبع المكدس (Stack Trace) لمكان حدوث هذا الانتهاك.



## التكامل مع Sentry

### **نموذج _resourceAccessPolicy للتكامل معSentry_**

root@kitploit:~
    
    
    const resourceAccessPolicy  = {
      "outBoundRequest" : {
    
          "blockedDomains" : ["compromised.domdog.io"],
        
          "allowedDomains" : []
        },
    	"executedCommand": {
    
            "allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
       },
    	"reportUri": "https://ingest.sentry.io/api/6011856/security/?sentry_key=",
    
    };
    

  * **`outBoundRequest`:** يحدد السلوك المقبول لـ `Outbound Requests`
    * **ملاحظة:** تحتفظ `blockedDomains` بالأولوية على `allowedDomains`.
    * **أي،** يتم فحص الطلبات ضد `blockedDomains` أولاً ثم ضد `allowedDomains`.
  * **`executedCommand`:** يحدد السلوك المقبول لـ `Command Execution`
    * يقبل مصفوفة `allowedCommands` قيمة من نوع `String`. يمكنك تمرير تعبير نمطي (RegEx) للسماح بنمط من الأوامر.
    * السلوك الافتراضي هو حظر جميع عمليات تنفيذ الأوامر، بشرط أن تحتوي سياسة RAP على خاصية `executedCommand` معرفة.
    * عند استخدام سياسة RAP أعلاه، 
      * يُسمح بتنفيذ الأمر `pwd`، و



**لقطة شاشة من لوحة تحكم Sentry** ![sentry issues](https://assets.kitploit.com/production/public/readmes/5290/43f40a1c8624a2d8712209865c270668b0f3c83c1ae28267ba2437f5eb8656fb.png) ![sentry issues](https://assets.kitploit.com/production/public/readmes/5290/25d8ec9f13afab754209004de61780ed6150562c9233b614eaf5e5e075604344.png)

### **نموذج _resourceAccessPolicy [متقدم]_**

root@kitploit:~
    
    
    const resourceAccessPolicy = {
        "outBoundRequest" : {
        
            "blockedDomains" : ["compromised.domdog.io"],
            
            "allowedDomains" : ["domdog.io","*.domdog.io", 
               
                {
                    "domains": [
                        "domgo.at",
                    ],
                    "modules": [
                        {
                            "file": "\/routes\/ssrf.js",
                        },
                        {
                            "file": "\/node_modules\/axios\/",
                        }
                    ]
                },
                {
                    "domains": [
                        "cluster0-shard-00-00.lb9jm.mongodb.net",
                        "cluster0-shard-00-01.lb9jm.mongodb.net",
                        "cluster0-shard-00-02.lb9jm.mongodb.net"
                    ],
                    "modules": [
                        {
                            "file": "\/node_modules\/mongodb\/"
                        }
                    ]
                }
              
            ]
        },
    		"executedCommand": {
    
                "allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
    	   },
        
        "reportUri": "https://endpoint-to-send-violations",
        
        "maxViolationsPerMinute": 50
      }
    

  * **`outBoundRequest`:** يحدد السلوك المقبول لـ `Outbound Requests`
    * **ملاحظة:** تحتفظ `blockedDomains` بالأولوية على `allowedDomains`.
    * **أي،** يتم فحص الطلبات ضد `blockedDomains` أولاً ثم ضد `allowedDomains`.
  * **`executedCommand`:** يحدد السلوك المقبول لـ `Command Execution`
    * يقبل مصفوفة `allowedCommands` قيمة من نوع `String`. يمكنك تمرير تعبير نمطي (RegEx) للسماح بنمط من الأوامر.
    * السلوك الافتراضي هو حظر جميع عمليات تنفيذ الأوامر، بشرط أن تحتوي سياسة RAP على خاصية `executedCommand` معرفة.
    * عند استخدام سياسة RAP أعلاه، 
      * يُسمح بتنفيذ الأمر `pwd`، و



## الميزات

  * **مراقبة الهجمات**
    * الاستدعاءات الشبكية الصادرة
    * تنفيذ الأوامر
  * **حظر الهجمات**
    * الاستدعاءات الشبكية الصادرة
    * تنفيذ الأوامر
  * **التحكم الخاص بالوحدة النمطية**



## خارطة الطريق

  * **مراقبة الهجمات**
    * استدعاءات الملفات
  * **حظر الهجمات**
    * استدعاءات الملفات
  * **ماسح الثغرات الأمنية**



## المؤلفون

  * Lavakumar Kuppan 
    * Github - @lavakumar
    * Twitter - @lavakumark
  * Sukesh Pappu 
    * Github - @thelogicalbeard
    * Twitter - @thelogicalbeard



## المساهمون

  * Ayusman Samal 
    * Github - @p1xxxel



## الترخيص

Apache License 2.0