registry  /  @xframework-ca-test/cli  /  1.0.39

@xframework-ca-test/cli@1.0.39

xFramework — one command to run your portal locally

AI Security Review

scanned 2h ago · by lpm-firewall-ai

The main risk is shipped repository access credentials embedded in the CLI bundle. They are used by explicit init/create commands to clone package-owned Bitbucket repositories, not by install-time code.

Static reason
High-risk behavior combination matched malicious policy.
Trigger
User runs xframework-cli init/create or default/start/run CLI commands.
Impact
Potential unauthorized access to upstream private repos if embedded tokens are valid; local project files/logs are created or overwritten during CLI workflows.
Mechanism
hardcoded Bitbucket tokens and command-invoked project scaffolding/runtime process spawning
Rationale
Source inspection does not show unconsented install-time execution, exfiltration, persistence, or AI-agent hijacking, so a malicious block is not established. The embedded Bitbucket tokens are a concrete unresolved security risk and should be warned/quarantined until rotated or removed.
Evidence
package.jsonindex.bundle.jsscripts/prepack.jsscripts/build-aws.jsdist/ui/assets/SetupWizard-609e8434.jsdist/ui/assets/vendor-msal-69061c3a.js<project>/api<project>/ui<project>/customer-portal<project>/xframework.json<project>/api.log<project>/ui.log<project>/customer-portal.log~/.xFramework/instances/default/.pid~/.xFramework/instances/default/config.json
Network endpoints5
bitbucket.org/contentactivedev/xframework-api.gitbitbucket.org/contentactivedev/xframework.gitbitbucket.org/contentactivedev/xframework-customer.gitlocalhost:*127.0.0.1:*

Decision evidence

public snapshot
AI called this Suspicious at 86.0% confidence as Dangerous Capability with medium false-positive risk.
Evidence for warning
  • index.bundle.js embeds three Bitbucket access tokens as defaults for XFRAMEWORK_BB_TOKEN_API/UI/CP.
  • index.bundle.js builds authenticated https://x-token-auth URLs for bitbucket.org/contentactivedev/{xframework-api,xframework,xframework-customer}.git.
  • index.bundle.js init/create commands clone remote repos and delete/rewrite target project directories on explicit user command.
  • index.bundle.js run/start commands spawn dotnet/npm/pg_dump/psql and write logs/config under xFramework project or ~/.xFramework.
Evidence against
  • package.json has no preinstall/install/postinstall hook; only prepublishOnly build script.
  • CLI actions are command-invoked; no import-time credential harvesting or broad filesystem scan found.
  • Network endpoints are package-aligned Bitbucket clone URLs and localhost service URLs.
  • dist/ui MSAL/password fields are bundled application UI/setup flows, not confirmed phishing or exfiltration.
  • No AI-agent control-surface writes found.
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsEvalFilesystemNativeBindingsNetworkShell
Supply chain
HighEntropyStringsMinifiedObfuscatedProtestwareTelemetryUrlStrings
Manifest
NoLicenseWildcardDependency
scanned 351 file(s), 16.4 MB of source, external domains: 127.0.0.1, 169.254.169.254, accounts.google.com, acme.com, aka.ms, aomedia.org, api.ipify.org, barcode.tec-it.com, beta.com, bit.ly, cdn.jsdelivr.net, conformance.dashif.org, dashif.org, delta.com, developers.google.com, docs.microsoft.com, dotnet.microsoft.com, example.com, fast.wistia.com, fb.me, feross.org, fonts.googleapis.com, foo.bar, gamma.com, github.com, go.devexpress.com, goo.gl, httpbin.org, id.gs1.org, imf.gov, img.litix.io, js.devexpress.com, jurassic.tech, learn.microsoft.com, libertyhigh.edu, login.chinacloudapi.cn, login.microsoftonline.com, login.microsoftonline.de, login.microsoftonline.us, login.partner.microsoftonline.cn, login.sovcloud-identity.de, login.sovcloud-identity.fr, login.sovcloud-identity.sg, login.windows-ppe.net, maps.googleapis.com, momentjs.com, mui.com, npms.io, open.spotify.com, player.twitch.tv
Oversized source lightweight scan
dist/customer-portal/assets/DocumentList-f286e322.js2.74 MB file, sampled 256 KB
ChildProcessHighEntropyStringsMinifiedUrlStringsgithub.comwww.w3.org
dist/ui/assets/ReportEditor-01511a50.js3.30 MB file, sampled 256 KB
ChildProcessEvalHighEntropyStringsMinified
dist/ui/assets/index-f9dbc56a.js6.45 MB file, sampled 256 KB
NetworkDynamicRequireHighEntropyStringsMinifiedUrlStringscdn.jsdelivr.nethttpbin.orglogin.microsoftonline.commaps.googleapis.comquilljs.comreact.devwww.google.com
dist/ui/assets/vendor-devex-aec1fb1b.js2.95 MB file, sampled 256 KB
ChildProcessHighEntropyStringsMinifiedUrlStringsgithub.comjs.devexpress.comsupportcenter.devexpress.comwww.devexpress.comwww.w3.org

Source & flagged code

12 flagged · loading source
dist/ui/assets/SetupWizard-609e8434.jsView file
1patternName = generic_password severity = medium line = 1 matchedText = import{j...lt};
Medium
Secret Pattern

Package contains a possible secret pattern.

dist/ui/assets/SetupWizard-609e8434.jsView on unpkg · L1
dist/ui/assets/vendor-pdf-b5ab85ab.jsView file
1var Bs=(h,t,e)=>{if(!t.has(h))throw TypeError("Cannot "+e)};var Z=(h,t,e)=>(Bs(h,t,"read from private field"),e?e.call(h):t.get(h)),kt=(h,t,e)=>{if(t.has(h))throw TypeError("Cannot... L2: `);return t.join("")}}function Ue(h,t){const e=t?URL.parse(h,t):URL.parse(h);return e?.protocol==="http:"||e?.protocol==="https:"}function Lt(h){h.preventDefault()}function nt(h){h... L3: `)||null;a&&this.data.comb&&(a=a.replaceAll(/\s+/g,""));const o={userValue:n,formattedValue:a,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(s=document.create...
High
Child Process

Package source references child process execution.

dist/ui/assets/vendor-pdf-b5ab85ab.jsView on unpkg · L1
1var Bs=(h,t,e)=>{if(!t.has(h))throw TypeError("Cannot "+e)};var Z=(h,t,e)=>(Bs(h,t,"read from private field"),e?e.call(h):t.get(h)),kt=(h,t,e)=>{if(t.has(h))throw TypeError("Cannot... L2: `);return t.join("")}}function Ue(h,t){const e=t?URL.parse(h,t):URL.parse(h);return e?.protocol==="http:"||e?.protocol==="https:"}function Lt(h){h.preventDefault()}function nt(h){h... L3: `)||null;a&&this.data.comb&&(a=a.replaceAll(/\s+/g,""));const o={userValue:n,formattedValue:a,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(s=document.create...
Medium
Dynamic Require

Package source references dynamic require/import behavior.

dist/ui/assets/vendor-pdf-b5ab85ab.jsView on unpkg · L1
1var Bs=(h,t,e)=>{if(!t.has(h))throw TypeError("Cannot "+e)};var Z=(h,t,e)=>(Bs(h,t,"read from private field"),e?e.call(h):t.get(h)),kt=(h,t,e)=>{if(t.has(h))throw TypeError("Cannot... L2: `);return t.join("")}}function Ue(h,t){const e=t?URL.parse(h,t):URL.parse(h);return e?.protocol==="http:"||e?.protocol==="https:"}function Lt(h){h.preventDefault()}function nt(h){h...
Low
Eval

Package source references a known benign dynamic code generation pattern.

dist/ui/assets/vendor-pdf-b5ab85ab.jsView on unpkg · L1
index.bundle.jsView file
1Manifest entrypoint (manifest.main) carries capability families absent from dist/build output: environment+network, sensitive-file+network, execution+network L1: #!/usr/bin/env node L2: "use strict";var Fc=Object.create;var to=Object.defineProperty;var Dc=Object.getOwnPropertyDescriptor;var Lc=Object.getOwnPropertyNames;var kc=Object.getPrototypeOf,Nc=Object.proto... L3: `).replace(/^/gm," ".repeat(o))}let c=[`Usage: ${r.commandUsage(e)}`,""],u=r.commandDescription(e);u.length>0&&(c=c.concat([r.wrap(u,i,0),""]));let f=r.visibleArguments(e).map(y=>a... ... L10: (Did you mean one of ${n.join(", ")}?)`:n.length===1?` L11: (Did you mean ${n[0]}?)`:""}io.suggestSimilar=Hc});var fo=g(uo=>{var Gc=require("events").EventEmitter,un=require("child_process"),ue=require("path"),fn=require("fs"),L=require("pr... L12: - specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this.commands.push(... ... L21: Expecting one of '${n.join("', '")}'`);let i=`${e}Help`;return this.on(i,o=>{let s;typeof r=="function"?s=r({error:o.error,command:o.command}):s=r,s&&o.write(`${s} L22: `)}),this}};function …
High
Entrypoint Build Divergence

Manifest entrypoint contains risky behavior absent from dist/build output.

index.bundle.jsView on unpkg · L1
12- specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this.commands.push(... L13: Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e... L14: - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead ... L26: `],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function Bo(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5|... L27: `);return o!==-1&&(e=Su(e,i,n,o)),n+e+i},wn,Go=(t,...e)=>{let[r]=e;if(!Bt(r)||!Bt(r.raw))return e.join(" ");let n=e.slice(1),i=[r.raw[0]];for(let o=1;o<r.length;o++)i.push(String(n... L28: `))this.lineCount+=Math.max(1,Math.ceil(Jd(n)/e))}get isEnabled(){return this._isEnabled&&!this.isSilent}set isEnabled(e){if(typeof e!="boolean")throw new TypeError("The `isEnabled...
High
Same File Env Network Execution

A single source file combines environment access, network access, and code or shell execution; review context before blocking.

index.bundle.jsView on unpkg · L12
12- specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=e._name),(r.noHelp||r.hidden)&&(e._hidden=!0),this.commands.push(... L13: Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(r):this._lifeCycleHooks[e]=[r],this}exitOverride(e){return e?this._exitCallback=e... L14: - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead ... L19: `),this.outputHelp({error:!0}));let n=r||{},i=n.exitCode||1,o=n.code||"commander.error";this._exit(i,o,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in L.env... L20: `),this._exit(0,"commander.version",e)}),this}description(e,r){return e===void 0&&r===void 0?this._description:(this._description=e,r&&(this._argsDescription=r),this)}summary(e){re... L21: Expecting one of '${n.join("', '")}'`);let i=`${e}Help`;return this.on(i,o=>{let s;typeof r=="function"?s=r({error:o.error,command:o.command}):s=r,s&&o.write(`${s} ... L26: `],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function
High
Command Output Exfiltration

Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.

index.bundle.jsView on unpkg · L12
dist/ui/assets/vendor-msal-69061c3a.jsView file
1import{r as Ke,c as xs}from"./vendor-react-a844883a.js";/*! @azure/msal-common v15.17.0 2026-03-18 */const f={LIBRARY_NAME:"MSAL.JS",SKU:"msal.js.common",DEFAULT_AUTHORITY:"https:/... L2: Error: ${o.errorCode} ... L4: Error: ${r.name} L5: Error Description: ${r.message}`)}return null}return n||(this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the ne... L6: ${r}`);return}else if(t&&e.status&&e.status>=Ae.CLIENT_ERROR_RANGE_START&&e.status<=Ae.CLIENT_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD ... L7: ${r}`);return}throw Ni(e.error,e.error_description,e.suberror)?new se(e.error,e.error_description,e.suberror,e.timestamp||f.EMPTY_STRING,e.trace_id||f.EMPTY_STRING,e.correlation_id...
Critical
Browser Credential Phishing

Source appears to collect browser login credentials for exfiltration.

dist/ui/assets/vendor-msal-69061c3a.jsView on unpkg · L1
1import{r as Ke,c as xs}from"./vendor-react-a844883a.js";/*! @azure/msal-common v15.17.0 2026-03-18 */const f={LIBRARY_NAME:"MSAL.JS",SKU:"msal.js.common",DEFAULT_AUTHORITY:"https:/... L2: Error: ${o.errorCode} ... L4: Error: ${r.name} L5: Error Description: ${r.message}`)}return null}return n||(this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the ne... L6: ${r}`);return}else if(t&&e.status&&e.status>=Ae.CLIENT_ERROR_RANGE_START&&e.status<=Ae.CLIENT_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD ... L7: ${r}`);return}throw Ni(e.error,e.error_description,e.suberror)?new se(e.error,e.error_description,e.suberror,e.timestamp||f.EMPTY_STRING,e.trace_id||f.EMPTY_STRING,e.correlation_id...
High
Cloud Metadata Access

Source reaches cloud instance metadata or link-local credential endpoints.

dist/ui/assets/vendor-msal-69061c3a.jsView on unpkg · L1
dist/ui/favicon.icoView file
path = dist/ui/favicon.ico kind = high_entropy_blob sizeBytes = 7910 magicHex = [redacted]
High
Ships High Entropy Blob

Package ships high-entropy non-source blobs.

dist/ui/favicon.icoView on unpkg
dist/ui/assets/index-f9dbc56a.jsView file
path = dist/ui/assets/index-f9dbc56a.js kind = oversized_source_file sizeBytes = 6760261 magicHex = [redacted]
High
Oversized Source File

Package contains source files above the static scanner size ceiling.

dist/ui/assets/index-f9dbc56a.jsView on unpkg
dist/customer-portal/assets/index-737fd7d3.jsView file
123patternName = generic_password severity = medium line = 123 matchedText = In order...ata.
Medium
Secret Pattern

Hardcoded password in dist/customer-portal/assets/index-737fd7d3.js

dist/customer-portal/assets/index-737fd7d3.jsView on unpkg · L123

Findings

1 Critical8 High8 Medium9 Low
CriticalBrowser Credential Phishingdist/ui/assets/vendor-msal-69061c3a.js
HighChild Processdist/ui/assets/vendor-pdf-b5ab85ab.js
HighShell
HighEntrypoint Build Divergenceindex.bundle.js
HighSame File Env Network Executionindex.bundle.js
HighCommand Output Exfiltrationindex.bundle.js
HighCloud Metadata Accessdist/ui/assets/vendor-msal-69061c3a.js
HighShips High Entropy Blobdist/ui/favicon.ico
HighOversized Source Filedist/ui/assets/index-f9dbc56a.js
MediumSecret Patterndist/ui/assets/SetupWizard-609e8434.js
MediumDynamic Requiredist/ui/assets/vendor-pdf-b5ab85ab.js
MediumNetwork
MediumEnvironment Vars
MediumProtestware
MediumStructural Risk Force Deep Review
MediumWildcard Dependency
MediumSecret Patterndist/customer-portal/assets/index-737fd7d3.js
LowNon Install Lifecycle Scripts
LowScripts Present
LowEvaldist/ui/assets/vendor-pdf-b5ab85ab.js
LowFilesystem
LowObfuscated
LowHigh Entropy Strings
LowTelemetry
LowUrl Strings
LowNo License