---
canonical: "https://firewall.lpm.dev/npm/stellar-api-safe"
markdown: "https://firewall.lpm.dev/npm/stellar-api-safe/report.md"
package: "stellar-api-safe"
report_status: "published"
title: "stellar-api-safe@1.0.8 npm security report"
verdict: "malicious"
version: "1.0.8"
---

# stellar-api-safe@1.0.8 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** — Unconsented disclosure of Discord usernames, user IDs, and token-operation metadata to an external webhook.

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

After an explicit bot start, the package sends Discord user/activity metadata to a hard-coded third-party webhook. It also sends supplied refresh tokens to the configured backend as its stated refresh function.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Verdict:** Malicious
- **Confidence:** 90.0%
- **Started:** 2026-07-24T21:59:40.860Z
- **Finished:** 2026-07-24T22:00:35.448Z
- **Download time:** 502 ms
- **Static scan time:** 46 ms
- **AI review time:** 54039 ms
- **Total time:** 54588 ms

## Security analysis

### Published attack-surface review

- **Summary:** After an explicit bot start, the package sends Discord user/activity metadata to a hard-coded third-party webhook. It also sends supplied refresh tokens to the configured backend as its stated refresh function.

- **Trigger:** Consumer instantiates StellarBot and calls start(); Discord token commands or refresh events then occur.

- **Impact:** Unconsented disclosure of Discord usernames, user IDs, and token-operation metadata to an external webhook.

- **Evidence paths:** package.json, index.js, README.md

- **Review source:** ai\_review

- **Reviewed:** 2026-07-24T22:00:35.448Z

### AI review details

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

- **Mechanism:** hard-coded webhook telemetry of token-management activity

- **Attack narrative:** The exported bot must be explicitly started, then accepts user tokens and refresh tokens. Although refresh requests go to the consumer-configured backend, every add/delete/refresh/failure event is also posted to an embedded Discord webhook controlled outside the consumer's configuration. Those posts disclose user identifiers and token-management activity without a way for the consumer to select or disable the recipient.

- **Rationale:** Source inspection confirms a concrete, externally directed metadata-exfiltration channel rather than only scanner heuristics. It is runtime-gated but uses a hard-coded recipient unrelated to required bot configuration.

- **Files touched:** data/\<userId\>\_token.json

- **Network endpoints:** https://discord.com/api/webhooks/1527807036350398687/3sPFiOKr2BotMU2y3-ZRXkdosQ4zkoF\_ZazcKCFXrMztR-Toducmm1L2xN7ezS3Vn806, ${config.apiUrl}/refresh

### Review decision

- **Verdict:** Malicious

- **Confidence:** 90.0%

- **Recommended action:** publish\_block

- **Intent class:** Malware

- **False-positive risk:** Low

- **Evidence for:** index.js hard-codes an external Discord webhook., Runtime posts user names/IDs and token-operation events to that webhook., The webhook destination is not configurable by the package consumer., README documents logging but not the hard-coded third-party recipient.

- **Evidence against:** package.json has no lifecycle scripts., Import only defines and exports StellarBot; execution requires bot.start()., Refresh tokens are sent only to the consumer-supplied apiUrl as stated bot functionality., No shell execution, dynamic code loading, or environment harvesting found.

## Public findings

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

Package source references network APIs.

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

Package source references filesystem APIs.

### 3. Critical: Credential Exfiltration
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** index.js
- **Public source:** [View source](<https://unpkg.com/stellar-api-safe@1.0.8/index.js>)

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

Public source snippet (untrusted):

```javascript
L14: const path = require('path');
L15: const axios = require('axios');
L16: 
...
L37: 
L38: this.dataDir = path.join(process.cwd(), 'data');
L39: if (!fs.existsSync(this.dataDir)) fs.mkdirSync(this.dataDir, { recursive: true });
...
L46: logToServerWebhook(message) {
L47: // axios.post(this.serverWebhook, { content: message }).catch(() => {});
L48: }
...
L189: await interaction.deferReply({ ephemeral: true });
L190: const oldData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
L191: const result = await this.callBackendAPI(oldData.refresh_token);
```

### 4. Critical: Trigger Reachable Dangerous Capability
- **Category:** Source
- **Confidence:** 90.0%
- **Path:** index.js
- **Public source:** [View source](<https://unpkg.com/stellar-api-safe@1.0.8/index.js>)

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

Public source snippet (untrusted):

```javascript
Trigger-reachable chain: manifest.main -> index.js
L14: const path = require('path');
L15: const axios = require('axios');
L16: 
...
L37: 
L38: this.dataDir = path.join(process.cwd(), 'data');
L39: if (!fs.existsSync(this.dataDir)) fs.mkdirSync(this.dataDir, { recursive: true });
...
L46: logToServerWebhook(message) {
L47: // axios.post(this.serverWebhook, { content: message }).catch(() => {});
L48: }
...
L189: await interaction.deferReply({ ephemeral: true });
L190: const oldData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
L191: const result = await this.callBackendAPI(oldData.refresh_token);
```

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

Package source contains high-entropy string patterns.

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

Package source contains URL literals.

### 7. Medium: Structural Risk Force Deep Review
- **Category:** Artifact Inventory
- **Confidence:** 70.0%

Artifact structure forces deeper review even if the static behavioral verdict is clean.

### 8. Low: No License
- **Category:** Manifest
- **Confidence:** 80.0%

Package manifest does not declare a clear license.

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

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

### Published dependency entries
- axios ^1.7.2 (Dependency)
- discord.js ^14.15.3 (Dependency)
- stellar-api-core ^1.0.0 (Dependency)

## Package metadata
- **Package:** stellar-api-safe
- **Ecosystem:** npm
- **Version:** 1.0.8
- **Version published:** 2026-07-23T20:58:39.481Z
- **Package first seen:** 2026-07-24T22:00:35.448Z
- **Package last seen:** 2026-07-24T22:00:35.448Z
- **Known versions:** 1
- **Latest version:** 1.0.8
- **Appeal under review:** No
- **Description:** The official Stellar API wrapper for Nakama token management bots.
- **Artifact files:** 3
- **Artifact unpacked size:** 15,659 bytes
- **Artifact signatures:** 1
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/stellar-api-safe>)
