---
canonical: "https://firewall.lpm.dev/npm/soajs.controller"
markdown: "https://firewall.lpm.dev/npm/soajs.controller/v/4.3.18.md"
package: "soajs.controller"
report_status: "published"
title: "soajs.controller@4.3.18 npm security report"
verdict: "malicious"
version: "4.3.18"
---

# soajs.controller@4.3.18 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Blocked & quarantined** — The fixed recipient can receive a cluster credential and potentially use it to access the cluster.

- **Verdict:** Malicious
- **Product-default install policy:** Block
- **Firewall policy:** Matched malicious
- **Public report status:** Published
- **Threat category:** Credential Exfiltration
- **Selected version:** 4.3.18
- **Selected version is latest:** No
- **Analysis source:** AI Security Review (lpm-firewall-ai)

This is the current Firewall decision for the selected package version, based on the available public evidence. Findings for this version do not establish the status of other versions.

AI assessment: malicious; recommendation: publish block. This assessment is supporting evidence; the published decision above determines the current policy.

The active awareness path supplies a registry cluster token to the Kubernetes driver, whose CA branch directs authenticated API requests to a fixed unrelated endpoint. This is concrete credential exposure without recipient-specific consent, so the package should be blocked.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Recorded final verdict:** Malicious
- **Recorded analysis confidence:** 95.0%
- **Started:** 2026-10-19T13:39:21.566Z
- **Finished:** 2026-10-19T13:41:01.497Z
- **Download time:** 1281 ms
- **Static scan time:** 1744 ms
- **AI review time:** 96906 ms
- **Total time:** 99931 ms

The recorded confidence comes from the underlying analysis. Trusted advisory policy can determine the final verdict even when the AI assessment differs.

## Security analysis

### Published attack-surface review

- **Summary:** The Kubernetes driver can send a registry-provided cluster token to a fixed plaintext endpoint when CA settings are used. The source does not bind that endpoint to the configured cluster URL or require consent for that recipient.

- **Trigger:** Run the service in high-availability Kubernetes mode with CA settings whose request options do not already specify authentication.

- **Impact:** The fixed recipient can receive a cluster credential and potentially use it to access the cluster.

- **Evidence paths:** mw/awareness/index.js, mw/awareness/ha.js, modules/driver/kubernetes/model/lib.js, modules/driver/kubernetes/model/index.js, modules/driver/kubernetes/bl/get.js

- **Review source:** ai\_review

- **Reviewed:** 2026-10-19T13:41:01.497Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** The driver creates the CA-backed client from a package-fixed cluster address and adds the supplied token as bearer authentication before Kubernetes API requests.

- **Attack narrative:** In high-availability Kubernetes mode, the service loads a cluster token and configured URL from registry settings. With CA settings and no authentication already set in the CA request options, the driver instead builds its client for http://server.com and attaches that token as bearer authentication. The awareness workflow then makes Kubernetes API requests through the client, exposing the credential to a package-selected recipient.

- **Rationale:** The active awareness path supplies a registry cluster token to the Kubernetes driver, whose CA branch directs authenticated API requests to a fixed unrelated endpoint. This is concrete credential exposure without recipient-specific consent, so the package should be blocked.

- **Files touched:** mw/awareness/index.js, mw/awareness/ha.js, modules/driver/kubernetes/model/lib.js, modules/driver/kubernetes/model/index.js, modules/driver/kubernetes/bl/get.js

- **Network endpoints:** http://server.com

### Review decision

- **Verdict:** Malicious

- **Confidence:** 95.0%

- **Recommended action:** publish\_block

- **Intent class:** Malware

- **False-positive risk:** Low

- **Evidence for block:** In high-availability mode, awareness initializes the Kubernetes driver and loads configuration selected for Kubernetes from the registry., That configuration supplies the cluster token and intended URL, and the awareness workflow invokes Kubernetes API operations with it., When CA settings are present, the driver builds its backend using the fixed address http://server.com instead of the supplied URL., If the CA request options lack authentication, the driver inserts the supplied token as bearer authentication., The awareness workflow uses this client for Kubernetes API requests, so the fixed recipient can receive the cluster credential., The helper requires a namespace, token, and URL, then copies the token and supplied URL into the driver configuration.

- **Evidence against:** The exposure is conditional on the high-availability Kubernetes path, CA settings, and request options without existing authentication; the manifest has no install lifecycle hook.

## Affected versions and remediation

This report applies to soajs.controller@4.3.18.

- Avoid installing soajs.controller@4.3.18. Remove it from direct dependencies and check your lockfile for transitive copies.
- Choose an independently verified alternative or release. This report does not establish that other versions are safe.
- If this version ran, investigate the affected machine and build environment. Rotate credentials it could access and rebuild from a trusted environment.

## Public findings

### 1. Low: Scripts Present
- **Category:** Manifest
- **Confidence:** 100.0%

Package declares npm scripts.

### 2. Medium: Secret Pattern
- **Category:** Secrets
- **Confidence:** 75.0%
- **Path:** test/unit/mw/key/index.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/test/unit/mw/key/index.js>)

Package contains a possible secret pattern.

Public source snippet (untrusted):

```javascript
patternName = generic_password
severity = medium
line = 17
```

### 3. Medium: Dynamic Require
- **Category:** Source
- **Confidence:** 75.0%
- **Path:** Gruntfile.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/Gruntfile.js>)

Package source references dynamic require/import behavior.

Public source snippet (untrusted):

```javascript
L10: 
L11: const fs = require('fs');
L12: const path = require('path');
```

### 4. Low: Weak Crypto
- **Category:** Source
- **Confidence:** 64.0%
- **Path:** mw/cache/index.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/mw/cache/index.js>)

Package source references weak cryptographic algorithms.

Public source snippet (untrusted):

```javascript
L112: // Public APIs (no access_token required) return the same response for the whole
L113: // tenant, so they are cached per tenant ("tenant"). Private APIs may return a
L114: // different response per logged-in user, so they must be cached per tenant + user
...
L151: res.writeHead(cached.response.statusCode, cached.response.headers);
L152: res.end(cached.response.body);
L153: return;
```

### 5. Medium: Network
- **Category:** Source
- **Confidence:** 75.0%

Package source references network APIs.

### 6. Medium: Environment Vars
- **Category:** Source
- **Confidence:** 75.0%

Package source references environment variables.

### 7. Low: Filesystem
- **Category:** Source
- **Confidence:** 70.0%

Package source references filesystem APIs.

### 8. Low: High Entropy Strings
- **Category:** Supply Chain
- **Confidence:** 55.0%

Package source contains high-entropy string patterns.

### 9. Low: Url Strings
- **Category:** Supply Chain
- **Confidence:** 65.0%

Package source contains URL literals.

### 10. Medium: Secret Pattern
- **Category:** Secrets
- **Confidence:** 75.0%
- **Path:** test/unit/mw/key/index.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/test/unit/mw/key/index.js>)

Hardcoded password in test/unit/mw/key/index.js

Public source snippet (untrusted):

```javascript
patternName = generic_password
severity = medium
line = 178
```

### 11. Medium: Secret Pattern
- **Category:** Secrets
- **Confidence:** 75.0%
- **Path:** test/data/provision/urac/users/owner.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/test/data/provision/urac/users/owner.js>)

Hardcoded password in test/data/provision/urac/users/owner.js

Public source snippet (untrusted):

```javascript
patternName = generic_password
severity = medium
line = 6
```

### 12. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 95.0%
- **Path:** mw/awareness/index.js
- **Public source:** [View source](<https://unpkg.com/soajs.controller@4.3.18/mw/awareness/index.js>)

In high-availability mode, awareness initializes the Kubernetes driver and loads configuration selected for Kubernetes from the registry.

Public source snippet (untrusted):

```javascript
if (param.awareness) {
			if (!process.env.SOAJS_DEPLOY_HA) {
				driver = require("./custom.js");
				driver.init(param);
			}
			else {
				driver = require("./ha.js");
				infraModule.init();
				param.infraModule = infraModule;
				if (!param.doNotRebuildCache) {
					driver.init(param);
				}
			}
		}
		return function (req, res, next) {
			if (param.
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** No

- **Dependencies:** 14
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 19
- **Published dependency-graph edges:** 14

### Published dependency entries
- async 3.2.6 (Dependency)
- connect 3.7.0 (Dependency)
- http-proxy 1.18.1 (Dependency)
- jsonwebtoken 9.0.3 (Dependency)
- kubernetes-client 9.0.0 (Dependency)
- lodash 4.18.1 (Dependency)
- merge 2.1.1 (Dependency)
- netmask 2.1.1 (Dependency)
- oauth2-server 2.4.1 (Dependency)
- path-to-regexp 8.4.2 (Dependency)
- soajs.core.libs 1.2.2 (Dependency)
- soajs.core.modules 5.2.21 (Dependency)
- soajs.urac.driver 3.2.18 (Dependency)
- useragent 2.3.0 (Dependency)

## Package metadata
- **Package:** soajs.controller
- **Ecosystem:** npm
- **Version:** 4.3.18
- **License:** Apache-2.0
- **Version published:** 2026-10-19T13:36:59.783Z
- **Package first seen:** 2026-07-02T13:09:33.565Z
- **Package last seen:** 2026-10-22T15:36:33.267Z
- **Known versions:** 9
- **Latest version:** 4.3.21
- **Appeal under review:** No
- **Description:** soajs multi tenant API gateway
- **Author:** soajs team
- **Runtime engines:** node: \*
- **Artifact files:** 201
- **Artifact unpacked size:** 5,501,711 bytes
- **Artifact signatures:** 2
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/soajs.controller/v/4.3.18>)
- [Homepage](<https://github.com/soajs/soajs.controller#readme>)
- [Issues](<https://github.com/soajs/soajs.controller/issues>)
