workspace/skills/pyats-security/SKILL.md
Network security audit - ACLs, AAA, control plane policing, management plane hardening, encryption, port security, and CIS benchmark checks. Use when auditing device security posture, checking compliance, hardening a router or switch, reviewing access lists, or investigating unauthorized access.
npx skillsauth add automateyournetwork/netclaw pyats-securityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Always start by capturing the full running config for analysis:
PYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_show_running_config '{"device_name":"R1"}'
Scan the full config for the checks below.
Check these items in the running config:
| Check | What to Look For | Finding If Missing |
|-------|------------------|--------------------|
| SSH version | ip ssh version 2 | CRITICAL: SSHv1 vulnerable to MITM |
| Telnet disabled | No transport input telnet on VTY lines | CRITICAL: Telnet sends cleartext credentials |
| VTY ACL | access-class on VTY lines | HIGH: Unrestricted management access |
| Console timeout | exec-timeout on console (not 0 0) | MEDIUM: Unattended console sessions |
| VTY timeout | exec-timeout on VTY lines (not 0 0) | MEDIUM: Stale management sessions |
| Password encryption | service password-encryption | MEDIUM: Type 0 passwords visible |
| Enable secret | enable secret (not enable password) | HIGH: Enable password uses weak hash |
| Login banner | banner login or banner motd | LOW: Legal/compliance requirement |
| HTTP server disabled | no ip http server | MEDIUM: Unnecessary attack surface |
| HTTPS server | ip http secure-server if web management needed | MEDIUM: Use HTTPS not HTTP |
| Aux port disabled | no exec on aux line | LOW: Unused port open |
PYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"R1","command":"show aaa servers"}'
AAA checks in running config:
aaa new-model enabledaaa authentication login configured (not just local)aaa authorization exec configuredaaa accounting configured for commands and connectionsaaa authentication enable uses enable secret not enable passwordPYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"R1","command":"show ip access-lists"}'
ACL analysis:
permit ip any any)deny ip any any log)Check in running config for:
control-plane section with service-policyPYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"R1","command":"show policy-map control-plane"}'
OSPF authentication:
ip ospf authentication message-digest on interfacesarea X authentication message-digestip ospf message-digest-key is configuredBGP security:
neighbor X password (MD5 authentication)neighbor X ttl-security hops N (GTSM — Generalized TTL Security Mechanism)neighbor X prefix-list or neighbor X maximum-prefix (prefix limits)EIGRP authentication:
af-interface with authentication mode md5 and authentication key-chainip authentication mode eigrp and ip authentication key-chain eigrpCheck in running config:
| Feature | Config | Purpose |
|---------|--------|---------|
| uRPF | ip verify unicast source reachable-via rx | Anti-spoofing |
| TCP keepalives | service tcp-keepalives-in, service tcp-keepalives-out | Dead session cleanup |
| CDP restricted | no cdp enable on external interfaces | Information leak prevention |
| LLDP restricted | no lldp transmit / no lldp receive on external | Information leak prevention |
| IP source routing disabled | no ip source-route | Prevent source-routed attacks |
| Directed broadcast disabled | no ip directed-broadcast per interface | Smurf attack prevention |
| ICMP redirects disabled | no ip redirects per interface | MITM prevention |
| Proxy ARP disabled | no ip proxy-arp on external interfaces | ARP spoofing prevention |
| Gratuitous ARP | no ip gratuitous-arps | ARP cache poisoning prevention |
| IP unreachables limited | no ip unreachables on external | Reconnaissance prevention |
| Timestamps | service timestamps log datetime msec localtime | Forensics |
| Logging buffer | logging buffered with adequate size | Event capture |
| Remote logging | logging host X.X.X.X | Centralized log collection |
PYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"R1","command":"show crypto key mypubkey rsa"}'
Check:
PYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "${PYATS_PYTHON:-python3} -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"R1","command":"show snmp"}'
Checks:
Device: R1 | IOS-XE 17.x.x
Security Audit Date: YYYY-MM-DD
CRITICAL FINDINGS (Fix Immediately):
1. [C-001] SSHv1 enabled — upgrade to SSH version 2 only
2. [C-002] No VTY access-class — management plane exposed
HIGH FINDINGS (Fix This Week):
3. [H-001] No OSPF authentication on Gi1 — route injection risk
4. [H-002] SNMP community 'public' with no ACL
MEDIUM FINDINGS (Fix This Month):
5. [M-001] No CoPP policy — CPU vulnerable to floods
6. [M-002] HTTP server enabled — disable or restrict
LOW / INFORMATIONAL:
7. [L-001] No login banner configured
8. [I-001] CDP enabled globally (acceptable on internal interfaces)
Summary: 2 Critical | 2 High | 2 Medium | 2 Low
When ISE is available ($ISE_MCP_SCRIPT is set), extend the security audit with identity verification:
Check that the device is registered in ISE as a Network Access Device:
ISE_BASE=$ISE_BASE USERNAME=$ISE_USERNAME PASSWORD=$ISE_PASSWORD python3 $MCP_CALL "python3 -u $ISE_MCP_SCRIPT" network_devices '{}'
Flags:
ISE_BASE=$ISE_BASE USERNAME=$ISE_USERNAME PASSWORD=$ISE_PASSWORD python3 $MCP_CALL "python3 -u $ISE_MCP_SCRIPT" active_sessions '{}'
Filter sessions for this device's IP to see authenticated endpoints.
After Step 1 (show version), extract the IOS-XE version and scan for known vulnerabilities:
python3 $MCP_CALL "npx -y nvd-cve-mcp-server" search_cves '{"keyword":"Cisco IOS XE 17.9.4","resultsPerPage":10}'
For each CVE found:
ip http server is configured)Severity mapping:
Run the full 9-step audit on ALL devices simultaneously using multiple exec commands. Aggregate findings across the fleet and sort by severity for prioritized remediation.
Record the security audit in GAIT:
python3 $MCP_CALL "python3 -u $GAIT_MCP_SCRIPT" gait_record_turn '{"input":{"role":"assistant","content":"Security audit on R1: 2 CRITICAL (no enable secret, telnet enabled), 2 HIGH, 2 MEDIUM, 2 LOW findings.","artifacts":[]}}'
tools
Zoom meeting intelligence — correlates a live or referenced Zoom meeting discussion against NetClaw's historical meeting record (via the official Zoom Meetings MCP) and today's actual network state. Use when someone in a Zoom meeting references a past discussion or incident ('didn't we have this issue before?'), or asks to search prior meetings for a topic. Does not itself recognize live in-meeting questions — that happens automatically inside zoom-rtms-mcp's own extractor (spec 118) before this skill is ever invoked.
tools
Manage Lantronix out-of-band (OOB) infrastructure via Percepxion central management platform: device inventory, serial port inspection via SLC CLI, firmware compliance, config management, security auditing, and closed-loop incident remediation. Use during outages, maintenance windows, compliance cycles, and AI-assisted automation workflows.
tools
Federate your NetClaw with other NetClaw operators over the BGP mesh — exchange capability inventories and ask your claw what a peer can do. (US1; remote invocation and chat land in later phases.)
tools
Track token consumption, enforce session budgets, and display cost for every NetClaw interaction.