漏洞描述
Ensure default administrative shares (e.g., C$, D$, Admin$) are disabled by verifying that the AutoShareServer registry value is set to 0.
Leaving these shares enabled can expose system resources to unauthorized access.
id: hard-disk-default-share
info:
name: Hard Disk Default Share Removal Check
author: nukunga[SungHyunJeon]
severity: medium
description: |
Ensure default administrative shares (e.g., C$, D$, Admin$) are disabled by verifying that the AutoShareServer registry value is set to 0.
Leaving these shares enabled can expose system resources to unauthorized access.
impact: |
If the AutoShareServer registry value is set to 1 or default administrative shares (excluding IPC$) are present, attackers may exploit them to gain unauthorized access to system resources.
remediation: |
Permanently disable default administrative shares by setting the AutoShareServer registry value to 0 at:
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
- Additionally, remove any non-essential default shares using the appropriate system management tools.
reference:
- https://isms.kisa.or.kr/main/csap/notice/?boardId=bbs_0000000000000004&mode=view&cntId=85
tags: ftp,iis,code,windows-audit,kisa,share-permissions
self-contained: true
code:
- pre-condition: |
IsWindows();
engine:
- powershell
- powershell.exe
args:
- -ExecutionPolicy
- Bypass
pattern: "*.ps1"
source: |
$vulnerable = $false
# Check the AutoShareServer registry value
$regPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'
$autoShare = (Get-ItemProperty -Path $regPath -Name AutoShareServer -ErrorAction SilentlyContinue).AutoShareServer
if ($autoShare -eq 1) {
$vulnerable = $true
}
# Retrieve list of shared folders using 'net share'
$netShares = net share | Out-String
$lines = $netShares -split "`n"
$shareNames = @()
$startParsing = $false
foreach ($line in $lines) {
if ($line -match "^-+") {
$startParsing = $true
continue
}
if ($startParsing -and $line.Trim() -ne "" -and $line -notmatch "The command completed successfully") {
$tokens = $line.Trim() -split "\s+"
if ($tokens.Count -gt 0) {
$shareNames += $tokens[0]
}
}
}
# Define default shares to check (excluding IPC$)
$defaultShares = @("C$", "D$", "Admin$")
foreach ($share in $shareNames) {
if ($defaultShares -contains $share) {
$vulnerable = $true
break
}
}
if ($vulnerable) {
"DEFAULT_SHARE_VULNERABLE"
} else {
"DEFAULT_SHARE_COMPLIANT"
}
matchers:
- type: word
words:
- "DEFAULT_SHARE_VULNERABLE"
# digest: 4a0a004730450221009ebdc7c1aef05392bad7dfec19455d19a49841b9c5450289066663f12f7cf7b702205fc2205ef3699f0479d05c18f6ba580269db8bfb3265cd700a7084fbe01794e2:922c64590222798bb761d5b6d8e72950