Back to skill

Security audit

Aruba Iap Publish

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with Aruba IAP administration, but it has high-impact network-management powers and several unsafe credential, installation, and artifact-handling behaviors that users should review before installing.

Install only in a controlled admin environment after reviewing the code. Prefer SSH keys with host-key verification, avoid --ssh-password and plaintext secrets.json for real credentials, keep output directories private, do not commit generated backups/diff/apply artifacts, and avoid running install.sh until the global wrapper overwrite and dependency-pinning issues are addressed.

Vulnerability Patterns
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (6)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/config_backup.py:15
Finding

OS Command Injection Through Shell-Interpolated SSH Parameters

Content
View full analysis
str: """Execute command on IAP via SSH""" try: cmd = f'echo "{self.password}" | sshpass -p stdin ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 {self.username}@{self.ap_ip} "{command}"' result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=60) return result.stdout ``` `scripts/diagnose_iap.py:16-27`: ```python def __init__(self, ap_ip: str, username: str = "aruba", password: str = "aruba123"): self.ap_ip = ap_ip self.username = username self.password = password self.ssh_cmd = f"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 {self.username}@{self.ap_ip}" def run_ssh_command(self, command: str) -> str: """Execute command on IAP via SSH""" try: # Use sshpass for password authentication if available cmd = f'echo "{self.password}" | sshpass -p stdin ssh {self.username}@{self.ap_ip} "{command}"' result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30) return result.stdout ``` `scripts/monitor_clients.py:17-29`: ```python def __init__(self, ap_ip: str, username: str = "aruba", password: str = "aruba123"): self.ap_ip = ap_ip self.username = username self.password = password def run_ssh_command(self, command: str) -> str: """Execute command on IAP via SSH""" try: cmd = f'echo "{self.password}" | sshpass -p stdin ssh -o StrictHostKeyCh ...[truncated 2400 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
iapctl/src/iapctl/diff_engine.py:288
Finding

Resolved Network Secrets Are Persisted in Plaintext Audit Artifacts

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
iapctl/src/iapctl/connection.py:45
Finding

SSH Host-Key Verification Is Disabled for Device Management

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/auto-backup.sh:17
Finding

Sensitive Configuration and Client Backups Lack Enforced Access Controls

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
iapctl/pyproject.toml:6
Finding

Installation Uses Mutable, Unhashed Third-Party Dependencies

Content
View full analysis
=0.12.0", "pydantic>=2.0.0", "scrapli>=2024.1.0", "rich>=13.0.0", ] ``` ### Technical Analysis The installer retrieves dependencies from the configured Python package index without exact version pins, hashes, or a lock file. Minimum-version constraints permit newly released versions and changing transitive dependency graphs. Python package installation may execute build-backend code. Consequently, compromise of an accepted package release, package-index configuration, dependency account, or transitive dependency can turn installation into local code execution. No evidence was found that the named dependencies are currently malicious. The vulnerability is the absence of reproducible and integrity-verified dependency resolution. ### Attack Path 1. An operator runs `install.sh`. 2. `pip` resolves the newest versions satisfying the broad constraints. 3. A compromised, malicious, or unexpectedly changed release is selected from the configured index. 4. Package build or installation code runs under the installer’s account. 5. The installed package subsequently executes inside a network-management tool with access to device credentials and configuration data. ### Impact Assessment Malicious dependency code would execute with the privileges of the user running installation or invoking `iapctl`. It could potentially access: - Environment variables and secret files. - SSH configuration and keys available to the account. - Aruba credentials passed to the application. - Generated configurations and backup art ...[truncated 154 chars]
Remediation
View remediation

T07 · Tool Hijacking and Spoofing

Warning
Location
install.sh:26
Finding

Installer Unconditionally Replaces a Global Command Wrapper

Content
View full analysis
/opt/homebrew/bin/iapctl << WRAPPEREOF #!/bin/bash # Wrapper script for iapctl source "$VENV_DIR/bin/activate" python -m iapctl.cli "\$@" WRAPPEREOF # Make wrapper executable chmod +x /opt/homebrew/bin/iapctl # Create symlink to venv ln -sf "$VENV_DIR" /opt/homebrew/iapctl-venv ``` ### Technical Analysis The installer writes directly to `/opt/homebrew/bin/iapctl` and forcibly replaces `/opt/homebrew/iapctl-venv`. It does not: - Check whether either path already exists. - Verify current ownership or expected content. - Ask for confirmation before replacement. - Use an atomic, rollback-safe installation process. - Default to a user-local installation directory. Because `/opt/homebrew/bin` commonly appears in users’ executable search paths, overwriting `iapctl` changes which code executes when any affected user invokes that command. This is not a covert persistence mechanism, but it is an unsafe tool-replacement behavior that exceeds the minimum scope needed for a project-local Python virtual environment. ### Attack Path 1. A user runs the installer with permission to write under `/opt/homebrew`. 2. An existing `iapctl` executable is present at `/opt/homebrew/bin/iapctl`. 3. The redirection truncates and replaces the existing executable without warning. 4. The forced symlink operation replaces any existing object at `/opt/homebrew/iapctl-venv`. 5. Subsequent invocations of `iapctl` through the system path execute this project’s wrapper. 6. Other users relying on that path may unknowingly execute the replacement. ### Impact Assessment The direct impact is command spoofing/replacement and loss of the previous installation. The replacement executes with the privileges of whoever late ...[truncated 266 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (80)

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

The documentation explicitly instructs users to create a secrets.json file containing plaintext credentials. Even though this is framed as secret management, it normalizes local plaintext storage of network authentication material, which is risky in a tool that manages infrastructure devices.

Content

Scanner excerpt · README.md (reported line 174)May include surrounding context.

Load Secrets from File

Create secrets.json:

json
{

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The code is clearly related to Aruba IAP management, so the general domain matches the description. It implements SSH connectivity, command execution, device discovery-style queries, WLAN listing, radio info retrieval, mode detection, and interactive configuration changes with save/commit support. However, several prominently declared capabilities are not present in this code chunk: there is no baseline capture, rollback mechanism, or explicit configuration snapshot management, and health monitoring is limited to simple status/info retrieval rather than monitoring logic. Additionally, the code can make persistent configuration changes via 'configure terminal', 'write memory', and 'commit apply', which is a significant operational capability not reflected in the empty declared permissions. Because the description materially overstates some major features while omitting the practical write capability from permissions, this is a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The code is clearly within the domain of Aruba IAP configuration management, so the overall topic aligns. It supports rollback command generation, SSID-related changes, secret resolution/redaction metadata, command export, and risk assessment. However, several declared capabilities are absent from this code chunk. Most notably, the advertised diff/baseline behavior is overstated here: diff_config accepts current_config but does not inspect or compare it, so it is not a real configuration diff engine in practice. Also, there is no implementation of automatic baseline capture, device discovery, configuration snapshots, health monitoring, or interactive config mode in the supplied code. Because the description presents a broader and partly inaccurate set of capabilities than this code actually performs, this chunk should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The code is narrowly focused on health monitoring and telemetry gathering. It opens an IAP connection and issues numerous read-only 'show' commands, then stores outputs as artifacts. That partially aligns with the 'health monitoring' and perhaps 'configuration snapshots' portions of the description, since it captures 'show configuration' output. However, the declared purpose emphasizes comprehensive configuration management with rollback, discovery, SSID management, and safe interactive configuration changes, none of which are present in this code chunk. There is no evidence of entering configuration mode, modifying device state, managing SSIDs, discovering devices, or maintaining rollback baselines. Therefore the description materially overstates and misrepresents the actual behavior of this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a comprehensive Aruba IAP configuration-management capability. The supplied code chunk, however, is only a test/debug script for connection parameter handling. It imports IAPConnection, tries two constructor scenarios, and prints success or exception details. This is materially different from the described primary purpose and does not implement the listed management features in the provided chunk. While the code is related to Aruba/IAP connectivity, the actual behavior shown is limited to debugging connection initialization, so the description does not accurately represent this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The code chunk is narrowly focused on taking and organizing configuration snapshots/backups. It calls an external snapshot tool, verifies output, copies the running config, generates metadata and restore guidance, and reports simple counts from backup files. While this aligns with the 'baseline capture' and 'configuration snapshots' portion of the description, it does not implement several other prominently declared features. In particular, there is no device discovery workflow, no health monitoring logic, no SSID management, no interactive configuration mode, and no actual rollback mechanism beyond a text file describing possible restore steps. Because the declared description presents a much broader configuration-management skill than the code actually provides, this is a material description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The code only performs backup/export of existing device information and configuration via SSH. It does not modify configuration, manage SSIDs, discover devices, monitor health, capture baselines beyond simple file backups, or provide rollback functionality. Its actual primary purpose is configuration/system/client information backup, which is substantially narrower than the declared comprehensive configuration management description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a full configuration-management tool for Aruba IAPs, including making safe changes, capturing baselines, rollback, discovery, snapshots, and SSID management. The supplied code does not implement those capabilities. It only accepts a target IP/credentials, pings the device, SSHes to it, runs diagnostic 'show' commands, parses outputs, and prints health-style information. Its primary purpose is diagnostics/health checking, not configuration management. This is a material description-behavior mismatch. Additionally, the code performs network access via ping and SSH with credentials, which is inconsistent with the empty declared permissions, though the main mismatch is the substantially different functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a broad Aruba IAP configuration-management skill, but the supplied code is a narrow monitoring script for connected wireless clients. It does not manage configurations, capture baselines, perform rollbacks, discover devices, manage SSIDs, or provide interactive configuration functionality. Its primary behavior is to SSH to a specified AP, run a read-only client listing command, parse client details, and optionally track count changes over time. This is a materially different primary purpose from the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The supplied code chunk is narrowly focused on monitoring. It builds and executes an iapctl monitor-cmd command, optionally passes an SSH password, checks for a generated result.json, prints errors/warnings, and derives simple health indicators from raw monitoring outputs. This aligns only with the 'health monitoring' portion of the description. The declared purpose emphasizes comprehensive configuration management features—baseline capture, rollback, snapshots, SSID management, discovery, and interactive configuration changes—which are not present in this code chunk. Because the code’s actual primary behavior is substantially narrower and lacks the major advertised configuration-management capabilities, the description does not accurately represent this code chunk.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 52)May include surrounding context.

md
./install.sh

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 217)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 324)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/CONFIG-CHANGES.md (reported line 271)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/CONFIG-CHANGES.md (reported line 286)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/CONFIG-CHANGES.md (reported line 341)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/CONFIG-CHANGES.md (reported line 560)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/QUICK-REFERENCE.md (reported line 156)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/QUICKSTART-CONFIG.md (reported line 231)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/QUICKSTART-CONFIG.md (reported line 268)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · docs/QUICKSTART-CONFIG.md (reported line 399)May include surrounding context.

md
| Error | Solution |
|-------|----------|
| `Failed to resolve secret_ref` | Check `secrets.json` or environment variables |
| `Command failed` | Check `apply/apply_step_XXX.txt` for details |
| `Risk level: high` | Break changes into smaller batches |
| `Rollback failed` | Manual intervention, restore from backup |

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The troubleshooting section advises cat secrets.json, which can directly print stored credentials to the terminal, logs, screen recordings, or shared support sessions. In the context of Aruba IAP administration, exposed RADIUS secrets or WLAN PSKs could enable unauthorized network access or compromise downstream systems.

Content

Scanner excerpt · docs/QUICKSTART-CONFIG.md (reported line 388)May include surrounding context.

Check secrets file or environment variables:

bash
echo $RADIUS_PRIMARY_KEY
cat secrets.json

Risk Level Too High

Possible Typosquatting: 'scrapli' resembles popular package 'scrapy'

High
Category
Supply Chain
Confidence
70% confidence
Finding

Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · install.sh (reported line 44)May include surrounding context.

sh
echo "✅ iapctl installed successfully!"
echo ""
echo "📌 Location: /opt/homebrew/bin/iapctl"
echo "🧹 To uninstall: rm /opt/homebrew/bin/iapctl /opt/homebrew/iapctl-venv"
echo ""
echo "🚀 Quick start:"
echo "  iapctl discover --cluster test-iap --vc 192.168.20.56 --out ./out"

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The troubleshooting guidance suggests a factory reset without any warning that it can erase configuration, remove provisioning, and cause major service disruption. In the context of Aruba IAP management, this is especially dangerous because it can sever cluster membership and require full reprovisioning of production APs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.