Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure and execute authenticated vulnerability scans using OpenVAS/Greenbone Vulnerability Management with SSH and SMB credentials for comprehensive host-level assessment.
.claude/skills/performing-authenticated-scan-with-openvas/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 216% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 146% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 219% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 168% | 0% |
OpenVAS (Open Vulnerability Assessment Scanner) is the scanner component of the Greenbone Vulnerability Management (GVM) framework. Authenticated scans use valid credentials (SSH for Linux, SMB for Windows, ESXi for VMware) to log into target systems, enabling detection of local vulnerabilities, missing patches, and misconfigurations that unauthenticated scans cannot identify. Authenticated scans typically find 10-50x more vulnerabilities than unauthenticated scans.
bash# Install GVM package sudo apt update && sudo apt install -y gvm # Run initial setup (creates admin account, syncs feeds) sudo gvm-setup # Check installation status sudo gvm-check-setup # Start all GVM services sudo gvm-start # Access Greenbone Security Assistant at https://127.0.0.1:9392
bash# Pull Greenbone Community Edition containers docker pull greenbone/gvm:stable # Run with docker-compose curl -fsSL https://greenbone.github.io/docs/latest/_static/docker-compose-22.4.yml \ -o docker-compose.yml # Start the stack docker compose -f docker-compose.yml -p greenbone-community-edition up -d # Wait for feed sync (initial sync takes 15-30 minutes) docker compose -f docker-compose.yml -p greenbone-community-edition \ logs -f gvmd 2>&1 | grep -i "feed"
bash# Using gvm-cli to create SSH credential with key-based auth gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_credential> <name>Linux SSH Key</name> <type>usk</type> <login>scan_user</login> <key> <private><![CDATA['"$(cat /home/scan_user/.ssh/id_rsa)"']]></private> <phrase>key_passphrase</phrase> </key> </create_credential>' # SSH credential with password authentication gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_credential> <name>Linux SSH Password</name> <type>up</type> <login>scan_user</login> <password>scan_password_here</password> </create_credential>'
bash# Create SMB credential for Windows authenticated scanning gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_credential> <name>Windows SMB Cred</name> <type>up</type> <login>DOMAIN\scan_account</login> <password>smb_password_here</password> </create_credential>'
bash# Create ESXi credential for VMware host scanning gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_credential> <name>ESXi Root</name> <type>up</type> <login>root</login> <password>esxi_password_here</password> </create_credential>'
bash# Create target with SSH credential (Linux hosts) gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_target> <name>Linux Production Servers</name> <hosts>192.168.1.10,192.168.1.11,192.168.1.12</hosts> <port_list id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5"/> <ssh_credential id="CREDENTIAL_UUID_HERE"> <port>22</port> </ssh_credential> <alive_test>ICMP, TCP-ACK Service and ARP Ping</alive_test> </create_target>' # Create target with SMB credential (Windows hosts) gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_target> <name>Windows Domain Controllers</name> <hosts>192.168.1.20,192.168.1.21</hosts> <port_list id="33d0cd82-57c6-11e1-8ed1-406186ea4fc5"/> <smb_credential id="SMB_CREDENTIAL_UUID_HERE"/> <alive_test>ICMP, TCP-ACK Service and ARP Ping</alive_test> </create_target>'
| Config Name | OID | Use Case | |------------|-----|----------| | Full and fast | daba56c8-73ec-11df-a475-002264764cea | Standard production scan | | Full and deep | 708f25c4-7489-11df-8094-002264764cea | Thorough scan, may be disruptive | | System Discovery | 8715c877-47a0-438d-98a3-27c7a6ab2196 | Host and service enumeration |
bash# Clone "Full and fast" config and customize gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_config> <copy>daba56c8-73ec-11df-a475-002264764cea</copy> <name>Authenticated Full Scan</name> </create_config>'
bash# Create scan task gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_task> <name>Weekly Authenticated Scan - Linux Prod</name> <config id="CONFIG_UUID"/> <target id="TARGET_UUID"/> <scanner id="08b69003-5fc2-4037-a479-93b440211c73"/> </create_task>' # Start the scan task gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<start_task task_id="TASK_UUID"/>' # Check scan progress gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<get_tasks task_id="TASK_UUID"/>'
bash# Create weekly schedule (every Sunday at 2:00 AM UTC) gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<create_schedule> <name>Weekly Sunday 2AM</name> <icalendar> BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART:20240101T020000Z RRULE:FREQ=WEEKLY;BYDAY=SU DURATION:PT12H END:VEVENT END:VCALENDAR </icalendar> <timezone>UTC</timezone> </create_schedule>'
bash# Export scan report as XML gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<get_reports report_id="REPORT_UUID" format_id="a994b278-1f62-11e1-96ac-406186ea4fc5"/>' # Export as CSV gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<get_reports report_id="REPORT_UUID" format_id="c1645568-627a-11e3-a660-406186ea4fc5"/>' # Use python-gvm for programmatic access python3 -c " from gvm.connections import UnixSocketConnection from gvm.protocols.gmp import Gmp from gvm.transforms import EtreeCheckCommandTransform connection = UnixSocketConnection(path='/run/gvmd/gvmd.sock') transform = EtreeCheckCommandTransform() with Gmp(connection=connection, transform=transform) as gmp: gmp.authenticate('admin', 'password') reports = gmp.get_reports() print(f'Total reports: {len(reports)}') "
bash# Check if credentials were accepted during scan # In the scan report, look for NVT "Authentication tests" results: # - OID 1.3.6.1.4.1.25623.1.0.103591 (SSH authentication successful) # - OID 1.3.6.1.4.1.25623.1.0.90023 (SMB authentication successful) # Verify via gvm-cli gvm-cli socket --socketpath /run/gvmd/gvmd.sock --gmp-username admin --gmp-password <password> --xml \ '<get_results filter="name=SSH rows=10 sort-reverse=severity"/>'
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 8,827 | 12,104 | +37% | 1 | 1 | 0% | 790 | 4,162 | +427% | 0 | 0 | — |
case-02 | fail→fail | 17,406 | 18,720 | +8% | 1 | 1 | 0% | 3,683 | 3,887 | +6% | 0 | 0 | — |
case-03 | fail→pass | 19,803 | 16,240 | -18% | 1 | 1 | 0% | 4,167 | 6,292 | +51% | 0 | 0 | — |
case-04 | fail→fail | 14,818 | 15,685 | +6% | 1 | 1 | 0% | 3,079 | 5,228 | +70% | 0 | 0 | — |
case-05 | fail→fail | 17,793 | 15,816 | -11% | 1 | 1 | 0% | 3,658 | 5,919 | +62% | 0 | 0 | — |
case-06 | fail→fail | 14,155 | 15,139 | +7% | 1 | 1 | 0% | 2,414 | 5,801 | +140% | 0 | 0 | — |
case-07 | fail→fail | 9,108 | 4,250 | -53% | 1 | 1 | 0% | 1,651 | 3,574 | +116% | 0 | 0 | — |
case-08 | pass→pass | 14,697 | 7,446 | -49% | 1 | 1 | 0% | 2,688 | 4,254 | +58% | 0 | 0 | — |
case-09 | fail→fail | 9,941 | 7,394 | -26% | 1 | 1 | 0% | 1,623 | 4,130 | +154% | 0 | 0 | — |
case-10 | fail→pass | 13,223 | 3,788 | -71% | 1 | 1 | 0% | 1,024 | 3,239 | +216% | 0 | 0 | — |
case-11 | fail→pass | 7,697 | 3,071 | -60% | 1 | 1 | 0% | 1,378 | 3,387 | +146% | 0 | 0 | — |
case-12 | fail→pass | 6,339 | 3,143 | -50% | 1 | 1 | 0% | 1,049 | 3,350 | +219% | 0 | 0 | — |
case-13 | pass→pass | 7,063 | 5,648 | -20% | 1 | 1 | 0% | 1,267 | 3,827 | +202% | 0 | 0 | — |
case-14 | pass→pass | 16,737 | 3,711 | -78% | 1 | 1 | 0% | 1,514 | 3,574 | +136% | 0 | 0 | — |
case-15 | fail→fail | 6,986 | 3,748 | -46% | 1 | 1 | 0% | 1,388 | 3,469 | +150% | 0 | 0 | — |
case-16 | fail→pass | 6,752 | 4,020 | -40% | 1 | 1 | 0% | 1,290 | 3,457 | +168% | 0 | 0 | — |
case-17 | fail→fail | 5,982 | 2,604 | -56% | 1 | 1 | 0% | 1,091 | 3,304 | +203% | 0 | 0 | — |
case-18 | fail→pass | 8,238 | 4,080 | -50% | 1 | 1 | 0% | 1,648 | 3,624 | +120% | 0 | 0 | — |
case-19 | fail→fail | 5,280 | 1,999 | -62% | 1 | 1 | 0% | 986 | 3,132 | +218% | 0 | 0 | — |
case-20 | fail→fail | 5,881 | 3,198 | -46% | 1 | 1 | 0% | 1,097 | 3,276 | +199% | 0 | 0 | — |
case-21 | fail→fail | 3,051 | 2,697 | -12% | 1 | 1 | 0% | 375 | 3,015 | +704% | 0 | 0 | — |
case-22 | fail→pass | 10,231 | 4,717 | -54% | 1 | 1 | 0% | 565 | 3,674 | +550% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.