registry  /  @lystech/core  /  3.0.88

@lystech/core@3.0.88

Lystech Core contains essentials for lystech apps

AI Security Review

scanned 14h ago · by lpm-firewall-ai

Installing the package modifies the consumer repository by adding a GitHub Actions workflow. On later pushes, that workflow collects repository identity and transmits it to a hard-coded external registry.

Static reason
High-risk behavior combination matched malicious policy.; source matched previously finalized malicious package; routed for review
Trigger
npm install, then a push to the consumer repository's `main` or `master` branch
Impact
Unconsented persistent CI configuration and disclosure of consumer repository metadata to a third party.
Mechanism
install-time workflow persistence and repository metadata exfiltration
Attack narrative
`postinstall` runs during dependency installation and writes a previously absent workflow into the consuming project. The workflow runs on future pushes, obtains the repository ID using the repository token, then sends package name, owner, repository name, and repository ID to a third-party DigitalOcean endpoint. This persistence and data transfer occur without an explicit user-invoked setup command.
Rationale
The package performs an unconsented install-time mutation of a consumer CI project and establishes persistent metadata exfiltration. The bundled frontend API traffic does not explain or mitigate this lifecycle behavior.
Evidence
package.jsonbin/postinstall.cjsbin/setup-registry.cjsdist/lystech-core-provider.es.js.github/workflows/sync-package-registry.yml
Network endpoints2
api.github.com/repos/$OWNER/$REPO_NAMElysbunback-usgg4.ondigitalocean.app/api/package-registry

Decision evidence

public snapshot
AI called this Malicious at 98.0% confidence as Malware with low false-positive risk.
Evidence for block
  • `package.json` runs `node bin/postinstall.cjs` on install.
  • `bin/postinstall.cjs` silently creates `.github/workflows/sync-package-registry.yml` in the consuming project.
  • The generated workflow persists on `push` and `workflow_dispatch`.
  • That workflow reads repository identity with `GITHUB_TOKEN` and POSTs owner, repo, and repoId to a hard-coded third-party registry.
  • The install hook requires no explicit setup command or user confirmation.
Evidence against
  • `bin/postinstall.cjs` does not send `GITHUB_TOKEN` to the external registry.
  • `dist/lystech-core-provider.es.js` network code is application-facing Axios/Firebase usage, not install-time harvesting.
  • No package source inspected executes remote code or overwrites existing workflow files.
Behavioral surface
Source
ChildProcessEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsMinifiedTelemetryUrlStrings
ManifestNo manifest risk signals triggered.
scanned 6 file(s), 2.17 MB of source, external domains: accounts.google.com, ant.design, api.github.com, api.lystech.ca, apis.google.com, github.com, jedwatson.github.io, lysbunback-usgg4.ondigitalocean.app, lystech.firebaseio.com, momentjs.com, placehold.co, react-query.tanstack.com, reactjs.org, reactrouter.com, u.ant.design, www.google.com, www.paypal.com, www.sandbox.paypal.com, www.w3.org
Oversized source lightweight scan
dist/lystech-core-provider.es.js2.39 MB file, sampled 256 KB
NetworkChildProcessEnvironmentVarsHighEntropyStringsUrlStringsmomentjs.comreactjs.orgwww.google.comwww.paypal.comwww.sandbox.paypal.com

Source & flagged code

10 flagged · loading source
package.jsonView file
scripts.postinstall = node bin/postinstall.cjs
High
Install Time Lifecycle Scripts

Package defines install-time lifecycle scripts.

package.jsonView on unpkg
scripts.postinstall = node bin/postinstall.cjs
Medium
Ambiguous Install Lifecycle Script

Install-time lifecycle script is not statically allowlisted and needs review.

package.jsonView on unpkg
dist/lystech-core-provider.umd.jsView file
16* LICENSE file in the root directory of this source tree. L17: */var Pp;function F4(){return Pp||(Pp=1,process.env.NODE_ENV!=="production"&&function(){var e=O,t=Symbol.for("react.element"),n=Symbol.for("react.portal"),r=Symbol.for("react.fragm... L18: `+ae+K}}var ie=!1,le;{var G=typeof WeakMap=="function"?WeakMap:Map;le=new G}function te(K,Pe){if(!K||ie)return"";{var Fe=le.get(K);if(Fe!==void 0)return Fe}var Be;ie=!0;var at=Erro... ... L20: `),xt=ut.length-1,At=Bt.length-1;xt>=1&&At>=0&&ut[xt]!==Bt[At];)At--;for(;xt>=1&&At>=0;xt--,At--)if(ut[xt]!==Bt[At]){if(xt!==1||At!==1)do if(xt--,At--,At<0||ut[xt]!==Bt[At]){var We... L21: `+ut[xt].replace(" at new "," at ");return K.displayName&&We.includes("<anonymous>")&&(We=We.replace("<anonymous>",K.displayName)),typeof K=="function"&&le.set(K,We),We}while(xt>=1... L22: ... L59: * limitations under the License. L60: */const Np=function(e){const t=[];let n=0;for(let r=0;r<e.length;r++){let a=e.charCodeAt(r);a<128?t[n++]=a:a<2048?(t[n++]=a>>6|192,t[n++]=a&63|128):(a&64512)===55296&&r+1<e.length&... L61: * @license ... L374: * limitations under the License. L375: */function u6(e){bs(new oo("platform-logger",t=>new xO(t),"PRIVATE")),bs(ne
Critical
Credential Exfiltration

Source appears to send environment or credential material to an external endpoint.

dist/lystech-core-provider.umd.jsView on unpkg · L16
16Trigger-reachable chain: manifest.main -> dist/lystech-core-provider.umd.js L16: * LICENSE file in the root directory of this source tree. L17: */var Pp;function F4(){return Pp||(Pp=1,process.env.NODE_ENV!=="production"&&function(){var e=O,t=Symbol.for("react.element"),n=Symbol.for("react.portal"),r=Symbol.for("react.fragm... L18: `+ae+K}}var ie=!1,le;{var G=typeof WeakMap=="function"?WeakMap:Map;le=new G}function te(K,Pe){if(!K||ie)return"";{var Fe=le.get(K);if(Fe!==void 0)return Fe}var Be;ie=!0;var at=Erro... ... L20: `),xt=ut.length-1,At=Bt.length-1;xt>=1&&At>=0&&ut[xt]!==Bt[At];)At--;for(;xt>=1&&At>=0;xt--,At--)if(ut[xt]!==Bt[At]){if(xt!==1||At!==1)do if(xt--,At--,At<0||ut[xt]!==Bt[At]){var We... L21: `+ut[xt].replace(" at new "," at ");return K.displayName&&We.includes("<anonymous>")&&(We=We.replace("<anonymous>",K.displayName)),typeof K=="function"&&le.set(K,We),We}while(xt>=1... L22: ... L59: * limitations under the License. L60: */const Np=function(e){const t=[];let n=0;for(let r=0;r<e.length;r++){let a=e.charCodeAt(r);a<128?t[n++]=a:a<2048?(t[n++]=a>>6|192,t[n++]=a&63|128):(a&64512)===55296&&r+1<e.length&... L61: * @license ... L374: * limitations under the License. L375…
Critical
Trigger Reachable Dangerous Capability

A package entrypoint or install-time lifecycle script reaches a source file with blocking dangerous behavior.

dist/lystech-core-provider.umd.jsView on unpkg · L16
1727patternName = google_api_key severity = high line = 1727 matchedText = }`;funct...nce.
High
High Secret

Package contains a high-severity secret pattern.

dist/lystech-core-provider.umd.jsView on unpkg · L1727
1727patternName = google_api_key severity = high line = 1727 matchedText = }`;funct...nce.
High
Secret Pattern

Google API key in dist/lystech-core-provider.umd.js

dist/lystech-core-provider.umd.jsView on unpkg · L1727
dist/lystech-core-provider.es.jsView file
path = dist/lystech-core-provider.es.js kind = oversized_source_file sizeBytes = 2506159 magicHex = [redacted]
High
Oversized Source File

Package contains source files above the static scanner size ceiling.

dist/lystech-core-provider.es.jsView on unpkg
bin/attach.cjsView file
matchType = normalized_sha256 matchedPackage = @lystech/core@3.0.87 matchedPath = bin/attach.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.87 similarity = 1.000 summary = normalized source hash matched finalized malicious source
High
Known Malware Source Similarity

Source file is highly similar to a previously finalized malicious package; route for source-aware review.

bin/attach.cjsView on unpkg
bin/postinstall.cjsView file
matchType = normalized_sha256 matchedPackage = @lystech/core@3.0.87 matchedPath = bin/postinstall.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.87 similarity = 1.000 summary = normalized source hash matched finalized malicious source
High
Known Malware Source Similarity

Source file is highly similar to a previously finalized malicious package; route for source-aware review.

bin/postinstall.cjsView on unpkg
bin/setup-registry.cjsView file
matchType = normalized_sha256 matchedPackage = @lystech/core@3.0.87 matchedPath = bin/setup-registry.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.87 similarity = 1.000 summary = normalized source hash matched finalized malicious source
High
Known Malware Source Similarity

Source file is highly similar to a previously finalized malicious package; route for source-aware review.

bin/setup-registry.cjsView on unpkg

Findings

2 Critical7 High4 Medium5 Low
CriticalCredential Exfiltrationdist/lystech-core-provider.umd.js
CriticalTrigger Reachable Dangerous Capabilitydist/lystech-core-provider.umd.js
HighInstall Time Lifecycle Scriptspackage.json
HighHigh Secretdist/lystech-core-provider.umd.js
HighOversized Source Filedist/lystech-core-provider.es.js
HighKnown Malware Source Similaritybin/attach.cjs
HighKnown Malware Source Similaritybin/postinstall.cjs
HighKnown Malware Source Similaritybin/setup-registry.cjs
HighSecret Patterndist/lystech-core-provider.umd.js
MediumAmbiguous Install Lifecycle Scriptpackage.json
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowTelemetry
LowUrl Strings