registry  /  @lystech/core  /  3.0.91

@lystech/core@3.0.91

Lystech Core contains essentials for lystech apps

AI Security Review

scanned 13h ago · by lpm-firewall-ai

Installing the package triggers an unprompted write into the consuming repository. The installed workflow persists in .github/workflows, runs on pushes, and registers repository metadata with a third-party endpoint.

Static reason
High-risk behavior combination matched malicious policy.; source matched previously finalized malicious package; routed for review; source fingerprint signature matched known malicious package; routed for review
Trigger
npm install or any dependency installation executing postinstall
Impact
Unauthorized persistent CI configuration in consumer repositories and recurring disclosure of repository identity metadata.
Mechanism
install-time GitHub Actions workflow injection and external repository registration
Attack narrative
The package’s postinstall handler executes automatically in the consumer project, detects that project’s dependency manifest, and creates a GitHub Actions workflow without a user command or consent. That workflow activates on pushes, queries GitHub using the repository token, and posts repository metadata to a package-controlled DigitalOcean service. This creates persistent foreign-project CI behavior and external tracking from a dependency install.
Rationale
Source inspection confirms unconsented install-time mutation of consumer GitHub Actions configuration plus persistent external registration. The runtime bundle does not establish credential theft, but the lifecycle behavior itself is a concrete unauthorized persistence chain.
Evidence
package.jsonbin/postinstall.cjsbin/update-lystech-package.ymlbin/setup-github-action.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 97.0% confidence as Malware with low false-positive risk.
Evidence for block
  • package.json runs bin/postinstall.cjs on install.
  • bin/postinstall.cjs silently writes .github/workflows/sync-package-registry.yml in the consumer project.
  • The injected workflow runs on every push and calls an external DigitalOcean registry.
  • The workflow obtains repository metadata through GITHUB_TOKEN and transmits package, owner, repo, and repo ID externally.
  • bin/update-lystech-package.yml includes a write-permission workflow that installs a caller-selected package and deploys.
Evidence against
  • No source path reads or sends local credentials, SSH keys, npm tokens, or environment files.
  • The bundled runtime is a React/Firebase/UI library; its observed network hosts are application-service endpoints.
  • User-invoked bin/check-pwa.cjs only changes PWA files when --fix or --create is passed.
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

12 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 Mp;function j4(){return Mp||(Mp=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 ne(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 Pp=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 l6(e){bs(new oo("platform-logger",t=>new wO(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 Mp;function j4(){return Mp||(Mp=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 ne(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 Pp=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 = 2501832 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.88 matchedPath = bin/attach.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.88 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
matchType = malicious_source_fingerprint_signature signature = 595f1f22b762b63c signatureType = suspicious_hashes sourceLabel = final_verdict:malicious matchedPackage = @lystech/core@3.0.88 matchedPath = bin/attach.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.88 similarity = 1.000 shingleOverlap = 6 summary = package final verdict is malicious
High
Known Malware Source Fingerprint Signature

Source fingerprint signature matches a known malicious package signature; route for source-aware review.

bin/attach.cjsView on unpkg
bin/check-pwa.cjsView file
matchType = normalized_sha256 matchedPackage = @lystech/core@3.0.88 matchedPath = bin/check-pwa.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.88 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/check-pwa.cjsView on unpkg
bin/postinstall.cjsView file
matchType = normalized_sha256 matchedPackage = @lystech/core@3.0.88 matchedPath = bin/postinstall.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.88 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.88 matchedPath = bin/setup-registry.cjs matchedIdentity = npm:QGx5c3RlY2gvY29yZQ:3.0.88 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 Critical9 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/check-pwa.cjs
HighKnown Malware Source Similaritybin/postinstall.cjs
HighKnown Malware Source Similaritybin/setup-registry.cjs
HighKnown Malware Source Fingerprint Signaturebin/attach.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