fpscanner
A lightweight browser fingerprinting and bot detection library with encryption, obfuscation, and cross-context validation
Supply chain provenance
Status for the latest visible version.
Without SLSA provenance there is no cryptographic link between this tarball and the public source — the axios compromise (March 2026) relied on exactly this gap.
Maintainers
Keywords
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| semgrep | semgrep:env-spread | AI (semgrep): Used in build-custom.js to pass process.env + encryption key to child process; standard build tool pattern. | ai | |
| semgrep | semgrep:dynamic-require | AI (semgrep): CLI loads user-selected build script by path; expected pattern for a build CLI tool. | ai | |
| semgrep | semgrep:child-process-import | AI (semgrep): Used in build scripts only, not in runtime library code; standard for build tooling. | ai | |
| phantom-deps | phantom-dep:ua-parser-js | AI (phantom-deps): ua-parser-js is a declared runtime dependency; phantom-dep heuristic false positive for this package. | ai |
Versions (showing 9 of 9)
| Version | Deps | Published |
|---|---|---|
| 1.0.6 | 3 / 10 | |
| 1.0.5 | 3 / 10 | |
| 1.0.2 | 3 / 10 | |
| 1.0.1 | 3 / 10 | |
| 1.0.0 | 3 / 10 | |
| 0.9.4 | 3 / 10 | |
| 0.9.3 | 3 / 10 | |
| 0.9.2 | 3 / 10 | |
| 0.9.1 | 1 / 12 |
v1.0.6
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/f46bd453287a061bdab17a1f034e04741bc98511/scripts/build-custom.js#L84 82 | cwd: packageDir, 83 | stdio: 'inherit', > 84 | env: { 85 | ...process.env, 86 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v1.0.5
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/736636de5864bd60448a0aa5eab67267167391fb/scripts/build-custom.js#L84 82 | cwd: packageDir, 83 | stdio: 'inherit', > 84 | env: { 85 | ...process.env, 86 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v1.0.2
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/598ac6a4c5e22c533a12244dfd20eea42935fb8c/scripts/build-custom.js#L84 82 | cwd: packageDir, 83 | stdio: 'inherit', > 84 | env: { 85 | ...process.env, 86 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v1.0.1
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/b22425c4b4ce05eff60306fb57e8bb1cabaeab3c/scripts/build-custom.js#L84 82 | cwd: packageDir, 83 | stdio: 'inherit', > 84 | env: { 85 | ...process.env, 86 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v1.0.0
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/79669d8246bef2d8c8e03e21aa9bf7605b82071c/scripts/build-custom.js#L84 82 | cwd: packageDir, 83 | stdio: 'inherit', > 84 | env: { 85 | ...process.env, 86 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.9.4
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/1ea7a850bd4b41eee24e45878857a459ad6284b3/scripts/build-custom.js#L55 53 | cwd: packageDir, 54 | stdio: 'inherit', > 55 | env: { 56 | ...process.env, 57 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.9.3
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/7e9b54d9a57b732d6cbdbc170a63ea2c4487f0ad/scripts/build-custom.js#L55 53 | cwd: packageDir, 54 | stdio: 'inherit', > 55 | env: { 56 | ...process.env, 57 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.9.2
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/eafc189fabc9209958be5d4d583604cf0aad9523/scripts/build-custom.js#L53 51 | cwd: packageDir, 52 | stdio: 'inherit', > 53 | env: { 54 | ...process.env, 55 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.9.1
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/antoinevastel/fpscanner/blob/815df3b053bba170bc9b38d616232f2cab1c6ab5/scripts/build-custom.js#L46 44 | cwd: packageDir, 45 | stdio: 'inherit', > 46 | env: { 47 | ...process.env, 48 | FP_ENCRYPTION_KEY: key,
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.