Back to skill

Security audit

Sardis Guardrails

Security checks for vulnerabilities and agentic risk

Overview

This skill is coherent and disclosed, but it can control wallet-wide emergency stops and resumes without clear confirmation or scoping safeguards.

Review this before installing. Only use it with a Sardis API key that is limited to the intended wallets and permissions, and require explicit human approval before activating or deactivating the kill switch. Consider removing or pinning the npm SDK dependency if it is not needed.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:12
Finding
Unpinned and Unused Automatically Installed npm Dependency## Vulnerability Details **File Location**: `SKILL.md`, lines 12-15 **Vulnerability Type**: Unpinned third-party dependency and unnecessary supply-chain exposure **Risk Level**: Medium ```yaml install: npm: - "@sardis/sdk" ``` ### Technical Analysis The skill metadata directs the installation mechanism to install `@sardis/sdk` without specifying an exact version or package integrity hash. This allows the dependency resolver to retrieve a package release whose contents may change after the skill has been audited. The documented workflows use `curl` and `jq`; they do not reference this SDK. The dependency therefore introduces code beyond the demonstrated functional requirements. Depending on the package manager's configuration, the package or its transitive dependencies may execute npm lifecycle scripts during installation. This is a supply-chain risk rather than evidence that the current package is malicious. Exploitation requires the package, one of its transitive dependencies, or the package-distribution channel to become compromised or unexpectedly modified. ### Attack Path 1. A user or agent installs the skill and its metadata-declared dependencies. 2. The package manager resolves the current available version of `@sardis/sdk`, because no exact version or integrity constraint is provided. 3. The package manager downloads the package and its transitive dependencies from the configured registry. 4. npm lifecycle scripts may execute with the privileges of the account performing installation. 5. If a resolved package release or dependency is compromised, attacker-controlled code can execute on the local system. ### Impact Assessment Successful exploitation could execute code with the privileges of the installer. Depending on those privileges and the runtime environment, the compromised dependency could read accessible files and environment variables, including credentials, make outbound network requests, modify project or user files, or tamper wit ...[truncated 293 chars]
Remediation
## Remediation Suggestions 1. Remove the `@sardis/sdk` installation declaration if the skill continues to operate exclusively through the documented `curl` and `jq` workflows. 2. If the SDK is required by an undisclosed runtime integration, pin it to an exact reviewed version rather than a floating release. 3. Commit and enforce a lockfile containing registry-resolved integrity hashes for the package and its transitive dependencies. 4. Verify package provenance and registry configuration, and review the selected release and dependency tree before distribution. 5. Disable npm lifecycle scripts during installation where operationally possible, for example by using an installation policy equivalent to `--ignore-scripts`. 6. Install dependencies in a sandbox or container with minimal filesystem access, no unnecessary credentials, and restricted outbound networking. 7. Document the specific feature requiring the SDK so future reviewers can verify that the dependency remains necessary.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (18)

Vague Triggers

Medium
Confidence
88% confidence
Finding
The skill is marked user-invocable but does not define explicit activation constraints, approval requirements, or safe-use conditions despite exposing high-impact wallet control actions like kill-switch activation and deactivation. This ambiguity increases the chance that an agent or user triggers sensitive operational controls in an unsafe context or without proper confirmation.

External Transmission

Medium
Category
Data Exfiltration
Content
env:
        - SARDIS_API_KEY
      bins:
        - curl
        - jq
    primaryEnv: SARDIS_API_KEY
    emoji: "🛡️"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Endpoint Patterns

Base URL: `https://api.sardis.sh/v2`

### Check Circuit Breaker Status
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Emergency stop all transactions for a wallet
curl -X POST https://api.sardis.sh/v2/guardrails/kill-switch/activate \
  -H "Authorization: Bearer $SARDIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
94% confidence
Finding
This documented POST request activates an emergency kill switch for a wallet, which is a high-impact operational action capable of halting all transactions. Without built-in confirmation, authorization boundaries, or anti-misuse constraints in the skill, this state-changing external transmission is dangerous in an agentic environment.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Resume normal operations after investigation
curl -X POST https://api.sardis.sh/v2/guardrails/kill-switch/deactivate \
  -H "Authorization: Bearer $SARDIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
90% confidence
Finding
This POST request deactivates the kill switch and resumes wallet transactions, which can remove an emergency protection mechanism. If triggered without strong authorization or after an incomplete investigation, it could re-enable malicious or runaway spending.

External Transmission

Medium
Category
Data Exfiltration
Content
if [[ $(echo "$STATUS" | jq -r '.circuit_breaker.active') == "true" ]]; then
  echo "Circuit breaker already active!"

  curl -X POST https://api.sardis.sh/v2/guardrails/kill-switch/activate \
    -H "Authorization: Bearer $SARDIS_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"wallet_id\": \"$WALLET_ID\", \"reason\": \"Manual emergency stop\"}"
Confidence
93% confidence
Finding
This workflow combines a status check with a follow-on kill-switch activation request, enabling automated state changes based on shell-evaluated conditions. In the absence of robust safeguards, an agent could halt wallet operations unexpectedly or under attacker-influenced prompting, causing denial of service and operational disruption.

External Transmission

Medium
Category
Data Exfiltration
Content
if [[ $(echo "$STATUS" | jq -r '.circuit_breaker.active') == "true" ]]; then
  echo "Circuit breaker already active!"

  curl -X POST https://api.sardis.sh/v2/guardrails/kill-switch/activate \
    -H "Authorization: Bearer $SARDIS_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"wallet_id\": \"$WALLET_ID\", \"reason\": \"Manual emergency stop\"}"
Confidence
93% confidence
Finding
This workflow combines a status check with a follow-on kill-switch activation request, enabling automated state changes based on shell-evaluated conditions. In the absence of robust safeguards, an agent could halt wallet operations unexpectedly or under attacker-influenced prompting, causing denial of service and operational disruption.

External Transmission

Medium
Category
Data Exfiltration
Content
echo "Reason: $REASON"

  # Send notification (integrate with your alerting system)
  # curl -X POST https://your-webhook.com/alert -d "Circuit breaker active: $REASON"
fi
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.