Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/automateyournetwork-pyats-security/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 585% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 204% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 228% | 0% |
Always start by capturing the full running config for analysis:
bashPYATS_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 |
bashPYATS_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 passwordbashPYATS_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-policybashPYATS_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 |
bashPYATS_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:
bashPYATS_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 LowWhen 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:
bashISE_BASE=$ISE_BASE USERNAME=$ISE_USERNAME PASSWORD=$ISE_PASSWORD python3 $MCP_CALL "python3 -u $ISE_MCP_SCRIPT" network_devices '{}'
Flags:
bashISE_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:
bashpython3 $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:
bashpython3 $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":[]}}'
Other measured skills in the registry, with their headline benchmark lift.