Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:28:05 +00:00
parent 9bf5abe10b
commit d10bf39ff1

View File

@ -32,7 +32,7 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
**renderer process** की सेटिंग्स को **main process** में main.js फ़ाइल के अंदर **कॉन्फ़िगर** किया जा सकता है। कुछ कॉन्फ़िगरेशन **Electron एप्लिकेशन को RCE** या अन्य कमजोरियों से **रोकने** में मदद करेंगे यदि **सेटिंग्स को सही तरीके से कॉन्फ़िगर** किया गया ह
**renderer process** की सेटिंग्स को **main process** में main.js फ़ाइल के अंदर **कॉन्फ़िगर** किया जा सकता है। कुछ कॉन्फ़िगरेशन **Electron एप्लिकेशन को RCE** या अन्य कमजोरियों से **रोकने** में मदद करेंगे यदि **सेटिंग्स को सही तरीके से कॉन्फ़िगर** किया गया ह
Electron एप्लिकेशन **डिवाइस तक पहुँच** सकता है Node APIs के माध्यम से, हालाँकि इसे रोकने के लिए कॉन्फ़िगर किया जा सकता है:
@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
कुछ **RCE पेलोड** [यहाँ](https://7as.es/electron/nodeIntegration_rce.txt) से:
कुछ **RCE payloads** [यहां](https://7as.es/electron/nodeIntegration_rce.txt) से:
```html
Example Payloads (Windows):
<img
@ -97,13 +97,13 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### ट्रैफ़िक कैप्चर करें
स्टार्ट-मेन कॉन्फ़िगरेशन को संशोधित करें और एक प्रॉक्सी का उपयोग जोड़ें जैसे:
स्टार्ट-मेन कॉन्फ़िगरेशन को संशोधित करें और प्रॉक्सी के उपयोग को जोड़ें जैसे:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
## Electron स्थानीय कोड इंजेक्शन
यदि आप स्थानीय रूप से एक Electron ऐप को निष्पादित कर सकते हैं, तो यह संभव है कि आप इसे मनमाने javascript कोड को निष्पादित करने के लिए बना सकें। जानें कैसे:
यदि आप स्थानीय रूप से एक Electron ऐप को निष्पादित कर सकते हैं, तो यह संभव है कि आप इसे मनमाना जावास्क्रिप्ट कोड निष्पादित करने के लिए बना सकें। जानें कैसे:
{{#ref}}
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
@ -111,7 +111,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
## RCE: XSS + nodeIntegration
यदि **nodeIntegration** को **on** पर सेट किया गया है, तो एक वेब पृष्ठ का JavaScript आसानी से Node.js सुविधाओं का उपयोग कर सकता है बस `require()` को कॉल करके। उदाहरण के लिए, Windows पर calc एप्लिकेशन को निष्पादित करने का तरीका है:
यदि **nodeIntegration** को **चालू** किया गया है, तो एक वेब पृष्ठ का जावास्क्रिप्ट आसानी से Node.js सुविधाओं का उपयोग कर सकता है बस `require()` को कॉल करके। उदाहरण के लिए, Windows पर calc एप्लिकेशन को निष्पादित करने का तरीका है:
```html
<script>
require("child_process").exec("calc")
@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
इस सेटिंग में निर्दिष्ट स्क्रिप्ट **renderer में अन्य स्क्रिप्ट्स से पहले लोड होती है**, इसलिए इसे **Node APIs तक असीमित पहुंच** है:
इस सेटिंग में निर्दिष्ट स्क्रिप्ट **renderer में अन्य स्क्रिप्ट्स से पहले लोड होती है**, इसलिए इस पास **Node APIs तक असीमित पहुंच है**:
```javascript
new BrowserWindow{
webPreferences: {
@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md
### क्लिक इवेंट बायपास करें
यदि लिंक पर क्लिक करते समय प्रतिबंध लागू होते हैं, तो आप **एक सामान्य बाएं क्लिक के बजाय एक मध्य क्लिक** करके उन्हें बायपास करने में सक्षम हो सकते हैं।
यदि लिंक पर क्लिक करते समय प्रतिबंध लागू होते हैं, तो आप **एक सामान्य बाएं क्लिक के बजाय एक मध्य क्लिक करके** उन्हें बायपास करने में सक्षम हो सकते हैं।
```javascript
window.addEventListener('click', (e) => {
```
@ -187,7 +187,7 @@ For more info about this examples check [https://shabarkin.medium.com/1-click-rc
जब एक Electron डेस्कटॉप एप्लिकेशन को तैनात किया जाता है, तो `nodeIntegration` और `contextIsolation` के लिए सही सेटिंग्स सुनिश्चित करना महत्वपूर्ण है। यह स्थापित किया गया है कि **क्लाइंट-साइड रिमोट कोड निष्पादन (RCE)** जो प्रीलोड स्क्रिप्ट या मुख्य प्रक्रिया से Electron के मूल कोड को लक्षित करता है, इन सेटिंग्स के साथ प्रभावी रूप से रोका जाता है।
जब एक उपयोगकर्ता लिंक के साथ इंटरैक्ट करता है या नए विंडो खोलता है, तो विशिष्ट इवेंट लिसनर्स ट्रिगर होते हैं, जो एप्लिकेशन की सुरक्षा और कार्यक्षमता के लिए महत्वपूर्ण होते हैं:
जब एक उपयोगकर्ता लिंक के साथ इंटरैक्ट करता है या नए विंडो खोलता है, तो विशिष्ट इवेंट लिस्नर्स सक्रिय होते हैं, जो एप्लिकेशन की सुरक्षा और कार्यक्षमता के लिए महत्वपूर्ण होते हैं:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
@ -226,11 +226,11 @@ window.open(
```
## Reading Internal Files: XSS + contextIsolation
**`contextIsolation` को अक्षम करना `<webview>` टैग के उपयोग की अनुमति देता है**, जो `<iframe>` के समान है, स्थानीय फ़ाइलों को पढ़ने और निकालने के लिए। एक उदाहरण दिया गया है जो इस भेद्यता का लाभ उठाने के लिए आंतरिक फ़ाइलों की सामग्री पढ़ने का प्रदर्शन करता है:
**`contextIsolation` को अक्षम करना `<webview>` टैग्स के उपयोग की अनुमति देता है**, जो `<iframe>` के समान है, स्थानीय फ़ाइलों को पढ़ने और निकालने के लिए। एक उदाहरण दिया गया है जो इस भेद्यता का उपयोग करके आंतरिक फ़ाइलों की सामग्री पढ़ने का प्रदर्शन करता है:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
इसके अलावा, **एक आंतरिक फ़ाइल पढ़ने** के लिए एक और विधि साझा की गई है, जो एक Electron डेस्कटॉप ऐप में एक महत्वपूर्ण स्थानीय फ़ाइल पढ़ने की भेद्यता को उजागर करती है। इसमें डेटा निकालने और एप्लिकेशन का लाभ उठाने के लिए एक स्क्रिप्ट इंजेक्ट करना शामिल है:
इसके अलावा, **एक आंतरिक फ़ाइल पढ़ने** के लिए एक और विधि साझा की गई है, जो एक Electron डेस्कटॉप ऐप में एक महत्वपूर्ण स्थानीय फ़ाइल पढ़ने की भेद्यता को उजागर करती है। इसमें डेटा निकालने के लिए एप्लिकेशन का शोषण करने के लिए एक स्क्रिप्ट इंजेक्ट करना शामिल है:
```html
<br /><br /><br /><br />
<h1>
@ -260,9 +260,9 @@ frames[0].document.body.innerText
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
**`openInternally`** को कॉल करने से यह तय होगा कि **link** **desktop window** में **खुली** जाएगी क्योंकि यह प्लेटफ़ॉर्म से संबंधित एक लिंक है, **या** इसे **browser में 3rd party resource** के रूप में खोला जाएगा।
**`openInternally`** को कॉल करने से यह तय होगा कि **link** **desktop window** में **खुली** जाएगी क्योंकि यह प्लेटफ़ॉर्म से संबंधित लिंक है, **या** इसे **browser में 3rd party resource** के रूप में खोला जाएगा।
यदि फ़ंक्शन द्वारा उपयोग किया गया **regex** **bypasses** के लिए **vulnerable** है (उदाहरण के लिए **subdomains** के डॉट्स को **escape** न करके), तो एक हमलावर XSS का दुरुपयोग कर सकता है ताकि **एक नई विंडो खोली जा सके** जो हमलावर की अवसंरचना में स्थित होगी **उपयोगकर्ता से क्रेडेंशियल्स** मांगते हुए:
यदि फ़ंक्शन द्वारा उपयोग किया गया **regex** **bypasses** के लिए **vulnerable** है (उदाहरण के लिए **subdomains** के डॉट्स को **escape** न करके), तो एक हमलावर XSS का दुरुपयोग कर सकता है ताकि **एक नई विंडो खोली जा** जो हमलावर की अवसंरचना में स्थित होगी **उपयोगकर्ता से क्रेडेंशियल्स** मांगते हुए:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
@ -273,14 +273,14 @@ window.open("<http://subdomainagoogleq.com/index.html>")
Electron Remote module **renderer processes को मुख्य प्रक्रिया APIs तक पहुँचने की अनुमति देता है**, जो Electron एप्लिकेशन के भीतर संचार को सुविधाजनक बनाता है। हालाँकि, इस मॉड्यूल को सक्षम करना महत्वपूर्ण सुरक्षा जोखिमों को पेश करता है। यह एप्लिकेशन के हमले की सतह को बढ़ाता है, जिससे यह क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों जैसी कमजोरियों के प्रति अधिक संवेदनशील हो जाता है।
> [!TIP]
> हालाँकि **remote** मॉड्यूल कुछ APIs को मुख्य से renderer प्रक्रियाओं में उजागर करता है, RCE प्राप्त करना केवल घटकों का दुरुपयोग करके सीधा नहीं है। हालाँकि, घटक संवेदनशील जानकारी को उजागर कर सकते हैं।
> हालाँकि **remote** मॉड्यूल कुछ APIs को मुख्य से renderer प्रक्रियाओं में उजागर करता है, लेकिन केवल घटकों का दुरुपयोग करके RCE प्राप्त करना सीधा नहीं है। हालाँकि, घटक संवेदनशील जानकारी को उजागर कर सकते हैं।
> [!WARNING]
> कई ऐप्स जो अभी भी remote मॉड्यूल का उपयोग करते हैं, इसे इस तरह से करते हैं कि **renderer प्रक्रिया में NodeIntegration को सक्षम करना आवश्यक है**, जो एक **बड़ा सुरक्षा जोखिम** है।
Electron 14 से `remote` मॉड्यूल को सुरक्षा और प्रदर्शन कारणों से कई चरणों में सक्षम किया जा सकता है, इसलिए इसे **उपयोग न करने की सिफारिश की जाती है**
इसे सक्षम करने के लिए, सबसे पहले **मुख्य प्रक्रिया में इसे सक्षम करना आवश्यक है**:
इसे सक्षम करने के लिए, सबसे पहले इसे **मुख्य प्रक्रिया में सक्षम करना आवश्यक है**:
```javascript
const remoteMain = require('@electron/remote/main')
remoteMain.initialize()
@ -302,7 +302,7 @@ The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html
- **`app.setAppLogsPath([path])`**
- **ऐप लॉग्स** को संग्रहीत करने के लिए एक निर्देशिका **परिभाषित** या **बनाता** है। लॉग्स को **`app.getPath()`** या **`app.setPath(pathName, newPath)`** का उपयोग करके **प्राप्त** या **संशोधित** किया जा सकता है।
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- एक निर्दिष्ट **प्रोटोकॉल** के लिए वर्तमान निष्पादन योग्य को **डिफ़ॉल्ट हैंडलर** के रूप में **पंजीकृत** करता है। यदि आवश्यक हो तो आप एक **कस्टम पथ** और **आर्गुमेंट्स** प्रदान कर सकते हैं।
- निर्दिष्ट **प्रोटोकॉल** के लिए वर्तमान निष्पादन योग्य को **डिफ़ॉल्ट हैंडलर** के रूप में **पंजीकृत** करता है। यदि आवश्यक हो तो आप एक **कस्टम पथ** और **आर्गुमेंट्स** प्रदान कर सकते हैं।
- **`app.setUserTasks(tasks)`**
- **जंप लिस्ट** (Windows पर) में **टास्क श्रेणी** में कार्य **जोड़ता** है। प्रत्येक कार्य नियंत्रित कर सकता है कि ऐप कैसे **लॉन्च** होता है या कौन से **आर्गुमेंट्स** पास किए जाते हैं।
- **`app.importCertificate(options, callback)`**
@ -338,11 +338,11 @@ console.log('Recent Places:', recentPlaces);
* **स्थानीय macOS सूचनाओं** के लिए **सुनता** है NSDistributedNotificationCenter का उपयोग करके।
* **macOS Catalina** से पहले, आप **nil** को CFNotificationCenterAddObserver में पास करके **सभी** वितरित सूचनाओं को स्निफ कर सकते थे।
* **Catalina / Big Sur** के बाद, सैंडबॉक्स किए गए ऐप्स अभी भी **कई घटनाओं** (उदाहरण के लिए, **स्क्रीन लॉक/अनलॉक**, **वॉल्यूम माउंट**, **नेटवर्क गतिविधि**, आदि) के लिए **नाम** द्वारा सूचनाओं को **सदस्यता** ले सकते हैं।
* **Catalina / Big Sur** के बाद, सैंडबॉक्स किए गए ऐप्स अभी भी **कई घटनाओं** (उदाहरण के लिए, **स्क्रीन लॉक/अनलॉक**, **वॉल्यूम माउंट**, **नेटवर्क गतिविधि**, आदि) के लिए **नाम** द्वारा सूचनाएं पंजीकृत करके **सदस्यता** ले सकते हैं।
### **getUserDefault / setUserDefault**
* **NSUserDefaults** के साथ **इंटरफेस** करता है, जो macOS पर **ऐप्लिकेशन** या **वैश्विक** प्राथमिकताए संग्रहीत करता है।
* **NSUserDefaults** के साथ **इंटरफेस** करता है, जो macOS पर **ऐप्लिकेशन** या **वैश्विक** प्राथमिकताए संग्रहीत करता है।
* **getUserDefault** संवेदनशील जानकारी, जैसे **हाल के फ़ाइल स्थान** या **उपयोगकर्ता का भौगोलिक स्थान** **प्राप्त** कर सकता है।
@ -390,7 +390,7 @@ cd vulnerable1
npm install
npm start
```
## **References**
## **संदर्भ**
- [https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028](https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028)
- [https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d](https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d)