@sap/cds-dk
Supply chain provenance
Status for the latest visible version.
Without SLSA provenance there is no cryptographic link between this tarball and the public source, so a manually published version cannot be tied back to a reviewed commit.
Maintainers
Keywords
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| npm-metadata | bundled-binaries | AI (npm-metadata): lz4-wasm compression binary in bundled deps; stable for this first-party toolkit. | ai | |
| phantom-deps | phantom-dep:@cap-js/sqlite | AI (phantom-deps): Config-referenced CAP db driver, not directly imported; expected. | ai | |
| semgrep | semgrep:env-spread | AI (semgrep): Passes env to child processes with FORCE_COLOR override; standard CLI pattern. | ai | |
| semgrep | semgrep:env-exfil-stringify | AI (semgrep): Deep-clones env for HDI deploy config; no network exfiltration. | ai | |
| semgrep | semgrep:dynamic-require | AI (semgrep): Plugin/template loader pattern; paths are local __dirname-relative. | ai | |
| semgrep | semgrep:child-process-import | AI (semgrep): CLI toolkit spawns commands as core functionality. | ai | |
| semgrep | semgrep:eval-usage | AI (semgrep): Implements `cds eval` command; user-supplied code execution by design. | ai | |
| semgrep | semgrep:child-process-execsync | AI (semgrep): Runs `npm root -g` to find global modules; benign CLI utility. | ai | |
| semgrep | semgrep:base64-decode | AI (semgrep): Decodes K8s secret data; standard K8s interaction pattern. | ai | |
| semgrep | semgrep:env-bulk-read | AI (semgrep): Checks WS_BASE_URL to detect BAS environment; no exfil. | ai | |
| semgrep | semgrep:child-process-spawn | AI (semgrep): CLI command runner; core functionality of dev toolkit. | ai | |
| phantom-deps | phantom-dep:minimist | AI (phantom-deps): Bundled dependency; listed in bundleDependencies. | ai | |
| phantom-deps | phantom-dep:@sap/cds-fiori | AI (phantom-deps): Bundled dependency; listed in bundleDependencies. | ai | |
| phantom-deps | phantom-dep:@cap-js/openapi | AI (phantom-deps): Bundled dependency; listed in bundleDependencies. | ai |
v10.0.4
2 findingsPackage contains compiled binaries that could be backdoors: • node_modules/lz4-wasm-nodejs/lz4_wasm_nodejs_bg.wasm
Package was published without Sigstore provenance. Consider requesting the maintainer enable provenance via CI/CD.
v10.0.3
9 findingsSpreading entire process.env into an object — may capture all secrets 58 | return execSync(cmd, { 59 | stdio: silent ? 'pipe' : 'inherit', > 60 | env: { ...process.env, FORCE_COLOR: cds.utils.colors.enabled } 61 | }) 62 | } catch (error) {
Spreading entire process.env into an object — may capture all secrets 25 | return execSync(cmd, { 26 | stdio: silent ? 'pipe' : 'inherit', > 27 | env: { ...process.env, FORCE_COLOR: cds.utils.colors.enabled } 28 | }) 29 | } catch (error) {
Serializing entire process.env — likely credential harvesting if sent over network 11 | const { clean_env, deploy } = this._loadHdiDeployLib(dbDir); 12 | > 13 | const deployerEnv = JSON.parse(JSON.stringify(process.env)); 14 | const options = deployerEnv.HDI_DEPLOY_OPTIONS ? JSON.parse(deployerEnv.HDI_DEPLOY_OPTIONS) : { parameter }; 15 | delete options.root;
Spreading entire process.env into an object — may capture all secrets 9 | 10 | function runCf(args, callback) { > 11 | const env = { ...process.env, LC_ALL: 'en_US.UTF-8' }; // enforce English headings 12 | return execFile('cf', args, { env }, callback); 13 | }
Spreading entire process.env into an object — may capture all secrets 169 | if (hasWorkspaces) return files; 170 | > 171 | const gitEnv = { ...process.env, GIT_CEILING_DIRECTORIES: path.dirname(cds.root) }; 172 | const entries = cds.utils.fs.readdirSync(cds.root, { withFileTypes: true }); 173 | for (const entry of entries) {
Spreading entire process.env into an object — may capture all secrets 189 | const { fs, exists } = cds.utils 190 | const files = [] > 191 | const gitEnv = { ...process.env, GIT_CEILING_DIRECTORIES: path.dirname(cds.root) } 192 | 193 | // Check root pom.xml
Spreading entire process.env into an object — may capture all secrets 39 | const recipeList = recipes.map(r => r.orRecipe).join(','); 40 | const settingsPath = writeTempSettings(); > 41 | const mvnOpts = { cwd: cds.root, timeout: TIMEOUT_MS, env: { ...process.env, MAVEN_OPTS: process.env.MAVEN_OPTS || '' 42 | const args = (goal) => buildArgs(goal, settingsPath, recipeList); 43 |
Spreading entire process.env into an object — may capture all secrets 67 | 68 | async function filterGitIgnored(paths, cds) { > 69 | const env = { ...process.env, GIT_CEILING_DIRECTORIES: path.dirname(cds.root) }; 70 | const out = []; 71 | for (const p of paths) {
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.